diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b91e58a83f43476d985fc513a98a77c943ce8789..164bc05d608e60f63aee2bbb2ed9b40a9cc8182c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -17,6 +17,7 @@ src/GPU/* @ndtrung81 src/KOKKOS/* @stanmoore1 src/KIM/* @ellio167 src/LATTE/* @cnegre +src/MESSAGE/* @sjplimp src/SPIN/* @julient31 src/USER-CGDNA/* @ohenrich src/USER-CGSDK/* @akohlmey @@ -29,19 +30,86 @@ src/USER-MOFFF/* @hheenen src/USER-MOLFILE/* @akohlmey src/USER-NETCDF/* @pastewka src/USER-PHONON/* @lingtikong +src/USER-PTM/* @pmla src/USER-OMP/* @akohlmey src/USER-QMMM/* @akohlmey src/USER-REAXC/* @hasanmetin +src/USER-SCAFACOS/* @rhalver src/USER-TALLY/* @akohlmey src/USER-UEF/* @danicholson src/USER-VTK/* @rbberger + # individual files in packages src/GPU/pair_vashishta_gpu.* @andeplane src/KOKKOS/pair_vashishta_kokkos.* @andeplane src/MANYBODY/pair_vashishta_table.* @andeplane +src/MANYBODY/pair_atm.* @sergeylishchuk src/USER-MISC/fix_bond_react.* @jrgissing src/USER-MISC/*_grem.* @dstelter92 +src/USER-MISC/compute_stress_mop*.* @RomainVermorel + +# core LAMMPS classes +src/lammps.* @sjplimp +src/pointers.h @sjplimp +src/atom.* @sjplimp +src/atom_vec.* @sjplimp +src/angle.* @sjplimp +src/bond.* @sjplimp +src/comm*.* @sjplimp +src/compute.* @sjplimp +src/dihedral.* @sjplimp +src/domain.* @sjplimp +src/dump*.* @sjplimp +src/error.* @sjplimp +src/finish.* @sjplimp +src/fix.* @sjplimp +src/force.* @sjplimp +src/group.* @sjplimp +src/improper.* @sjplimp +src/kspace.* @sjplimp +src/lmptyp.h @sjplimp +src/library.* @sjplimp +src/main.cpp @sjplimp +src/memory.* @sjplimp +src/modify.* @sjplimp +src/molecule.* @sjplimp +src/my_page.h @sjplimp +src/my_pool_chunk.h @sjplimp +src/npair*.* @sjplimp +src/ntopo*.* @sjplimp +src/nstencil*.* @sjplimp +src/neighbor.* @sjplimp +src/nbin*.* @sjplimp +src/neigh_*.* @sjplimp +src/output.* @sjplimp +src/pair.* @sjplimp +src/rcb.* @sjplimp +src/random_*.* @sjplimp +src/region*.* @sjplimp +src/rcb.* @sjplimp +src/read*.* @sjplimp +src/rerun.* @sjplimp +src/run.* @sjplimp +src/respa.* @sjplimp +src/set.* @sjplimp +src/special.* @sjplimp +src/suffix.h @sjplimp +src/thermo.* @sjplimp +src/universe.* @sjplimp +src/update.* @sjplimp +src/variable.* @sjplimp +src/verlet.* @sjplimp +src/velocity.* @sjplimp +src/write_data.* @sjplimp +src/write_restart.* @sjplimp + +# overrides for specific files +src/dump_movie.* @akohlmey +src/exceptions.h @rbberger +src/fix_nh.* @athomps +src/info.* @akohlmey @rbberger +src/timer.* @akohlmey # tools tools/msi2lmp/* @akohlmey diff --git a/.gitignore b/.gitignore index 50b970249a7ab02f6c9da09b43da28bc37f7a15b..1ce415678ea6a746a494b09cafc97137b103ed0b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *~ *.o *.so +*.lo *.cu_o *.ptx *_ptx.h @@ -32,6 +33,7 @@ log.cite .Trashes ehthumbs.db Thumbs.db +.clang-format #cmake /build* diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 460d177c9236998897e0e7518708c44fb87956a2..610fb5b57c9c0c0c44cfb0456a379a000fed87f1 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -13,7 +13,7 @@ get_filename_component(LAMMPS_DOC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../doc ABSOLUT # To avoid conflicts with the conventional Makefile build system, we build everything here -file(GLOB LIB_SOURCES ${LAMMPS_SOURCE_DIR}/*.cpp) +file(GLOB LIB_SOURCES ${LAMMPS_SOURCE_DIR}/[^.]*.cpp) file(GLOB LMP_SOURCES ${LAMMPS_SOURCE_DIR}/main.cpp) list(REMOVE_ITEM LIB_SOURCES ${LMP_SOURCES}) @@ -43,6 +43,29 @@ function(validate_option name values) endif() endfunction(validate_option) +function(get_lammps_version version_header variable) + file(READ ${version_header} line) + set(MONTHS x Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) + string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\1" day "${line}") + string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\2" month "${line}") + string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\3" year "${line}") + string(STRIP ${day} day) + string(STRIP ${month} month) + string(STRIP ${year} year) + list(FIND MONTHS "${month}" month) + string(LENGTH ${day} day_length) + string(LENGTH ${month} month_length) + if(day_length EQUAL 1) + set(day "0${day}") + endif() + if(month_length EQUAL 1) + set(month "0${month}") + endif() + set(${variable} "${year}${month}${day}" PARENT_SCOPE) +endfunction() + +get_lammps_version(${LAMMPS_SOURCE_DIR}/version.h LAMMPS_VERSION) + # Cmake modules/macros are in a subdirectory to keep this file cleaner set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Modules) @@ -113,6 +136,7 @@ if(BUILD_EXE) if(LAMMPS_MACHINE) set(LAMMPS_MACHINE "_${LAMMPS_MACHINE}") endif() + set(LAMMPS_BINARY lmp${LAMMPS_MACHINE}) endif() option(BUILD_LIB "Build LAMMPS library" OFF) @@ -121,10 +145,10 @@ if(BUILD_LIB) if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() - set(LIB_SUFFIX "" CACHE STRING "Suffix to append to liblammps and pkg-config file") - mark_as_advanced(LIB_SUFFIX) - if(LIB_SUFFIX) - set(LIB_SUFFIX "_${LIB_SUFFIX}") + set(LAMMPS_LIB_SUFFIX "" CACHE STRING "Suffix to append to liblammps and pkg-config file") + mark_as_advanced(LAMMPS_LIB_SUFFIX) + if(LAMMPS_LIB_SUFFIX) + set(LAMMPS_LIB_SUFFIX "_${LAMMPS_LIB_SUFFIX}") endif() endif() @@ -139,6 +163,35 @@ set(LAMMPS_LINK_LIBS) set(LAMMPS_DEPS) set(LAMMPS_API_DEFINES) +set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE GRANULAR + KSPACE MANYBODY MC MEAM MESSAGE MISC MOLECULE PERI REAX REPLICA RIGID SHOCK + SPIN SNAP SRD KIM PYTHON MSCG MPIIO VORONOI POEMS LATTE USER-ATC USER-AWPMD + USER-BOCS USER-CGDNA USER-MESO USER-CGSDK USER-COLVARS USER-DIFFRACTION + USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-LB USER-MANIFOLD + USER-MEAMC USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF + USER-PHONON USER-PTM USER-QTB USER-REAXC USER-SCAFACOS USER-SMD USER-SMTBQ + USER-SPH USER-TALLY USER-UEF USER-VTK USER-QUIP USER-QMMM) +set(ACCEL_PACKAGES USER-OMP KOKKOS OPT USER-INTEL GPU) +set(OTHER_PACKAGES CORESHELL QEQ) +foreach(PKG ${DEFAULT_PACKAGES}) + option(PKG_${PKG} "Build ${PKG} Package" OFF) +endforeach() +foreach(PKG ${ACCEL_PACKAGES} ${OTHER_PACKAGES}) + option(PKG_${PKG} "Build ${PKG} Package" OFF) +endforeach() + +###################################################### +# packages with special compiler needs or external libs +###################################################### +if(PKG_REAX OR PKG_MEAM OR PKG_USER-QUIP OR PKG_USER-QMMM OR PKG_LATTE OR PKG_USER-SCAFACOS) + enable_language(Fortran) +endif() + +if(PKG_MEAM OR PKG_USER-H5MD OR PKG_USER-QMMM OR PKG_USER-SCAFACOS) + enable_language(C) +endif() + +# do MPI detection after language activation, if MPI for these language is required find_package(MPI QUIET) option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) if(BUILD_MPI) @@ -183,25 +236,52 @@ endif() option(CMAKE_VERBOSE_MAKEFILE "Verbose makefile" OFF) option(ENABLE_TESTING "Enable testing" OFF) -if(ENABLE_TESTING) +if(ENABLE_TESTING AND BUILD_EXE) enable_testing() -endif(ENABLE_TESTING) + option(LAMMPS_TESTING_SOURCE_DIR "Location of lammps-testing source directory" "") + option(LAMMPS_TESTING_GIT_TAG "Git tag of lammps-testing" "master") + mark_as_advanced(LAMMPS_TESTING_SOURCE_DIR LAMMPS_TESTING_GIT_TAG) -set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE GRANULAR - KSPACE MANYBODY MC MEAM MISC MOLECULE PERI REAX REPLICA RIGID SHOCK SPIN SNAP - SRD KIM PYTHON MSCG MPIIO VORONOI POEMS LATTE USER-ATC USER-AWPMD USER-BOCS - USER-CGDNA USER-MESO USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE - USER-EFF USER-FEP USER-H5MD USER-LB USER-MANIFOLD USER-MEAMC USER-MGPT USER-MISC - USER-MOFFF USER-MOLFILE USER-NETCDF USER-PHONON USER-QTB USER-REAXC USER-SMD - USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK USER-QUIP USER-QMMM) -set(ACCEL_PACKAGES USER-OMP KOKKOS OPT USER-INTEL GPU) -set(OTHER_PACKAGES CORESHELL QEQ) -foreach(PKG ${DEFAULT_PACKAGES}) - option(PKG_${PKG} "Build ${PKG} Package" OFF) -endforeach() -foreach(PKG ${ACCEL_PACKAGES} ${OTHER_PACKAGES}) - option(PKG_${PKG} "Build ${PKG} Package" OFF) -endforeach() + if (CMAKE_VERSION VERSION_GREATER "3.10.3" AND NOT LAMMPS_TESTING_SOURCE_DIR) + include(FetchContent) + + FetchContent_Declare(lammps-testing + GIT_REPOSITORY https://github.com/lammps/lammps-testing.git + GIT_TAG ${LAMMPS_TESTING_GIT_TAG} + ) + + FetchContent_GetProperties(lammps-testing) + if(NOT lammps-testing_POPULATED) + message(STATUS "Downloading tests...") + FetchContent_Populate(lammps-testing) + endif() + + set(LAMMPS_TESTING_SOURCE_DIR ${lammps-testing_SOURCE_DIR}) + elseif(NOT LAMMPS_TESTING_SOURCE_DIR) + message(WARNING "Full test-suite requires CMake >= 3.11 or copy of\n" + "https://github.com/lammps/lammps-testing in LAMMPS_TESTING_SOURCE_DIR") + endif() + + if(EXISTS ${LAMMPS_TESTING_SOURCE_DIR}) + message(STATUS "Running test discovery...") + + file(GLOB_RECURSE TEST_SCRIPTS ${LAMMPS_TESTING_SOURCE_DIR}/tests/core/*/in.*) + foreach(script_path ${TEST_SCRIPTS}) + get_filename_component(TEST_NAME ${script_path} EXT) + get_filename_component(SCRIPT_NAME ${script_path} NAME) + get_filename_component(PARENT_DIR ${script_path} DIRECTORY) + string(SUBSTRING ${TEST_NAME} 1 -1 TEST_NAME) + string(REPLACE "-" "_" TEST_NAME ${TEST_NAME}) + string(REPLACE "+" "_" TEST_NAME ${TEST_NAME}) + set(TEST_NAME "test_core_${TEST_NAME}_serial") + add_test(${TEST_NAME} ${CMAKE_BINARY_DIR}/${LAMMPS_BINARY} -in ${SCRIPT_NAME}) + set_tests_properties(${TEST_NAME} PROPERTIES WORKING_DIRECTORY ${PARENT_DIR}) + endforeach() + list(LENGTH TEST_SCRIPTS NUM_TESTS) + + message(STATUS "Found ${NUM_TESTS} tests.") + endif() +endif() macro(pkg_depends PKG1 PKG2) if(PKG_${PKG1} AND NOT (PKG_${PKG2} OR BUILD_${PKG2})) @@ -215,17 +295,7 @@ pkg_depends(MPIIO MPI) pkg_depends(USER-ATC MANYBODY) pkg_depends(USER-LB MPI) pkg_depends(USER-PHONON KSPACE) - -###################################################### -# packages with special compiler needs or external libs -###################################################### -if(PKG_REAX OR PKG_MEAM OR PKG_USER-QUIP OR PKG_USER-QMMM OR PKG_LATTE) - enable_language(Fortran) -endif() - -if(PKG_MEAM OR PKG_USER-H5MD OR PKG_USER-QMMM) - enable_language(C) -endif() +pkg_depends(USER-SCAFACOS MPI) find_package(OpenMP QUIET) option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND}) @@ -276,11 +346,14 @@ endif() if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE) find_package(LAPACK) - if(NOT LAPACK_FOUND) + find_package(BLAS) + if(NOT LAPACK_FOUND OR NOT BLAS_FOUND) enable_language(Fortran) - file(GLOB LAPACK_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/linalg/*.[fF]) + file(GLOB LAPACK_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/linalg/[^.]*.[fF]) add_library(linalg STATIC ${LAPACK_SOURCES}) set(LAPACK_LIBRARIES linalg) + else() + list(APPEND LAPACK_LIBRARIES ${BLAS_LIBRARIES}) endif() endif() @@ -400,6 +473,57 @@ if(PKG_LATTE) list(APPEND LAMMPS_LINK_LIBS ${LATTE_LIBRARIES} ${LAPACK_LIBRARIES}) endif() +if(PKG_USER-SCAFACOS) + find_package(GSL REQUIRED) + option(DOWNLOAD_SCAFACOS "Download ScaFaCoS (instead of using the system's one)" OFF) + if(DOWNLOAD_SCAFACOS) + include(ExternalProject) + ExternalProject_Add(scafacos_build + URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz + URL_MD5 bd46d74e3296bd8a444d731bb10c1738 + CONFIGURE_COMMAND /configure --prefix= + --disable-doc + --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m + --with-internal-fftw + --with-internal-pfft + --with-internal-pnfft + $<$:--with-pic> + FC=${CMAKE_MPI_Fortran_COMPILER} + CXX=${CMAKE_MPI_CXX_COMPILER} + CC=${CMAKE_MPI_C_COMPILER} + F77= + ) + ExternalProject_get_property(scafacos_build INSTALL_DIR) + set(SCAFACOS_BUILD_DIR ${INSTALL_DIR}) + set(SCAFACOS_INCLUDE_DIRS ${SCAFACOS_BUILD_DIR}/include) + list(APPEND LAMMPS_DEPS scafacos_build) + # list and order from pkg_config file of ScaFaCoS build + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_direct.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_ewald.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_fmm.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_p2nfft.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_p3m.a) + list(APPEND LAMMPS_LINK_LIBS ${GSL_LIBRARIES}) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_near.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_gridsort.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_resort.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_redist.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_common.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_pnfft.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_pfft.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_fftw3_mpi.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_fftw3.a) + list(APPEND LAMMPS_LINK_LIBS ${MPI_Fortran_LIBRARIES}) + list(APPEND LAMMPS_LINK_LIBS ${MPI_C_LIBRARIES}) + else() + FIND_PACKAGE(PkgConfig REQUIRED) + PKG_CHECK_MODULES(SCAFACOS scafacos REQUIRED) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_LDFLAGS}) + endif() + include_directories(${SCAFACOS_INCLUDE_DIRS}) +endif() + if(PKG_USER-MOLFILE) add_library(molfile INTERFACE) target_include_directories(molfile INTERFACE ${LAMMPS_LIB_SOURCE_DIR}/molfile) @@ -409,8 +533,8 @@ endif() if(PKG_USER-NETCDF) find_package(NetCDF REQUIRED) - include_directories(NETCDF_INCLUDE_DIR) - list(APPEND LAMMPS_LINK_LIBS ${NETCDF_LIBRARY}) + include_directories(${NETCDF_INCLUDE_DIRS}) + list(APPEND LAMMPS_LINK_LIBS ${NETCDF_LIBRARIES}) add_definitions(-DLMP_HAS_NETCDF -DNC_64BIT_DATA=0x0020) endif() @@ -427,8 +551,9 @@ if(PKG_USER-SMD) set(EIGEN3_INCLUDE_DIR ${SOURCE_DIR}) list(APPEND LAMMPS_DEPS Eigen3_build) else() - find_package(Eigen3) - if(NOT Eigen3_FOUND) + find_package(Eigen3 NO_MODULE) + mark_as_advanced(Eigen3_DIR) + if(NOT EIGEN3_FOUND) message(FATAL_ERROR "Eigen3 not found, help CMake to find it by setting EIGEN3_INCLUDE_DIR, or set DOWNLOAD_EIGEN3=ON to download it") endif() endif() @@ -478,6 +603,40 @@ if(PKG_KIM) include_directories(${KIM_INCLUDE_DIRS}) endif() +if(PKG_MESSAGE) + option(MESSAGE_ZMQ "Use ZeroMQ in MESSAGE package" OFF) + file(GLOB_RECURSE cslib_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.F + ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.c + ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.cpp) + + if(BUILD_SHARED_LIBS) + add_library(cslib SHARED ${cslib_SOURCES}) + else() + add_library(cslib STATIC ${cslib_SOURCES}) + endif() + + if(BUILD_MPI) + target_compile_definitions(cslib PRIVATE -DMPI_YES) + set_target_properties(cslib PROPERTIES OUTPUT_NAME "csmpi") + else() + target_compile_definitions(cslib PRIVATE -DMPI_NO) + set_target_properties(cslib PROPERTIES OUTPUT_NAME "csnompi") + endif() + + if(MESSAGE_ZMQ) + target_compile_definitions(cslib PRIVATE -DZMQ_YES) + find_package(ZMQ REQUIRED) + target_include_directories(cslib PRIVATE ${ZMQ_INCLUDE_DIRS}) + target_link_libraries(cslib PUBLIC ${ZMQ_LIBRARIES}) + else() + target_compile_definitions(cslib PRIVATE -DZMQ_NO) + target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_ZMQ) + endif() + + list(APPEND LAMMPS_LINK_LIBS cslib) + include_directories(${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src) +endif() + if(PKG_MSCG) find_package(GSL REQUIRED) option(DOWNLOAD_MSCG "Download latte (instead of using the system's one)" OFF) @@ -564,8 +723,8 @@ RegisterStyles(${LAMMPS_SOURCE_DIR}) foreach(PKG ${DEFAULT_PACKAGES}) set(${PKG}_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/${PKG}) - file(GLOB ${PKG}_SOURCES ${${PKG}_SOURCES_DIR}/*.cpp) - file(GLOB ${PKG}_HEADERS ${${PKG}_SOURCES_DIR}/*.h) + file(GLOB ${PKG}_SOURCES ${${PKG}_SOURCES_DIR}/[^.]*.cpp) + file(GLOB ${PKG}_HEADERS ${${PKG}_SOURCES_DIR}/[^.]*.h) # check for package files in src directory due to old make system DetectBuildSystemConflict(${LAMMPS_SOURCE_DIR} ${${PKG}_SOURCES} ${${PKG}_HEADERS}) @@ -583,8 +742,8 @@ endforeach() foreach(PKG ${ACCEL_PACKAGES}) set(${PKG}_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/${PKG}) - file(GLOB ${PKG}_SOURCES ${${PKG}_SOURCES_DIR}/*.cpp) - file(GLOB ${PKG}_HEADERS ${${PKG}_SOURCES_DIR}/*.h) + file(GLOB ${PKG}_SOURCES ${${PKG}_SOURCES_DIR}/[^.]*.cpp) + file(GLOB ${PKG}_HEADERS ${${PKG}_SOURCES_DIR}/[^.]*.h) # check for package files in src directory due to old make system DetectBuildSystemConflict(${LAMMPS_SOURCE_DIR} ${${PKG}_SOURCES} ${${PKG}_HEADERS}) @@ -598,8 +757,10 @@ foreach(SIMPLE_LIB REAX MEAM POEMS USER-ATC USER-AWPMD USER-COLVARS USER-H5MD if(PKG_${SIMPLE_LIB}) string(REGEX REPLACE "^USER-" "" PKG_LIB "${SIMPLE_LIB}") string(TOLOWER "${PKG_LIB}" PKG_LIB) - file(GLOB_RECURSE ${PKG_LIB}_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/*.F - ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/*.c ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/*.cpp) + file(GLOB_RECURSE ${PKG_LIB}_SOURCES + ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.F + ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.c + ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}/[^.]*.cpp) add_library(${PKG_LIB} STATIC ${${PKG_LIB}_SOURCES}) list(APPEND LAMMPS_LINK_LIBS ${PKG_LIB}) if(PKG_LIB STREQUAL awpmd) @@ -674,13 +835,16 @@ if(PKG_USER-OMP) set(USER-OMP_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-OMP) set(USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/thr_data.cpp ${USER-OMP_SOURCES_DIR}/thr_omp.cpp + ${USER-OMP_SOURCES_DIR}/fix_omp.cpp ${USER-OMP_SOURCES_DIR}/fix_nh_omp.cpp - ${USER-OMP_SOURCES_DIR}/fix_nh_sphere_omp.cpp) + ${USER-OMP_SOURCES_DIR}/fix_nh_sphere_omp.cpp + ${USER-OMP_SOURCES_DIR}/domain_omp.cpp) + add_definitions(-DLMP_USER_OMP) set_property(GLOBAL PROPERTY "OMP_SOURCES" "${USER-OMP_SOURCES}") # detects styles which have USER-OMP version RegisterStylesExt(${USER-OMP_SOURCES_DIR} omp OMP_SOURCES) - + RegisterFixStyle("${USER-OMP_SOURCES_DIR}/fix_omp.h") get_property(USER-OMP_SOURCES GLOBAL PROPERTY OMP_SOURCES) @@ -880,7 +1044,7 @@ if(PKG_GPU) set(GPU_PREC_SETTING "SINGLE_SINGLE") endif() - file(GLOB GPU_LIB_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/*.cpp) + file(GLOB GPU_LIB_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cpp) file(MAKE_DIRECTORY ${LAMMPS_LIB_BINARY_DIR}/gpu) if(GPU_API STREQUAL "CUDA") @@ -893,15 +1057,15 @@ if(PKG_GPU) set(GPU_ARCH "sm_30" CACHE STRING "LAMMPS GPU CUDA SM architecture (e.g. sm_60)") - file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/*.cu ${CMAKE_CURRENT_SOURCE_DIR}/gpu/*.cu) + file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu ${CMAKE_CURRENT_SOURCE_DIR}/gpu/[^.]*.cu) list(REMOVE_ITEM GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_pppm.cu) cuda_include_directories(${LAMMPS_LIB_SOURCE_DIR}/gpu ${LAMMPS_LIB_BINARY_DIR}/gpu) if(CUDPP_OPT) cuda_include_directories(${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini) - file(GLOB GPU_LIB_CUDPP_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/*.cpp) - file(GLOB GPU_LIB_CUDPP_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/*.cu) + file(GLOB GPU_LIB_CUDPP_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cpp) + file(GLOB GPU_LIB_CUDPP_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cu) endif() cuda_compile_cubin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS @@ -950,7 +1114,7 @@ if(PKG_GPU) include(OpenCLUtils) set(OCL_COMMON_HEADERS ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_preprocessor.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_aux_fun1.h) - file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/*.cu) + file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu) list(REMOVE_ITEM GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne.cu ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne_lj.cu) foreach(GPU_KERNEL ${GPU_LIB_CU}) @@ -1008,7 +1172,9 @@ include_directories(${LAMMPS_STYLE_HEADERS_DIR}) ###################################### set(temp "#ifndef LMP_INSTALLED_PKGS_H\n#define LMP_INSTALLED_PKGS_H\n") set(temp "${temp}const char * LAMMPS_NS::LAMMPS::installed_packages[] = {\n") -foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES} ${OTHER_PACKAGES}) +set(temp_PKG_LIST ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES} ${OTHER_PACKAGES}) +list(SORT temp_PKG_LIST) +foreach(PKG ${temp_PKG_LIST}) if(PKG_${PKG}) set(temp "${temp} \"${PKG}\",\n") endif() @@ -1033,14 +1199,14 @@ if(BUILD_LIB) if(LAMMPS_DEPS) add_dependencies(lammps ${LAMMPS_DEPS}) endif() - set_target_properties(lammps PROPERTIES OUTPUT_NAME lammps${LIB_SUFFIX}) - if(BUILD_SHARED_LIBS) - set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION}) - install(TARGETS lammps LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(FILES ${LAMMPS_SOURCE_DIR}/library.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps) - configure_file(pkgconfig/liblammps.pc.in ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LIB_SUFFIX}.pc @ONLY) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LIB_SUFFIX}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - endif() + set_target_properties(lammps PROPERTIES OUTPUT_NAME lammps${LAMMPS_LIB_SUFFIX}) + set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION}) + install(TARGETS lammps LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install(FILES ${LAMMPS_SOURCE_DIR}/library.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps) + configure_file(pkgconfig/liblammps.pc.in ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_LIB_SUFFIX}.pc @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_LIB_SUFFIX}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + configure_file(FindLAMMPS.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FindLAMMPS${LAMMPS_LIB_SUFFIX}.cmake @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FindLAMMPS${LAMMPS_LIB_SUFFIX}.cmake DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/Module) else() list(APPEND LMP_SOURCES ${LIB_SOURCES}) endif() @@ -1056,10 +1222,11 @@ if(BUILD_EXE) endif() endif() - set_target_properties(lmp PROPERTIES OUTPUT_NAME lmp${LAMMPS_MACHINE}) + set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY}) install(TARGETS lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1) if(ENABLE_TESTING) - add_test(ShowHelp lmp${LAMMPS_MACHINE} -help) + add_test(ShowHelp ${LAMMPS_BINARY} -help) endif() endif() @@ -1074,7 +1241,7 @@ if(BUILD_DOC) set(VIRTUALENV ${PYTHON_EXECUTABLE} -m virtualenv) - file(GLOB DOC_SOURCES ${LAMMPS_DOC_DIR}/src/*.txt) + file(GLOB DOC_SOURCES ${LAMMPS_DOC_DIR}/src/[^.]*.txt) file(GLOB PDF_EXTRA_SOURCES ${LAMMPS_DOC_DIR}/src/lammps_commands*.txt ${LAMMPS_DOC_DIR}/src/lammps_support.txt ${LAMMPS_DOC_DIR}/src/lammps_tutorials.txt) list(REMOVE_ITEM DOC_SOURCES ${PDF_EXTRA_SOURCES}) @@ -1127,7 +1294,7 @@ endif() # Install potential files in data directory ############################################################################### set(LAMMPS_POTENTIALS_DIR ${CMAKE_INSTALL_FULL_DATADIR}/lammps/potentials) -install(DIRECTORY ${LAMMPS_SOURCE_DIR}/../potentials DESTINATION ${CMAKE_INSTALL_DATADIR}/lammps/potentials) +install(DIRECTORY ${LAMMPS_SOURCE_DIR}/../potentials/ DESTINATION ${LAMMPS_POTENTIALS_DIR}) configure_file(etc/profile.d/lammps.sh.in ${CMAKE_BINARY_DIR}/etc/profile.d/lammps.sh @ONLY) configure_file(etc/profile.d/lammps.csh.in ${CMAKE_BINARY_DIR}/etc/profile.d/lammps.csh @ONLY) @@ -1169,7 +1336,7 @@ endif() ############################################################################### # Print package summary ############################################################################### -foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES}) +foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES} ${OTHER_PACKAGES}) if(PKG_${PKG}) message(STATUS "Building package: ${PKG}") endif() diff --git a/cmake/FindLAMMPS.cmake.in b/cmake/FindLAMMPS.cmake.in new file mode 100644 index 0000000000000000000000000000000000000000..586df83c2d080197ea0256794febd395ab81cc63 --- /dev/null +++ b/cmake/FindLAMMPS.cmake.in @@ -0,0 +1,48 @@ +# - Find liblammps +# Find the native liblammps headers and libraries. +# +# The following variables will set: +# LAMMPS_INCLUDE_DIRS - where to find lammps/library.h, etc. +# LAMMPS_LIBRARIES - List of libraries when using lammps. +# LAMMPS_API_DEFINES - lammps library api defines +# LAMMPS_VERSION - lammps library version +# LAMMPS_FOUND - True if liblammps found. +# +# In addition a LAMMPS::LAMMPS imported target is getting created. +# +# LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator +# http://lammps.sandia.gov, Sandia National Laboratories +# Steve Plimpton, sjplimp@sandia.gov +# +# Copyright (2003) Sandia Corporation. Under the terms of Contract +# DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains +# certain rights in this software. This software is distributed under +# the GNU General Public License. +# +# See the README file in the top-level LAMMPS directory. +# + +find_package(PkgConfig) + +pkg_check_modules(PC_LAMMPS liblammps@LAMMPS_LIB_SUFFIX@) +find_path(LAMMPS_INCLUDE_DIR lammps/library.h HINTS ${PC_LAMMPS_INCLUDE_DIRS} @CMAKE_INSTALL_FULL_INCLUDEDIR@) + +set(LAMMPS_VERSION @LAMMPS_VERSION@) +set(LAMMPS_API_DEFINES @LAMMPS_API_DEFINES@) + +find_library(LAMMPS_LIBRARY NAMES lammps@LAMMPS_LIB_SUFFIX@ HINTS ${PC_LAMMPS_LIBRARY_DIRS} @CMAKE_INSTALL_FULL_LIBDIR@) + +set(LAMMPS_INCLUDE_DIRS "${LAMMPS_INCLUDE_DIR}") +set(LAMMPS_LIBRARIES "${LAMMPS_LIBRARY}") + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set LAMMPS_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(LAMMPS REQUIRED_VARS LAMMPS_LIBRARY LAMMPS_INCLUDE_DIR VERSION_VAR LAMMPS_VERSION) + +mark_as_advanced(LAMMPS_INCLUDE_DIR LAMMPS_LIBRARY) + +if(LAMMPS_FOUND AND NOT TARGET LAMMPS::LAMMPS) + add_library(LAMMPS::LAMMPS UNKNOWN IMPORTED) + set_target_properties(LAMMPS::LAMMPS PROPERTIES IMPORTED_LOCATION "${LAMMPS_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${LAMMPS_INCLUDE_DIR}" INTERFACE_COMPILE_DEFINITIONS "${LAMMPS_API_DEFINES}") +endif() diff --git a/cmake/Modules/FindZMQ.cmake b/cmake/Modules/FindZMQ.cmake new file mode 100644 index 0000000000000000000000000000000000000000..608ccda777336f9d84dfabd40a9c6bdba1bd12be --- /dev/null +++ b/cmake/Modules/FindZMQ.cmake @@ -0,0 +1,8 @@ +find_path(ZMQ_INCLUDE_DIR zmq.h) +find_library(ZMQ_LIBRARY NAMES zmq) + +set(ZMQ_LIBRARIES ${ZMQ_LIBRARY}) +set(ZMQ_INCLUDE_DIRS ${ZMQ_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(ZMQ DEFAULT_MSG ZMQ_LIBRARY ZMQ_INCLUDE_DIR) diff --git a/cmake/Modules/StyleHeaderUtils.cmake b/cmake/Modules/StyleHeaderUtils.cmake index 29ea3725972ce2e1166ef70297c3d6067e90c769..a89d098dd042626e16e8c38f917d512eabf48954 100644 --- a/cmake/Modules/StyleHeaderUtils.cmake +++ b/cmake/Modules/StyleHeaderUtils.cmake @@ -48,8 +48,13 @@ function(CreateStyleHeader path filename) set(temp "") if(ARGC GREATER 2) list(REMOVE_AT ARGV 0 1) + set(header_list) foreach(FNAME ${ARGV}) get_filename_component(FNAME ${FNAME} NAME) + list(APPEND header_list ${FNAME}) + endforeach() + list(SORT header_list) + foreach(FNAME ${header_list}) set(temp "${temp}#include \"${FNAME}\"\n") endforeach() endif() @@ -80,19 +85,23 @@ function(RegisterNPairStyle path) AddStyleHeader(${path} NPAIR) endfunction(RegisterNPairStyle) +function(RegisterFixStyle path) + AddStyleHeader(${path} FIX) +endfunction(RegisterFixStyle) + function(RegisterStyles search_path) FindStyleHeaders(${search_path} ANGLE_CLASS angle_ ANGLE ) # angle ) # force FindStyleHeaders(${search_path} ATOM_CLASS atom_vec_ ATOM_VEC ) # atom ) # atom atom_vec_hybrid FindStyleHeaders(${search_path} BODY_CLASS body_ BODY ) # body ) # atom_vec_body FindStyleHeaders(${search_path} BOND_CLASS bond_ BOND ) # bond ) # force - FindStyleHeaders(${search_path} COMMAND_CLASS "" COMMAND ) # command ) # input + FindStyleHeaders(${search_path} COMMAND_CLASS "[^.]" COMMAND ) # command ) # input FindStyleHeaders(${search_path} COMPUTE_CLASS compute_ COMPUTE ) # compute ) # modify FindStyleHeaders(${search_path} DIHEDRAL_CLASS dihedral_ DIHEDRAL ) # dihedral ) # force FindStyleHeaders(${search_path} DUMP_CLASS dump_ DUMP ) # dump ) # output write_dump FindStyleHeaders(${search_path} FIX_CLASS fix_ FIX ) # fix ) # modify FindStyleHeaders(${search_path} IMPROPER_CLASS improper_ IMPROPER ) # improper ) # force - FindStyleHeaders(${search_path} INTEGRATE_CLASS "" INTEGRATE ) # integrate ) # update - FindStyleHeaders(${search_path} KSPACE_CLASS "" KSPACE ) # kspace ) # force + FindStyleHeaders(${search_path} INTEGRATE_CLASS "[^.]" INTEGRATE ) # integrate ) # update + FindStyleHeaders(${search_path} KSPACE_CLASS "[^.]" KSPACE ) # kspace ) # force FindStyleHeaders(${search_path} MINIMIZE_CLASS min_ MINIMIZE ) # minimize ) # update FindStyleHeaders(${search_path} NBIN_CLASS nbin_ NBIN ) # nbin ) # neighbor FindStyleHeaders(${search_path} NPAIR_CLASS npair_ NPAIR ) # npair ) # neighbor diff --git a/cmake/README.md b/cmake/README.md index 85375cd2aa49ca9ddb0bc97b0fa50d048a344f4a..21e728c1f02a696ede20bf6fe632200acd05f69e 100644 --- a/cmake/README.md +++ b/cmake/README.md @@ -275,6 +275,16 @@ cmake -C ../cmake/presets/std_nolib.cmake -D PKG_GPU=on ../cmake + + BUILD_EXE + control whether to build LAMMPS executable + +
+
on (default)
+
off
+
+ + BUILD_SHARED_LIBS control whether to build LAMMPS as a shared-library diff --git a/cmake/pkgconfig/liblammps.pc.in b/cmake/pkgconfig/liblammps.pc.in index 400b7593cff4034539df766111dd53d6fbbeaac9..7850972f3b50017407318888b53bd824f0a3b85a 100644 --- a/cmake/pkgconfig/liblammps.pc.in +++ b/cmake/pkgconfig/liblammps.pc.in @@ -4,15 +4,15 @@ # after you added @CMAKE_INSTALL_FULL_LIBDIR@/pkg-config to PKG_CONFIG_PATH, # e.g. export PKG_CONFIG_PATH=@CMAKE_INSTALL_FULL_LIBDIR@/pkgconfig -prefix=@CMAKE_INSTALL_FULL_PREFIX@ +prefix=@CMAKE_INSTALL_PREFIX@ libdir=@CMAKE_INSTALL_FULL_LIBDIR@ includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ Name: liblammps@LAMMPS_MACHINE@ Description: Large-scale Atomic/Molecular Massively Parallel Simulator Library URL: http://lammps.sandia.gov -Version: +Version: @LAMMPS_VERSION@ Requires: -Libs: -L${libdir} -llammps@LIB_SUFFIX@@ +Libs: -L${libdir} -llammps@LAMMPS_LIB_SUFFIX@ Libs.private: -lm Cflags: -I${includedir} @LAMMPS_API_DEFINES@ diff --git a/doc/Makefile b/doc/Makefile index 81f362349950be2123d2da4bd14255e7f9f27739..e4ba2fe6a160f88c17c45ed37e2bac5d6c340e1d 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -31,17 +31,19 @@ SPHINXEXTRA = -j $(shell $(PYTHON) -c 'import multiprocessing;print(multiprocess SOURCES=$(filter-out $(wildcard src/lammps_commands*.txt) src/lammps_support.txt src/lammps_tutorials.txt,$(wildcard src/*.txt)) OBJECTS=$(SOURCES:src/%.txt=$(RSTDIR)/%.rst) -.PHONY: help clean-all clean epub html pdf old venv spelling anchor_check +.PHONY: help clean-all clean epub mobi html pdf old venv spelling anchor_check # ------------------------------------------ help: @echo "Please use \`make ' where is one of" @echo " html create HTML doc pages in html dir" - @echo " pdf create Manual.pdf and Developer.pdf in this dir" + @echo " pdf create Developer.pdf and Manual.pdf in this dir" @echo " old create old-style HTML doc pages in old dir" @echo " fetch fetch HTML and PDF files from LAMMPS web site" @echo " epub create ePUB format manual for e-book readers" + @echo " mobi convert ePUB to MOBI format manual for e-book readers (e.g. Kindle)" + @echo " (requires ebook-convert tool from calibre)" @echo " clean remove all intermediate RST files" @echo " clean-all reset the entire build environment" @echo " txt2html build txt2html tool" @@ -106,20 +108,25 @@ epub: $(OBJECTS) @rm -rf epub @echo "Build finished. The ePUB manual file is created." +mobi: epub + @rm -f LAMMPS.mobi + @ebook-convert LAMMPS.epub LAMMPS.mobi + @echo "Conversion finished. The MOBI manual file is created." + pdf: utils/txt2html/txt2html.exe @(\ set -e; \ - cd src; \ + cd src/Developer; \ + pdflatex developer; \ + pdflatex developer; \ + mv developer.pdf ../../Developer.pdf; \ + cd ..; \ ../utils/txt2html/txt2html.exe -b *.txt; \ htmldoc --batch lammps.book; \ for s in `echo *.txt | sed -e 's,\.txt,\.html,g'` ; \ do grep -q $$s lammps.book || \ echo doc file $$s missing in src/lammps.book; done; \ rm *.html; \ - cd Developer; \ - pdflatex developer; \ - pdflatex developer; \ - mv developer.pdf ../../Developer.pdf; \ ) old: utils/txt2html/txt2html.exe diff --git a/doc/lammps.1 b/doc/lammps.1 new file mode 100644 index 0000000000000000000000000000000000000000..d49650bfaad03678902a67c1937db7264f758004 --- /dev/null +++ b/doc/lammps.1 @@ -0,0 +1,45 @@ +.TH LAMMPS "2018-08-22" +.SH NAME +.B LAMMPS +\- Molecular Dynamics Simulator. + +.SH SYNOPSIS +.B lmp +-in in.file + +or + +mpirun \-np 2 +.B lmp +-in in.file + +.SH DESCRIPTION +.B LAMMPS +LAMMPS is a classical molecular dynamics code, and an acronym for Large-scale +Atomic/Molecular Massively Parallel Simulator. LAMMPS has potentials for soft +materials (biomolecules, polymers) and solid-state materials (metals, +semiconductors) and coarse-grained or mesoscopic systems. It can be used to +model atoms or, more generically, as a parallel particle simulator at the +atomic, meso, or continuum scale. + +See http://lammps.sandia.gov/ for documentation. + +.SH OPTIONS +See https://lammps.sandia.gov/doc/Run_options.html for details on +command-line options. + +.SH COPYRIGHT +© 2003--2018 Sandia Corporation + +This package is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This package is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +On Debian systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL-2'. diff --git a/doc/src/Build.txt b/doc/src/Build.txt index 1046171de1c58ecd8c1fc358bc4b598d661ecc38..df30af36f5df45a7621e10f7f3832be49e6e622d 100644 --- a/doc/src/Build.txt +++ b/doc/src/Build.txt @@ -28,6 +28,7 @@ as described on the "Install"_Install.html doc page. Build_settings Build_package Build_extras + Build_windows END_RST --> @@ -39,7 +40,8 @@ END_RST --> "Basic build options"_Build_basics.html "Optional build settings"_Build_settings.html "Include packages in build"_Build_package.html -"Packages with extra build options"_Build_extras.html :all(b) +"Packages with extra build options"_Build_extras.html +"Notes for building LAMMPS on Windows"_Build_windows.html :all(b) If you have problems building LAMMPS, it is often due to software issues on your local machine. If you can, find a local expert to diff --git a/doc/src/Build_basics.txt b/doc/src/Build_basics.txt index cee78aced3faafce24586e4543d344185500fc7d..4b3a347bf1e2248ad1e362e8476b4442e6a0f5dc 100644 --- a/doc/src/Build_basics.txt +++ b/doc/src/Build_basics.txt @@ -61,7 +61,7 @@ library files. Failing this, these 3 variables can be used to specify where the mpi.h file (MPI_INC), and the MPI library files (MPI_PATH) are found, and the name of the library files (MPI_LIB). -For a serial build, you need to specify the 3 varaibles, as shown +For a serial build, you need to specify the 3 variables, as shown above. For a serial LAMMPS build, use the dummy MPI library provided in @@ -145,7 +145,7 @@ By default CMake will use a compiler it finds and it will add optimization flags appropriate to that compiler and any "accelerator packages"_Speed_packages.html you have included in the build. -You can tell CMake to look for a specific compiler with these varaible +You can tell CMake to look for a specific compiler with these variable settings. Likewise you can specify the FLAGS variables if you want to experiment with alternate optimization flags. You should specify all 3 compilers, so that the small number of LAMMPS source files written @@ -216,8 +216,8 @@ LAMMPS can be built as either an executable or as a static or shared library. The LAMMPS library can be called from another application or a scripting language. See the "Howto couple"_Howto_couple.html doc page for more info on coupling LAMMPS to other codes. See the -"Python"_Python doc page for more info on wrapping and running LAMMPS -from Python via its library interface. +"Python"_Python_head.html doc page for more info on wrapping and +running LAMMPS from Python via its library interface. [CMake variables]: @@ -247,7 +247,7 @@ Note that for a shared library to be usable by a calling program, all the auxiliary libraries it depends on must also exist as shared libraries. This will be the case for libraries included with LAMMPS, such as the dummy MPI library in src/STUBS or any package libraries in -the lib/packages directroy, since they are always built as shared +the lib/packages directory, since they are always built as shared libraries using the -fPIC switch. However, if a library like MPI or FFTW does not exist as a shared library, the shared library build will generate an error. This means you will need to install a shared @@ -292,6 +292,10 @@ This will create a lammps/doc/html dir with the HTML doc pages so that you can browse them locally on your system. Type "make" from the lammps/doc dir to see other options. +NOTE: You can also download a tarball of the documention for the +current LAMMPS version (HTML and PDF files), from the website +"download page"_http://lammps.sandia.gov/download.html. + :line Install LAMMPS after a build :h4,link(install) @@ -299,7 +303,7 @@ Install LAMMPS after a build :h4,link(install) After building LAMMPS, you may wish to copy the LAMMPS executable of library, along with other LAMMPS files (library header, doc files) to a globally visible place on your system, for others to access. Note -that you may need super-user priveleges (e.g. sudo) if the directory +that you may need super-user privileges (e.g. sudo) if the directory you want to copy files to is protected. [CMake variable]: diff --git a/doc/src/Build_cmake.txt b/doc/src/Build_cmake.txt index 08c1c72180a417b259078753dd1245d4f93cc6ce..f8b52056fc1616e1ac84174ddeab7aafb27d91ee 100644 --- a/doc/src/Build_cmake.txt +++ b/doc/src/Build_cmake.txt @@ -40,7 +40,7 @@ executable called "lmp" and a library called "liblammps.a" in the If your machine has multiple CPU cores (most do these days), using a command like "make -jN" (with N being the number of available local CPU cores) can be much faster. If you plan to do development on -LAMMPS or need to recompile LAMMPS repeatedly, installation of the +LAMMPS or need to re-compile LAMMPS repeatedly, installation of the ccache (= Compiler Cache) software may speed up compilation even more. After compilation, you can optionally copy the LAMMPS executable and @@ -50,7 +50,7 @@ make install # optional, copy LAMMPS executable & library elsewhere :pre :line -There are 3 variants of CMake: a command-line verison (cmake), a text mode +There are 3 variants of CMake: a command-line version (cmake), a text mode UI version (ccmake), and a graphical GUI version (cmake-GUI). You can use any of them interchangeably to configure and create the LAMMPS build environment. On Linux all the versions produce a Makefile as their @@ -188,7 +188,7 @@ module list # is a cmake module already loaded? module avail # is a cmake module available? module load cmake3 # load cmake module with appropriate name :pre -Most Linux distributions offer precompiled cmake packages through +Most Linux distributions offer pre-compiled cmake packages through their package management system. If you do not have CMake or a new enough version, you can download the latest version at "https://cmake.org/download/"_https://cmake.org/download/. diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 5c33a0a4d44f97545e8d94819161e2bce9fad78e..fb96699743c06f7c47ad218acc8fe883ab187906 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -31,6 +31,7 @@ This is the list of packages that may require additional steps. "KOKKOS"_#kokkos, "LATTE"_#latte, "MEAM"_#meam, +"MESSAGE"_#message, "MSCG"_#mscg, "OPT"_#opt, "POEMS"_#poems, @@ -47,6 +48,7 @@ This is the list of packages that may require additional steps. "USER-OMP"_#user-omp, "USER-QMMM"_#user-qmmm, "USER-QUIP"_#user-quip, +"USER-SCAFACOS"_#user-scafacos, "USER-SMD"_#user-smd, "USER-VTK"_#user-vtk :tb(c=6,ea=c,a=l) @@ -340,7 +342,7 @@ NOTE: the use of the MEAM package is discouraged, as it has been superseded by the USER-MEAMC package, which is a direct translation of the Fortran code in the MEAM library to C++. The code in USER-MEAMC should be functionally equivalent to the MEAM package, fully supports -use of "pair_style hybrid"_pair_hybrid.html (the MEAM packaged doesn +use of "pair_style hybrid"_pair_hybrid.html (the MEAM package does not), and has optimizations that make it significantly faster than the MEAM package. @@ -361,6 +363,10 @@ make lib-meam args="-m mpi" # build with default Fortran compiler compatible make lib-meam args="-m serial" # build with compiler compatible with "make serial" (GNU Fortran) make lib-meam args="-m ifort" # build with Intel Fortran compiler using Makefile.ifort :pre +NOTE: You should test building the MEAM library with both the Intel +and GNU compilers to see if a simulation runs faster with one versus +the other on your system. + The build should produce two files: lib/meam/libmeam.a and lib/meam/Makefile.lammps. The latter is copied from an existing Makefile.lammps.* and has settings needed to link C++ (LAMMPS) with @@ -373,6 +379,35 @@ file. :line +MESSAGE package :h4,link(message) + +This package can optionally include support for messaging via sockets, +using the open-source "ZeroMQ library"_http://zeromq.org, which must +be installed on your system. + +[CMake build]: + +-D MESSAGE_ZMQ=value # build with ZeroMQ support, value = no (default) or yes + +[Traditional make]: + +Before building LAMMPS, you must build the CSlib library in +lib/message. You can build the CSlib library manually if you prefer; +follow the instructions in lib/message/README. You can also do it in +one step from the lammps/src dir, using a command like these, which +simply invoke the lib/message/Install.py script with the specified args: + +make lib-message # print help message +make lib-message args="-m -z" # build with MPI and socket (ZMQ) support +make lib-message args="-s" # build as serial lib with no ZMQ support + +The build should produce two files: lib/message/cslib/src/libmessage.a +and lib/message/Makefile.lammps. The latter is copied from an +existing Makefile.lammps.* and has settings to link with the ZeroMQ +library if requested in the build. + +:line + MSCG package :h4,link(mscg) To build with this package, you must download and build the MS-CG @@ -470,7 +505,7 @@ lib/python/README for more details. -D PYTHON_EXECUTABLE=path # path to Python executable to use :pre -Without this setting, CMake will ues the default Python on your +Without this setting, CMake will guess the default Python on your system. To use a different Python version, you can either create a virtualenv, activate it and then run cmake. Or you can set the PYTHON_EXECUTABLE variable to specify which Python interpreter should @@ -687,7 +722,7 @@ the HDF5 library. No additional settings are needed besides "-D PKG_USER-H5MD=yes". -This should autodetect the H5MD library on your system. Several +This should auto-detect the H5MD library on your system. Several advanced CMake H5MD options exist if you need to specify where it is installed. Use the ccmake (terminal window) or cmake-gui (graphical) tools to see these options and set them interactively from their user @@ -777,7 +812,7 @@ on your system. No additional settings are needed besides "-D PKG_USER-NETCDF=yes". -This should autodetect the NETCDF library if it is installed on your +This should auto-detect the NETCDF library if it is installed on your system at standard locations. Several advanced CMake NETCDF options exist if you need to specify where it was installed. Use the ccmake (terminal window) or cmake-gui (graphical) tools to see these options @@ -894,6 +929,45 @@ successfully build on your system. :line +USER-SCAFACOS package :h4,link(user-scafacos) + +To build with this package, you must download and build the "ScaFaCoS +Coulomb solver library"_scafacos_home + +:link(scafacos_home,http://www.scafacos.de) + +[CMake build]: + +-D DOWNLOAD_SCAFACOS=value # download ScaFaCoS for build, value = no (default) or yes +-D SCAFACOS_LIBRARY=path # ScaFaCos library file (only needed if at custom location) +-D SCAFACOS_INCLUDE_DIR=path # ScaFaCoS include directory (only needed if at custom location) :pre + +If DOWNLOAD_SCAFACOS is set, the ScaFaCoS library will be downloaded +and built inside the CMake build directory. If the ScaFaCoS library +is already on your system (in a location CMake cannot find it), +SCAFACOS_LIBRARY is the filename (plus path) of the ScaFaCoS library +file, not the directory the library file is in. SCAFACOS_INCLUDE_DIR +is the directory the ScaFaCoS include file is in. + +[Traditional make]: + +You can download and build the ScaFaCoS library manually if you +prefer; follow the instructions in lib/scafacos/README. You can also +do it in one step from the lammps/src dir, using a command like these, +which simply invoke the lib/scafacos/Install.py script with the +specified args: + +make lib-scafacos # print help message +make lib-scafacos args="-b" # download and build in lib/scafacos/scafacos- +make lib-scafacos args="-p $HOME/scafacos # use existing ScaFaCoS installation in $HOME/scafacos + +Note that 2 symbolic (soft) links, "includelink" and "liblink", are +created in lib/scafacos to point to the ScaFaCoS src dir. When LAMMPS +builds in src it will use these links. You should not need to edit +the lib/scafacos/Makefile.lammps file. + +:line + USER-SMD package :h4,link(user-smd) To build with this package, you must download the Eigen3 library. @@ -905,7 +979,7 @@ Eigen3 is a template library, so you do not need to build it. -D EIGEN3_INCLUDE_DIR=path # path to Eigen library (only needed if a custom location) :pre If DOWNLOAD_EIGEN3 is set, the Eigen3 library will be downloaded and -inside the CMake build directory. If the Eig3n3 library is already on +inside the CMake build directory. If the Eigen3 library is already on your system (in a location CMake cannot find it), EIGEN3_INCLUDE_DIR is the directory the Eigen3++ include file is in. @@ -936,7 +1010,7 @@ your system. No additional settings are needed besides "-D PKG_USER-VTK=yes". -This should autodetect the VTK library if it is installed on your +This should auto-detect the VTK library if it is installed on your system at standard locations. Several advanced VTK options exist if you need to specify where it was installed. Use the ccmake (terminal window) or cmake-gui (graphical) tools to see these options and set diff --git a/doc/src/Build_make.txt b/doc/src/Build_make.txt index c00ce1f4208ba04a8517b98a9128cb63e886ef8b..ad18695e46245686444a8ae5d3e8ec7728a1d64b 100644 --- a/doc/src/Build_make.txt +++ b/doc/src/Build_make.txt @@ -35,16 +35,16 @@ This initial compilation can take a long time, since LAMMPS is a large project with many features. If your machine has multiple CPU cores (most do these days), using a command like "make -jN mpi" (with N = the number of available CPU cores) can be much faster. If you plan to -do development on LAMMPS or need to recompile LAMMPS repeatedly, the +do development on LAMMPS or need to re-compile LAMMPS repeatedly, the installation of the ccache (= Compiler Cache) software may speed up compilation even more. After the initial build, whenever you edit LAMMPS source files, or add or remove new files to the source directory (e.g. by installing or -uninstalling packages), you must recompile and relink the LAMMPS +uninstalling packages), you must re-compile and relink the LAMMPS executable with the same "make" command. This makefiles dependencies should insure that only the subset of files that need to be are -recompiled. +re-compiled. NOTE: When you build LAMMPS for the first time, a long list of *.d files will be printed out rapidly. This is not an error; it is the @@ -71,8 +71,8 @@ Makefiles you may wish to try include these (some require a package first be installed). Many of these include specific compiler flags for optimized performance. Please note, however, that some of these customized machine Makefile are contributed by users. Since both -compilers, OS configs, and LAMMPS itself keep changing, their settings -may become outdated: +compilers, OS configurations, and LAMMPS itself keep changing, their +settings may become outdated: make mac # build serial LAMMPS on a Mac make mac_mpi # build parallel LAMMPS on a Mac diff --git a/doc/src/Build_package.txt b/doc/src/Build_package.txt index 4f71e9eb18067d4ef3210aada08a8722e38e8687..f1aa4bb6712dd65ca24ba9e97a6f05cd0486e1fa 100644 --- a/doc/src/Build_package.txt +++ b/doc/src/Build_package.txt @@ -42,6 +42,7 @@ packages: "KOKKOS"_Build_extras.html#kokkos, "LATTE"_Build_extras.html#latte, "MEAM"_Build_extras.html#meam, +"MESSAGE"_Build_extras.html#message, "MSCG"_Build_extras.html#mscg, "OPT"_Build_extras.html#opt, "POEMS"_Build_extras.html#poems, @@ -58,6 +59,7 @@ packages: "USER-OMP"_Build_extras.html#user-omp, "USER-QMMM"_Build_extras.html#user-qmmm, "USER-QUIP"_Build_extras.html#user-quip, +"USER-SCAFACOS"_Build_extras.html#user-scafacos, "USER-SMD"_Build_extras.html#user-smd, "USER-VTK"_Build_extras.html#user-vtk :tb(c=6,ea=c,a=l) diff --git a/doc/src/Build_settings.txt b/doc/src/Build_settings.txt index 773217e3a0e205f4d818c349f7a96b09d7526eba..500130ecee81ba7622fe5e6851509e57ef98e56f 100644 --- a/doc/src/Build_settings.txt +++ b/doc/src/Build_settings.txt @@ -80,8 +80,8 @@ per-timestep CPU cost, FFTs are only a portion of long-range Coulombics, and 1d FFTs are only a portion of the FFT cost (parallel communication can be costly). A breakdown of these timings is printed to the screen at the end of a run using the "kspace_style -pppm"_kspace_style.html command. The "Run output"_doc page gives more -details. +pppm"_kspace_style.html command. The "Run output"_Run_output.html +doc page gives more details. FFTW is a fast, portable FFT library that should also work on any platform and can be faster than the KISS FFT library. You can @@ -101,7 +101,7 @@ Performing 3d FFTs in parallel can be time consuming due to data access and required communication. This cost can be reduced by performing single-precision FFTs instead of double precision. Single precision means the real and imaginary parts of a complex datum are -4-byte floats. Double precesion means they are 8-byte doubles. Note +4-byte floats. Double precision means they are 8-byte doubles. Note that Fourier transform and related PPPM operations are somewhat less sensitive to floating point truncation errors and thus the resulting error is less than the difference in precision. Using the -DFFT_SINGLE @@ -193,7 +193,7 @@ Output of JPG, PNG, and movie files :h4,link(graphics) The "dump image"_dump_image.html command has options to output JPEG or PNG image files. Likewise the "dump movie"_dump_image.html command -ouputs movie files in MPEG format. Using these options requires the +outputs movie files in MPEG format. Using these options requires the following settings: [CMake variables]: @@ -206,7 +206,7 @@ following settings: # default = yes if CMake can find ffmpeg, else no :pre Usually these settings are all that is needed. If CMake cannot find -the graphics header, library, executuable files, you can set these +the graphics header, library, executable files, you can set these variables: -D JPEG_INCLUDE_DIR=path # path to jpeglib.h header file diff --git a/doc/src/Build_windows.txt b/doc/src/Build_windows.txt new file mode 100644 index 0000000000000000000000000000000000000000..0caad589fb4497938797092297e41dbc4fbc6ac2 --- /dev/null +++ b/doc/src/Build_windows.txt @@ -0,0 +1,97 @@ +"Higher level section"_Build.html - "LAMMPS WWW Site"_lws - "LAMMPS +Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +Notes for building LAMMPS on Windows :h3 + +"General remarks"_#generic +"Running Linux on Windows"_#linux +"Using GNU GCC ported to Windows"_#gnu +"Using a cross-compiler"_#cross :ul + +:line + +General remarks :h4,link(generic) + +LAMMPS is developed and tested primarily on Linux machines. The vast +majority of HPC clusters and supercomputers today runs on Linux as well. +Thus portability to other platforms is desired, but not always achieved. +The LAMMPS developers strongly rely on LAMMPS users giving feedback and +providing assistance in resolving portability issues. This particularly +true for compiling LAMMPS on Windows, since this platform has significant +differences with some low-level functionality. + + +Running Linux on Windows :h4,link(linux) + +So before trying to build LAMMPS on Windows, please consider if using +the pre-compiled Windows binary packages are sufficient for your needs +(as an aside, those packages themselves are build on a Linux machine +using cross-compilers). If it is necessary for your to compile LAMMPS +on a Windows machine (e.g. because it is your main desktop), please also +consider using a virtual machine software and run a Linux virtual machine, +or - if have a recently updated Windows 10 installation - consider using +the Windows subsystem for Linux, which allows to run a bash shell from +Ubuntu and from there on, you can pretty much use that shell like you +are running on an Ubuntu Linux machine (e.g. installing software via +apt-get). For more details on that, please see "this tutorial"_Howto_bash.html + + +Using GNU GCC ported to Windows :h4,link(gnu) + +One option for compiling LAMMPS on Windows natively, that has been known +to work in the past is to install a bash shell, unix shell utilities, +perl, GNU make, and a GNU compiler ported to Windows. The Cygwin package +provides a unix/linux interface to low-level Windows functions, so LAMMPS +can be compiled on Windows. The necessary (minor) modifications to LAMMPS +are included, but may not always up-to-date for recently added functionality +and the corresponding new code. A machine makefile for using cygwin for +the old build system is provided. The CMake build system is untested +for this; you will have to request that makefiles are generated and +manually set the compiler. + +When compiling for Windows [not] set the -DLAMMPS_MEMALIGN define +in the LMP_INC makefile variable and add -lwsock32 -lpsapi to the linker +flags in LIB makefile variable. Try adding -static-libgcc or -static or +both to the linker flags when your resulting LAMMPS Windows executable +complains about missing .dll files. The CMake configuration should set +this up automatically, but is untested. + +In case of problems, you are recommended to contact somebody with +experience in using cygwin. If you do come across portability problems +requiring changes to the LAMMPS source code, or figure out corrections +yourself, please report them on the lammps-users mailing list, or file +them as an issue or pull request on the LAMMPS github project. + + +Using a cross-compiler :h4,link(cross) + +If you need to provide custom LAMMPS binaries for Windows, but do not +need to do the compilation on Windows, please consider using a Linux +to Windows cross-compiler. This is how currently the Windows binary +packages are created by the LAMMPS developers. Because of that, this is +probably the currently best tested and supported way to build LAMMPS +executables for Windows. There are makefiles provided for the +traditional build system, but CMake has also been successfully tested +using the mingw32-cmake and mingw64-cmake wrappers that are bundled +with the cross-compiler environment on Fedora machines. + +Please keep in mind, though, that this only applies to compiling LAMMPS. +Whether the resulting binaries do work correctly is no tested by the +LAMMPS developers. We instead rely on the feedback of the users +of these pre-compiled LAMMPS packages for Windows. We will try to resolve +issues to the best of our abilities if we become aware of them. However +this is subject to time constraints and focus on HPC platforms. + + +Native Visual C++ support :h4,link(native) + +Support for the Visual C++ compilers is currently not available. The +CMake build system is capable of creating suitable a Visual Studio +style build environment, but the LAMMPS code itself is not fully ported +to support Visual C++. Volunteers to take on this task are welcome. diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index 13db1272b928e558ceda0853df22162945e6c6e5..6f54681342b14d64ba543d4f021fcb1ee7c078b3 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -19,7 +19,7 @@ Documentation"_ld - "LAMMPS Commands"_lc :c All commands :h3 -An alphabetic list of all LAMMPS commmands. +An alphabetic list of all LAMMPS commands. "angle_coeff"_angle_coeff.html, "angle_style"_angle_style.html, @@ -71,6 +71,7 @@ An alphabetic list of all LAMMPS commmands. "lattice"_lattice.html, "log"_log.html, "mass"_mass.html, +"message"_message.html, "minimize"_minimize.html, "min_modify"_min_modify.html, "min_style"_min_style.html, @@ -103,6 +104,7 @@ An alphabetic list of all LAMMPS commmands. "restart"_restart.html, "run"_run.html, "run_style"_run_style.html, +"server"_server.html, "set"_set.html, "shell"_shell.html, "special_bonds"_special_bonds.html, diff --git a/doc/src/Commands_bond.txt b/doc/src/Commands_bond.txt index 48069d3120048e9d59ead6a3f2959be296d078de..773202f126b54d66ca92631b654c30ebfc23b204 100644 --- a/doc/src/Commands_bond.txt +++ b/doc/src/Commands_bond.txt @@ -70,7 +70,7 @@ OPT. "fourier/simple (o)"_angle_fourier_simple.html, "harmonic (iko)"_angle_harmonic.html, "quartic (o)"_angle_quartic.html, -"sdk"_angle_sdk.html, +"sdk (o)"_angle_sdk.html, "table (o)"_angle_table.html :tb(c=4,ea=c) :line @@ -95,7 +95,7 @@ OPT. "helix (o)"_dihedral_helix.html, "multi/harmonic (o)"_dihedral_multi_harmonic.html, "nharmonic (o)"_dihedral_nharmonic.html, -"opls (iko)"_dihedral_opls.htm;, +"opls (iko)"_dihedral_opls.html, "quadratic (o)"_dihedral_quadratic.html, "spherical (o)"_dihedral_spherical.html, "table (o)"_dihedral_table.html, diff --git a/doc/src/Commands_compute.txt b/doc/src/Commands_compute.txt index 028e274c9be4a80555dfcab5a417d738b763bfda..81b618a6e2b8475d8999899c59715b6b40a062bd 100644 --- a/doc/src/Commands_compute.txt +++ b/doc/src/Commands_compute.txt @@ -35,6 +35,7 @@ KOKKOS, o = USER-OMP, t = OPT. "bond/local"_compute_bond_local.html, "centro/atom"_compute_centro_atom.html, "chunk/atom"_compute_chunk_atom.html, +"chunk/spread/atom"_compute_chunk_spread_atom.html, "cluster/atom"_compute_cluster_atom.html, "cna/atom"_compute_cna_atom.html, "cnp/atom"_compute_cnp_atom.html, @@ -95,8 +96,10 @@ KOKKOS, o = USER-OMP, t = OPT. "property/atom"_compute_property_atom.html, "property/chunk"_compute_property_chunk.html, "property/local"_compute_property_local.html, +"ptm/atom"_compute_ptm_atom.html, "rdf"_compute_rdf.html, "reduce"_compute_reduce.html, +"reduce/chunk"_compute_reduce_chunk.html, "reduce/region"_compute_reduce.html, "rigid/local"_compute_rigid_local.html, "saed"_compute_saed.html, @@ -115,7 +118,7 @@ KOKKOS, o = USER-OMP, t = OPT. "smd/tlsph/strain"_compute_smd_tlsph_strain.html, "smd/tlsph/strain/rate"_compute_smd_tlsph_strain_rate.html, "smd/tlsph/stress"_compute_smd_tlsph_stress.html, -"smd/triangle/mesh/vertices"_compute_smd_triangle_mesh_vertices.html, +"smd/triangle/mesh/vertices"_compute_smd_triangle_vertices.html, "smd/ulsph/num/neighs"_compute_smd_ulsph_num_neighs.html, "smd/ulsph/strain"_compute_smd_ulsph_strain.html, "smd/ulsph/strain/rate"_compute_smd_ulsph_strain_rate.html, diff --git a/doc/src/Commands_fix.txt b/doc/src/Commands_fix.txt index d90e8d64038cc53ebfa48c9376c5241e3d97ddf1..58828d5c9edb0da368a86018cf6f1b3e6087453d 100644 --- a/doc/src/Commands_fix.txt +++ b/doc/src/Commands_fix.txt @@ -65,6 +65,7 @@ OPT. "eos/table/rx (k)"_fix_eos_table_rx.html, "evaporate"_fix_evaporate.html, "external"_fix_external.html, +"ffl"_fix_ffl.html, "filter/corotate"_fix_filter_corotate.html, "flow/gauss"_fix_flow_gauss.html, "freeze (k)"_fix_freeze.html, @@ -216,7 +217,7 @@ OPT. "wall/body/polyhedron"_fix_wall_body_polyhedron.html, "wall/colloid"_fix_wall.html, "wall/ees"_fix_wall_ees.html, -"wall/gran"_fix_wall_gran.html, +"wall/gran (o)"_fix_wall_gran.html, "wall/gran/region"_fix_wall_gran_region.html, "wall/harmonic"_fix_wall.html, "wall/lj1043"_fix_wall.html, diff --git a/doc/src/Commands_kspace.txt b/doc/src/Commands_kspace.txt index a1263445050bda692218aa311831d3565d22155c..d56b7fa7674f8006e4254cc51b76551565a9b623 100644 --- a/doc/src/Commands_kspace.txt +++ b/doc/src/Commands_kspace.txt @@ -33,4 +33,5 @@ OPT. "pppm/disp (i)"_kspace_style.html, "pppm/disp/tip4p"_kspace_style.html, "pppm/stagger"_kspace_style.html, -"pppm/tip4p (o)"_kspace_style.html :tb(c=4,ea=c) +"pppm/tip4p (o)"_kspace_style.html, +"scafacos"_kspace_style.html :tb(c=4,ea=c) diff --git a/doc/src/Commands_pair.txt b/doc/src/Commands_pair.txt index 1de029150194afcca4272d5173d1bbc457831ec9..090101d5eac69e7e4f7247dbd55fab6b1524e7bd 100644 --- a/doc/src/Commands_pair.txt +++ b/doc/src/Commands_pair.txt @@ -26,13 +26,14 @@ OPT. "none"_pair_none.html, "zero"_pair_zero.html, -"hybrid"_pair_hybrid.html, +"hybrid (k)"_pair_hybrid.html, "hybrid/overlay (k)"_pair_hybrid.html :tb(c=4,ea=c) "adp (o)"_pair_adp.html, "agni (o)"_pair_agni.html, "airebo (oi)"_pair_airebo.html, "airebo/morse (oi)"_pair_airebo.html, +"atm"_pair_atm.html, "awpmd/cut"_pair_awpmd.html, "beck (go)"_pair_beck.html, "body/nparticle"_pair_body_nparticle.html, @@ -80,6 +81,7 @@ OPT. "eam (gikot)"_pair_eam.html, "eam/alloy (gikot)"_pair_eam.html, "eam/cd (o)"_pair_eam.html, +"eam/cd/old (o)"_pair_eam.html, "eam/fs (gikot)"_pair_eam.html, "edip (o)"_pair_edip.html, "edip/multi"_pair_edip.html, @@ -166,7 +168,7 @@ OPT. "morse/soft"_pair_morse.html, "multi/lucy"_pair_multi_lucy.html, "multi/lucy/rx (k)"_pair_multi_lucy_rx.html, -"nb3b/harmonic (o)"_pair_nb3b_harmonic.html, +"nb3b/harmonic"_pair_nb3b_harmonic.html, "nm/cut (o)"_pair_nm.html, "nm/cut/coul/cut (o)"_pair_nm.html, "nm/cut/coul/long (o)"_pair_nm.html, diff --git a/doc/src/Commands_parse.txt b/doc/src/Commands_parse.txt index cbe2261986bb8f8f96089dac3dff3a03dc39dd42..1d7c754fa718a8a4b38e8a04c2cd657c7d704a90 100644 --- a/doc/src/Commands_parse.txt +++ b/doc/src/Commands_parse.txt @@ -14,7 +14,7 @@ LAMMPS commands are case sensitive. Command names are lower-case, as are specified command arguments. Upper case letters may be used in file names or user-chosen ID strings. -Here are 6 rulse for how each line in the input script is parsed by +Here are 6 rules for how each line in the input script is parsed by LAMMPS: (1) If the last printable character on the line is a "&" character, @@ -71,7 +71,7 @@ floating-point value. The format string is used to output the result of the variable expression evaluation. If a format string is not specified a high-precision "%.20g" is used as the default. -This can be useful for formatting print output to a desired precion: +This can be useful for formatting print output to a desired precision: print "Final energy per atom: $(pe/atoms:%10.3f) eV/atom" :pre diff --git a/doc/src/Eqs/pair_atm.jpg b/doc/src/Eqs/pair_atm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d2e6d704e930c2def4801301c928998f7542f54b Binary files /dev/null and b/doc/src/Eqs/pair_atm.jpg differ diff --git a/doc/src/Eqs/pair_atm.tex b/doc/src/Eqs/pair_atm.tex new file mode 100644 index 0000000000000000000000000000000000000000..fce1db99b8b8641ae0b2bf47a6ac1e4bd8b4fd8a --- /dev/null +++ b/doc/src/Eqs/pair_atm.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} + +\begin{equation} +E=\nu\frac{1+3\cos\gamma_1\cos\gamma_2\cos\gamma_3}{r_{12}^3r_{23}^3r_{31}^3} +\end{equation} + +\end{document} diff --git a/doc/src/Eqs/ptm_rmsd.jpg b/doc/src/Eqs/ptm_rmsd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d20da706ef61194305123d5673042d2318aec23 Binary files /dev/null and b/doc/src/Eqs/ptm_rmsd.jpg differ diff --git a/doc/src/Eqs/ptm_rmsd.tex b/doc/src/Eqs/ptm_rmsd.tex new file mode 100644 index 0000000000000000000000000000000000000000..a9c29ce18970fa7c2e9f7c62bdf1423e2b7968a4 --- /dev/null +++ b/doc/src/Eqs/ptm_rmsd.tex @@ -0,0 +1,21 @@ +\documentclass[12pt,article]{article} + +\usepackage{indentfirst} +\usepackage{amsmath} + +\newcommand{\set}[1]{\ensuremath{\mathbf{#1}}} +\newcommand{\mean}[1]{\ensuremath{\overline{#1}}} +\newcommand{\norm}[1]{\ensuremath{\left|\left|{#1}\right|\right|}} + +\begin{document} + +\begin{equation*} +\text{RMSD}(\set{u}, \set{v}) = \min_{s, \set{Q}} \sqrt{\frac{1}{N} \sum\limits_{i=1}^{N} +\norm{ +s[\vec{u_i} - \mean{\set{u}}] +- +\set{Q} \vec{v_i} +}^2} +\end{equation*} + +\end{document} diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index d279b5e9758c0366169abb962e3d27b9fddaa56e..695b949f7eda5f8565f2253e6bf4a9e91a877406 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -743,7 +743,7 @@ Self-explanatory. :dd Self-explanatory. :dd -{Cannot (yet) use single precision with MSM (remove -DFFT_SINGLE from Makefile and recompile)} :dt +{Cannot (yet) use single precision with MSM (remove -DFFT_SINGLE from Makefile and re-compile)} :dt Single precision cannot be used with MSM. :dd @@ -1092,11 +1092,6 @@ correct. :dd The specified file cannot be opened. Check that the path and name are correct. :dd -{Cannot open fix ave/spatial file %s} :dt - -The specified file cannot be opened. Check that the path and name are -correct. :dd - {Cannot open fix ave/time file %s} :dt The specified file cannot be opened. Check that the path and name are @@ -1677,10 +1672,6 @@ provided by an atom map. An atom map does not exist (by default) for non-molecular problems. Using the atom_modify map command will force an atom map to be created. :dd -{Cannot use fix ave/spatial z for 2 dimensional model} :dt - -Self-explanatory. :dd - {Cannot use fix bond/break with non-molecular systems} :dt Only systems with bonds that can be changed can be used. Atom_style @@ -2425,10 +2416,6 @@ Self-explanatory. :dd Self-explanatory. :dd -{Compute ID for fix ave/spatial does not exist} :dt - -Self-explanatory. :dd - {Compute ID for fix ave/time does not exist} :dt Self-explanatory. :dd @@ -4074,10 +4061,6 @@ Self-explanatory. :dd Self-explanatory. :dd -{Fix ID for fix ave/spatial does not exist} :dt - -Self-explanatory. :dd - {Fix ID for fix ave/time does not exist} :dt Self-explanatory. :dd @@ -4379,51 +4362,6 @@ same style. :dd Self-explanatory. :dd -{Fix ave/spatial compute does not calculate a per-atom array} :dt - -Self-explanatory. :dd - -{Fix ave/spatial compute does not calculate a per-atom vector} :dt - -A compute used by fix ave/spatial must generate per-atom values. :dd - -{Fix ave/spatial compute does not calculate per-atom values} :dt - -A compute used by fix ave/spatial must generate per-atom values. :dd - -{Fix ave/spatial compute vector is accessed out-of-range} :dt - -The index for the vector is out of bounds. :dd - -{Fix ave/spatial fix does not calculate a per-atom array} :dt - -Self-explanatory. :dd - -{Fix ave/spatial fix does not calculate a per-atom vector} :dt - -A fix used by fix ave/spatial must generate per-atom values. :dd - -{Fix ave/spatial fix does not calculate per-atom values} :dt - -A fix used by fix ave/spatial must generate per-atom values. :dd - -{Fix ave/spatial fix vector is accessed out-of-range} :dt - -The index for the vector is out of bounds. :dd - -{Fix ave/spatial for triclinic boxes requires units reduced} :dt - -Self-explanatory. :dd - -{Fix ave/spatial settings invalid with changing box size} :dt - -If the box size changes, only the units reduced option can be -used. :dd - -{Fix ave/spatial variable is not atom-style variable} :dt - -A variable used by fix ave/spatial must generate per-atom values. :dd - {Fix ave/time cannot set output array intensive/extensive from these inputs} :dt One of more of the vector inputs has individual elements which are @@ -5078,7 +5016,7 @@ Self-explanatory. :dd Occurs when number of neighbor atoms for an atom increased too much during a run. Increase SAFE_ZONE and MIN_CAP in fix_qeq.h and -recompile. :dd +re-compile. :dd {Fix qeq/point requires atom attribute q} :dt @@ -5092,7 +5030,7 @@ Self-explanatory. :dd Occurs when number of neighbor atoms for an atom increased too much during a run. Increase SAFE_ZONE and MIN_CAP in fix_qeq.h and -recompile. :dd +re-compile. :dd {Fix qeq/shielded requires atom attribute q} :dt @@ -5110,7 +5048,7 @@ Self-explanatory. :dd Occurs when number of neighbor atoms for an atom increased too much during a run. Increase SAFE_ZONE and MIN_CAP in fix_qeq.h and -recompile. :dd +re-compile. :dd {Fix qeq/slater requires atom attribute q} :dt @@ -5541,7 +5479,7 @@ See the package gpu command. :dd {GPUs are requested but Kokkos has not been compiled for CUDA} :dt -Recompile Kokkos with CUDA support to use GPUs. :dd +Re-compile Kokkos with CUDA support to use GPUs. :dd {Ghost velocity forward comm not yet implemented with Kokkos} :dt diff --git a/doc/src/Errors_warnings.txt b/doc/src/Errors_warnings.txt index dd3402ba8641c487f1a6a4210fa27f1b6ae062ff..0980120a103afc51005a54f3b9a68f441098f42c 100644 --- a/doc/src/Errors_warnings.txt +++ b/doc/src/Errors_warnings.txt @@ -13,7 +13,7 @@ This is an alphabetic list of the WARNING messages LAMMPS prints out and the reason why. If the explanation here is not sufficient, the documentation for the offending command may help. Warning messages also list the source file and line number where the warning was -generated. For example, a message lile this: +generated. For example, a message like this: WARNING: Bond atom missing in box size check (domain.cpp:187) :pre @@ -291,24 +291,6 @@ This may cause accuracy problems. :dd This may cause accuracy problems. :dd -{Fix thermal/conductivity comes before fix ave/spatial} :dt - -The order of these 2 fixes in your input script is such that fix -thermal/conductivity comes first. If you are using fix ave/spatial to -measure the temperature profile induced by fix viscosity, then this -may cause a glitch in the profile since you are averaging immediately -after swaps have occurred. Flipping the order of the 2 fixes -typically helps. :dd - -{Fix viscosity comes before fix ave/spatial} :dt - -The order of these 2 fixes in your input script is such that -fix viscosity comes first. If you are using fix ave/spatial -to measure the velocity profile induced by fix viscosity, then -this may cause a glitch in the profile since you are averaging -immediately after swaps have occurred. Flipping the order -of the 2 fixes typically helps. :dd - {Fixes cannot send data in Kokkos communication, switching to classic communication} :dt This is current restriction with Kokkos. :dd diff --git a/doc/src/Howto.txt b/doc/src/Howto.txt index 438ea561a10f9fa87f0e119aedd26bdbd13e89dd..730b492699d908a1be6918853f81dbfb5d59713f 100644 --- a/doc/src/Howto.txt +++ b/doc/src/Howto.txt @@ -54,6 +54,7 @@ General howto :h3 Howto_replica Howto_library Howto_couple + Howto_client_server END_RST --> @@ -64,7 +65,8 @@ END_RST --> "Run multiple simulations from one input script"_Howto_multiple.html "Multi-replica simulations"_Howto_replica.html "Library interface to LAMMPS"_Howto_library.html -"Couple LAMMPS to other codes"_Howto_couple.html :all(b) +"Couple LAMMPS to other codes"_Howto_couple.html +"Using LAMMPS in client/server mode"_Howto_client_server.html :all(b) diff --git a/doc/src/Howto_barostat.txt b/doc/src/Howto_barostat.txt index 7c3db891524379f49fe38134186764e07eeff959..33233346006d2d2d7b25d04baeb01311d77e5a30 100644 --- a/doc/src/Howto_barostat.txt +++ b/doc/src/Howto_barostat.txt @@ -64,11 +64,11 @@ Thermodynamic output, which can be setup via the "thermo_style"_thermo_style.html command, often includes pressure values. As explained on the doc page for the "thermo_style"_thermo_style.html command, the default pressure is -setup by the thermo command itself. It is NOT the presure associated +setup by the thermo command itself. It is NOT the pressure associated with any barostatting fix you have defined or with any compute you -have defined that calculates a presure. The doc pages for the +have defined that calculates a pressure. The doc pages for the barostatting fixes explain the ID of the pressure compute they create. -Thus if you want to view these pressurse, you need to specify them +Thus if you want to view these pressures, you need to specify them explicitly via the "thermo_style custom"_thermo_style.html command. Or you can use the "thermo_modify"_thermo_modify.html command to re-define what pressure compute is used for default thermodynamic diff --git a/doc/src/Howto_body.txt b/doc/src/Howto_body.txt index 3535349b461589aa6ddafdf4e9a3d684a546c2e1..3e7db9bc8e4b735ad93014b8a86a8c7b2ffe3bc4 100644 --- a/doc/src/Howto_body.txt +++ b/doc/src/Howto_body.txt @@ -337,7 +337,7 @@ the sphere that surrounds each vertex. The diameter value can be different for each body particle. These floating-point values can be listed on as many lines as you wish; see the "read_data"_read_data.html command for more details. Because the -maxmimum vertices per face is hard-coded to be 4 +maximum number of vertices per face is hard-coded to be 4 (i.e. quadrilaterals), faces with more than 4 vertices need to be split into triangles or quadrilaterals. For triangular faces, the last vertex index should be set to -1. diff --git a/doc/src/Howto_chunk.txt b/doc/src/Howto_chunk.txt index 8e52acf4b8693569bac54304bb5f2c0ffd56d0fb..82a4450d176bac7c5adfa4ebf226d57547cd6663 100644 --- a/doc/src/Howto_chunk.txt +++ b/doc/src/Howto_chunk.txt @@ -22,7 +22,7 @@ commands, to calculate various properties of a system: "fix ave/chunk"_fix_ave_chunk.html any of the "compute */chunk"_compute.html commands :ul -Here, each of the 3 kinds of chunk-related commands is briefly +Here, each of the 4 kinds of chunk-related commands is briefly overviewed. Then some examples are given of how to compute different properties with chunk commands. @@ -83,8 +83,9 @@ chunk. Compute */chunk commands: :h4 -Currently the following computes operate on chunks of atoms to produce -per-chunk values. +The following computes operate on chunks of atoms to produce per-chunk +values. Any compute whose style name ends in "/chunk" is in this +category: "compute com/chunk"_compute_com_chunk.html "compute gyration/chunk"_compute_gyration_chunk.html @@ -111,8 +112,8 @@ of a center of mass, which requires summing mass*position over the atoms and then dividing by summed mass. All of these computes produce a global vector or global array as -output, wih one or more values per chunk. They can be used -in various ways: +output, wih one or more values per chunk. The output can be used in +various ways: As input to the "fix ave/time"_fix_ave_time.html command, which can write the values to a file and optionally time average them. :ulb,l @@ -122,9 +123,27 @@ histogram values across chunks. E.g. a histogram of cluster sizes or molecule diffusion rates. :l As input to special functions of "equal-style -variables"_variable.html, like sum() and max(). E.g. to find the -largest cluster or fastest diffusing molecule. :l -:ule +variables"_variable.html, like sum() and max() and ave(). E.g. to +find the largest cluster or fastest diffusing molecule or average +radius-of-gyration of a set of molecules (chunks). :l,ule + +Other chunk commands: :h4 + +"compute chunk/spread/atom"_compute_chunk_spread_atom.html +"compute reduce/chunk"_compute_reduce_chunk.html :ul + +The "compute chunk/spread/atom"_compute_chunk_spread_atom.html command +spreads per-chunk values to each atom in the chunk, producing per-atom +values as its output. This can be useful for outputting per-chunk +values to a per-atom "dump file"_dump.html. Or for using an atom's +associated chunk value in an "atom-style variable"_variable.html. + +The "compute reduce/chunk"_compute_reduce_chunk.html command reduces a +peratom value across the atoms in each chunk to produce a value per +chunk. When used with the "compute +chunk/spread/atom"_compute_chunk_spread_atom.html command it can +create peratom values that induce a new set of chunks with a second +"compute chunk/atom"_compute_chunk_atom.html command. Example calculations with chunks :h4 @@ -164,3 +183,13 @@ compute cluster all cluster/atom 1.0 compute cc1 all chunk/atom c_cluster compress yes compute size all property/chunk cc1 count fix 1 all ave/histo 100 1 100 0 20 20 c_size mode vector ave running beyond ignore file tmp.histo :pre + +(6) An example of using a per-chunk value to apply per-atom forces to +compress individual polymer chains (molecules) in a mixture, is +explained on the "compute +chunk/spread/atom"_compute_chunk_spread_atom.html command doc page. + +(7) An example of using one set of per-chunk values for molecule +chunks, to create a 2nd set of micelle-scale chunks (clustered +molecules, due to hydrophobicity), is explained on the "compute +chunk/reduce"_compute_reduce_chunk.html command doc page. diff --git a/doc/src/Howto_client_server.txt b/doc/src/Howto_client_server.txt new file mode 100644 index 0000000000000000000000000000000000000000..aa6b8eab769994ac6e718d4865329ce5a295c330 --- /dev/null +++ b/doc/src/Howto_client_server.txt @@ -0,0 +1,131 @@ +"Higher level section"_Howto.html - "LAMMPS WWW Site"_lws - "LAMMPS +Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +Using LAMMPS in client/server mode :h3 + +Client/server coupling of two codes is where one code is the "client" +and sends request messages to a "server" code. The server responds to +each request with a reply message. This enables the two codes to work +in tandem to perform a simulation. LAMMPS can act as either a client +or server code. + +Some advantages of client/server coupling are that the two codes run +as stand-alone executables; they are not linked together. Thus +neither code needs to have a library interface. This often makes it +easier to run the two codes on different numbers of processors. If a +message protocol (format and content) is defined for a particular kind +of simulation, then in principle any code that implements the +client-side protocol can be used in tandem with any code that +implements the server-side protocol, without the two codes needing to +know anything more specific about each other. + +A simple example of client/server coupling is where LAMMPS is the +client code performing MD timestepping. Each timestep it sends a +message to a server quantum code containing current coords of all the +atoms. The quantum code computes energy and forces based on the +coords. It returns them as a message to LAMMPS, which completes the +timestep. + +Alternate methods for code coupling with LAMMPS are described on +the "Howto couple"_Howto_couple.html doc page. + +LAMMPS support for client/server coupling is in its "MESSAGE +package"_Packages_details.html#PKG-MESSAGE which implements several +commands that enable LAMMPS to act as a client or server, as discussed +below. The MESSAGE package also wraps a client/server library called +CSlib which enables two codes to exchange messages in different ways, +either via files, sockets, or MPI. The CSlib is provided with LAMMPS +in the lib/message dir. The CSlib has its own +"website"_http://cslib.sandia.gov with documentation and test +programs. + +NOTE: For client/server coupling to work between LAMMPS and another +code, the other code also has to use the CSlib. This can sometimes be +done without any modifications to the other code by simply wrapping it +with a Python script that exchanges CSlib messages with LAMMPS and +prepares input for or processes output from the other code. The other +code also has to implement a matching protocol for the format and +content of messages that LAMMPS exchanges with it. + +These are the commands currently in the MESSAGE package for two +protocols, MD and MC (Monte Carlo). New protocols can easily be +defined and added to this directory, where LAMMPS acts as either the +client or server. + +"message"_message.html +"fix client md"_fix_client_md.html = LAMMPS is a client for running MD +"server md"_server_md.html = LAMMPS is a server for computing MD forces +"server mc"_server_mc.html = LAMMPS is a server for computing a Monte Carlo energy :ul + +The server doc files give details of the message protocols +for data that is exchanged bewteen the client and server. + +These example directories illustrate how to use LAMMPS as either a +client or server code: + +examples/message +examples/COUPLE/README +examples/COUPLE/lammps_mc +examples/COUPLE/lammps_vasp :ul + +The examples/message dir couples a client instance of LAMMPS to a +server instance of LAMMPS. + +The lammps_mc dir shows how to couple LAMMPS as a server to a simple +Monte Carlo client code as the driver. + +The lammps_vasp dir shows how to couple LAMMPS as a client code +running MD timestepping to VASP acting as a server providing quantum +DFT forces, thru a Python wrapper script on VASP. + +Here is how to launch a client and server code together for any of the +4 modes of message exchange that the "message"_message.html command +and the CSlib support. Here LAMMPS is used as both the client and +server code. Another code could be subsitituted for either. + +The examples below show launching both codes from the same window (or +batch script), using the "&" character to launch the first code in the +background. For all modes except {mpi/one}, you could also launch the +codes in separate windows on your desktop machine. It does not +matter whether you launch the client or server first. + +In these examples either code can be run on one or more processors. +If running in a non-MPI mode (file or zmq) you can launch a code on a +single processor without using mpirun. + +IMPORTANT: If you run in mpi/two mode, you must launch both codes via +mpirun, even if one or both of them runs on a single processor. This +is so that MPI can figure out how to connect both MPI processes +together to exchange MPI messages between them. + +For message exchange in {file}, {zmq}, or {mpi/two} modes: + +% mpirun -np 1 lmp_mpi -log log.client < in.client & +% mpirun -np 2 lmp_mpi -log log.server < in.server :pre + +% mpirun -np 4 lmp_mpi -log log.client < in.client & +% mpirun -np 1 lmp_mpi -log log.server < in.server :pre + +% mpirun -np 2 lmp_mpi -log log.client < in.client & +% mpirun -np 4 lmp_mpi -log log.server < in.server :pre + +For message exchange in {mpi/one} mode: + +Launch both codes in a single mpirun command: + +mpirun -np 2 lmp_mpi -mpicolor 0 -in in.message.client -log log.client : -np 4 lmp_mpi -mpicolor 1 -in in.message.server -log log.server :pre + +The two -np values determine how many procs the client and the server +run on. + +A LAMMPS executable run in this manner must use the -mpicolor color +command-line option as their its option, where color is an integer +label that will be used to distinguish one executable from another in +the multiple executables that the mpirun command launches. In this +example the client was colored with a 0, and the server with a 1. diff --git a/doc/src/Howto_couple.txt b/doc/src/Howto_couple.txt index d7b4924d8cda690ef5204f6adabab34f2fff0a7d..0214db1ececec361d41e6e16d7efbfe3a90a70c0 100644 --- a/doc/src/Howto_couple.txt +++ b/doc/src/Howto_couple.txt @@ -16,10 +16,12 @@ atoms and pass those forces to LAMMPS. Or a continuum finite element nodal points, compute a FE solution, and return interpolated forces on MD atoms. -LAMMPS can be coupled to other codes in at least 3 ways. Each has +LAMMPS can be coupled to other codes in at least 4 ways. Each has advantages and disadvantages, which you'll have to think about in the context of your application. +:line + (1) Define a new "fix"_fix.html command that calls the other code. In this scenario, LAMMPS is the driver code. During its timestepping, the fix is invoked, and can make library calls to the other code, @@ -32,6 +34,8 @@ LAMMPS. :link(poems,http://www.rpi.edu/~anderk5/lab) +:line + (2) Define a new LAMMPS command that calls the other code. This is conceptually similar to method (1), but in this case LAMMPS and the other code are on a more equal footing. Note that now the other code @@ -52,6 +56,8 @@ command writes and reads. See the "Modify command"_Modify_command.html doc page for info on how to add a new command to LAMMPS. +:line + (3) Use LAMMPS as a library called by another code. In this case the other code is the driver and calls LAMMPS as needed. Or a wrapper code could link and call both LAMMPS and another code as libraries. @@ -102,3 +108,9 @@ on all the processors. Or it might allocate half the processors to LAMMPS and half to the other code and run both codes simultaneously before syncing them up periodically. Or it might instantiate multiple instances of LAMMPS to perform different calculations. + +:line + +(4) Couple LAMMPS with another code in a client/server mode. This is +described on the "Howto client/server"_Howto_client_server.html doc +page. diff --git a/doc/src/Howto_library.txt b/doc/src/Howto_library.txt index 741078e7eb7cb74a574c0e0bada4cca4414cce89..9a9656784ce7e81b5d82e0e74f029b605ac122bc 100644 --- a/doc/src/Howto_library.txt +++ b/doc/src/Howto_library.txt @@ -171,16 +171,16 @@ void lammps_create_atoms(void *, int, tagint *, int *, double *, double *, The gather functions collect peratom info of the requested type (atom coords, atom types, forces, etc) from all processors, and returns the -same vector of values to each callling processor. The scatter +same vector of values to each calling processor. The scatter functions do the inverse. They distribute a vector of peratom values, -passed by all calling processors, to invididual atoms, which may be -owned by different processos. +passed by all calling processors, to individual atoms, which may be +owned by different processors. The lammps_gather_atoms() function does this for all N atoms in the system, ordered by atom ID, from 1 to N. The lammps_gather_atoms_concat() function does it for all N atoms, but simply concatenates the subset of atoms owned by each processor. The -resulting vector is not ordered by atom ID. Atom IDs can be requetsed +resulting vector is not ordered by atom ID. Atom IDs can be requested by the same function if the caller needs to know the ordering. The lammps_gather_subset() function allows the caller to request values for only a subset of atoms (identified by ID). diff --git a/doc/src/Howto_nemd.txt b/doc/src/Howto_nemd.txt index f787801c36745d934abbfb1c26462734014d1c0c..10139d907c739123b5365aa87a7fcbca14d137a4 100644 --- a/doc/src/Howto_nemd.txt +++ b/doc/src/Howto_nemd.txt @@ -24,6 +24,11 @@ by subtracting out the streaming velocity of the shearing atoms. The velocity profile or other properties of the fluid can be monitored via the "fix ave/chunk"_fix_ave_chunk.html command. +NOTE: A recent (2017) book by "(Daivis and Todd)"_#Daivis-nemd +discusses use of the SLLOD method and non-equilibrium MD (NEMD) +thermostatting generally, for both simple and complex fluids, +e.g. molecular systems. The latter can be tricky to do correctly. + As discussed in the previous section on non-orthogonal simulation boxes, the amount of tilt or skew that can be applied is limited by LAMMPS for computational efficiency to be 1/2 of the parallel box @@ -46,3 +51,9 @@ An alternative method for calculating viscosities is provided via the NEMD simulations can also be used to measure transport properties of a fluid through a pore or channel. Simulations of steady-state flow can be performed using the "fix flow/gauss"_fix_flow_gauss.html command. + +:line + +:link(Daivis-nemd) +[(Daivis and Todd)] Daivis and Todd, Nonequilibrium Molecular Dyanmics (book), +Cambridge University Press, https://doi.org/10.1017/9781139017848, (2017). diff --git a/doc/src/Howto_pylammps.txt b/doc/src/Howto_pylammps.txt index 8be4b66e78a511b404987929d247ce3836a40086..a12bf13f2e9ca2914012b1121cc0951b282bcbcc 100644 --- a/doc/src/Howto_pylammps.txt +++ b/doc/src/Howto_pylammps.txt @@ -73,7 +73,7 @@ that package into your current Python installation. cd $LAMMPS_DIR/python python install.py :pre -NOTE: Recompiling the shared library requires reinstalling the Python package +NOTE: Recompiling the shared library requires re-installing the Python package Installation inside of a virtualenv :h5 diff --git a/doc/src/Howto_spherical.txt b/doc/src/Howto_spherical.txt index 1e737df655462c2fc0e1059ac7bc56ecdb120287..4dfe4e2f6c88eab104e813e0051138c25434b4ef 100644 --- a/doc/src/Howto_spherical.txt +++ b/doc/src/Howto_spherical.txt @@ -159,7 +159,7 @@ ellipsoidal particles: The advantage of these fixes is that those which thermostat the particles include the rotational degrees of freedom in the temperature -calculation and thermostatting. The "fix langevin"_fix_langevin +calculation and thermostatting. The "fix langevin"_fix_langevin.html command can also be used with its {omgea} or {angmom} options to thermostat the rotational degrees of freedom for spherical or ellipsoidal particles. Other thermostatting fixes only operate on the diff --git a/doc/src/Howto_spins.txt b/doc/src/Howto_spins.txt index 1b9adb49a5701789dafc9f86cebc23a87623411c..b549f99be2f2e8d27c0d54eb251cd9ab31105e78 100644 --- a/doc/src/Howto_spins.txt +++ b/doc/src/Howto_spins.txt @@ -9,10 +9,10 @@ Documentation"_ld - "LAMMPS Commands"_lc :c Magnetic spins :h3 -The magnetic spin simualtions are enabled by the SPIN package, whose +The magnetic spin simulations are enabled by the SPIN package, whose implementation is detailed in "Tranchida"_#Tranchida7. -The model representents the simulation of atomic magnetic spins coupled +The model represents the simulation of atomic magnetic spins coupled to lattice vibrations. The dynamics of those magnetic spins can be used to simulate a broad range a phenomena related to magneto-elasticity, or or to study the influence of defects on the magnetic properties of @@ -43,7 +43,7 @@ langevin/spin"_fix_langevin_spin.html. It allows to either dissipate the thermal energy of the Langevin thermostat, or to perform a relaxation of the magnetic configuration toward an equilibrium state. -All the computed magnetic properties can be outputed by two main +All the computed magnetic properties can be output by two main commands. The first one is "compute spin"_compute_spin.html, that enables to evaluate magnetic averaged quantities, such as the total magnetization of the system along x, y, or z, the spin temperature, or diff --git a/doc/src/Howto_thermostat.txt b/doc/src/Howto_thermostat.txt index 0e2feb18699cd993abf78df4542b599431d8512a..9f7e2f3000c70047002cddb5b59db558d1fefbeb 100644 --- a/doc/src/Howto_thermostat.txt +++ b/doc/src/Howto_thermostat.txt @@ -43,6 +43,11 @@ nvt/asphere"_fix_nvt_asphere.html thermostat not only translation velocities but also rotational velocities for spherical and aspherical particles. +NOTE: A recent (2017) book by "(Daivis and Todd)"_#Daivis-thermostat +discusses use of the SLLOD method and non-equilibrium MD (NEMD) +thermostatting generally, for both simple and complex fluids, +e.g. molecular systems. The latter can be tricky to do correctly. + DPD thermostatting alters pairwise interactions in a manner analogous to the per-particle thermostatting of "fix langevin"_fix_langevin.html. @@ -87,3 +92,9 @@ specify them explicitly via the "thermo_style custom"_thermo_style.html command. Or you can use the "thermo_modify"_thermo_modify.html command to re-define what temperature compute is used for default thermodynamic output. + +:line + +:link(Daivis-thermostat) +[(Daivis and Todd)] Daivis and Todd, Nonequilibrium Molecular Dyanmics (book), +Cambridge University Press, https://doi.org/10.1017/9781139017848, (2017). diff --git a/doc/src/Howto_viscosity.txt b/doc/src/Howto_viscosity.txt index 8bcab6dd247f02de5dbb3135e67fe76cc32efb01..b4e441557df20300d98c13daf154029cb215e427 100644 --- a/doc/src/Howto_viscosity.txt +++ b/doc/src/Howto_viscosity.txt @@ -37,6 +37,11 @@ used to shear the fluid in between them, again with some kind of thermostat that modifies only the thermal (non-shearing) components of velocity to prevent the fluid from heating up. +NOTE: A recent (2017) book by "(Daivis and Todd)"_#Daivis-viscosity +discusses use of the SLLOD method and non-equilibrium MD (NEMD) +thermostatting generally, for both simple and complex fluids, +e.g. molecular systems. The latter can be tricky to do correctly. + In both cases, the velocity profile setup in the fluid by this procedure can be monitored by the "fix ave/chunk"_fix_ave_chunk.html command, which determines grad(Vstream) in the equation above. @@ -131,3 +136,9 @@ mean-square-displacement formulation for self-diffusivity. The time-integrated momentum fluxes play the role of Cartesian coordinates, whose mean-square displacement increases linearly with time at sufficiently long times. + +:line + +:link(Daivis-viscosity) +[(Daivis and Todd)] Daivis and Todd, Nonequilibrium Molecular Dyanmics (book), +Cambridge University Press, https://doi.org/10.1017/9781139017848, (2017). diff --git a/doc/src/Install_linux.txt b/doc/src/Install_linux.txt index cc15ac0ae0f6f4ef43f9b9fbfd0372eeae28e8e4..bd22de057c80b40f1afdc3993e897a62eaa93cae 100644 --- a/doc/src/Install_linux.txt +++ b/doc/src/Install_linux.txt @@ -9,39 +9,16 @@ Documentation"_ld - "LAMMPS Commands"_lc :c Download an executable for Linux :h3 -Binaries are available for many different versions of Linux: +Binaries are available for different versions of Linux: -"Pre-built binary RPMs for Fedora/RedHat/CentOS/openSUSE"_#rpm "Pre-built Ubuntu Linux executables"_#ubuntu +"Pre-built Fedora Linux executables"_#fedora +"Pre-built EPEL Linux executables (RHEL, CentOS)"_#epel +"Pre-built OpenSuse Linux executables"_#opensuse "Pre-built Gentoo Linux executable"_#gentoo :all(b) :line -Pre-built binary RPMs for Fedora/RedHat/CentOS/openSUSE :h4,link(rpm) - -Pre-built LAMMPS executables for various Linux distributions -can be downloaded as binary RPM files from this site: - -"http://rpm.lammps.org"_http://rpm.lammps.org - -There are multiple package variants supporting serial, parallel and -Python wrapper versions. The LAMMPS binaries contain all optional -packages included in the source distribution except: GPU, KIM, REAX, -and USER-INTEL. - -Installation instructions for the various versions are here: - -"http://rpm.lammps.org/install.html"_http://rpm.lammps.org/install.html - -The instructions show how to enable the repository in the respective -system's package management system. Installing and updating are then -straightforward and automatic. - -Thanks to Axel Kohlmeyer (Temple U, akohlmey at gmail.com) for setting -up this RPM capability. - -:line - Pre-built Ubuntu Linux executables :h4,link(ubuntu) A pre-built LAMMPS executable suitable for running on the latest @@ -60,10 +37,10 @@ To install LAMMPS do the following once: sudo apt-get install lammps-daily :pre -This downloads an executable named "lammps-daily" to your box, which +This downloads an executable named "lmp_daily" to your box, which can then be used in the usual way to run input scripts: -lammps-daily < in.lj :pre +lmp_daily -in in.lj :pre To update LAMMPS to the most current version, do the following: @@ -99,6 +76,80 @@ Ubuntu package capability. :line +Pre-built Fedora Linux executables :h4,link(fedora) + +Pre-built LAMMPS packages for stable releases are available +in the Fedora Linux distribution as of version 28. The packages +can be installed via the dnf package manager. There are 3 basic +varieties (lammps = no MPI, lammps-mpich = MPICH MPI library, +lammps-openmpi = OpenMPI MPI library) and for each support for +linking to the C library interface (lammps-devel, lammps-mpich-devel, +lammps-openmpi-devel), the header for compiling programs using +the C library interface (lammps-headers), and the LAMMPS python +module for Python 3. All packages can be installed at the same +time and the name of the LAMMPS executable is {lmp} in all 3 cases. +By default, {lmp} will refer to the serial executable, unless +one of the MPI environment modules is loaded +("module load mpi/mpich-x86_64" or "module load mpi/openmpi-x86_64"). +Then the corresponding parallel LAMMPS executable is used. +The same mechanism applies when loading the LAMMPS python module. + +To install LAMMPS with OpenMPI and run an input in.lj with 2 CPUs do: + +dnf install lammps-openmpi +module load mpi/openmpi-x86_64 +mpirun -np 2 lmp -in in.lj :pre + +The "dnf install" command is needed only once. In case of a new LAMMPS +stable release, "dnf update" will automatically update to the newer +version as soon at the RPM files are built and uploaded to the download +mirrors. The "module load" command is needed once per (shell) session +or shell terminal instance, unless it is automatically loaded from the +shell profile. + +Please use "lmp -help" to see which compilation options, packages, +and styles are included in the binary. + +Thanks to Christoph Junghans (LANL) for making LAMMPS available in Fedora. + +:line + +Pre-built EPEL Linux executable :h4,link(epel) + +Pre-built LAMMPS packages for stable releases are available +in the "Extra Packages for Enterprise Linux (EPEL) repository"_https://fedoraproject.org/wiki/EPEL +for use with Red Hat Enterprise Linux (RHEL) or CentOS version 7.x +and compatible Linux distributions. Names of packages, executable, +and content are the same as described above for Fedora Linux. +But RHEL/CentOS 7.x uses the "yum" package manager instead of "dnf" +in Fedora 28. + +Please use "lmp -help" to see which compilation options, packages, +and styles are included in the binary. + +Thanks to Christoph Junghans (LANL) for making LAMMPS available in EPEL. + +:line + +Pre-built OpenSuse Linux executable :h4,link(opensuse) + +A pre-built LAMMPS package for stable releases is available +in OpenSuse as of Leap 15.0. You can install the package with: + +zypper install lammps :pre + +This includes support for OpenMPI. The name of the LAMMPS executable +is {lmp}. Thus to run an input in parallel on 2 CPUs you would do: + +mpirun -np 2 lmp -in in.lj :pre + +Please use "lmp -help" to see which compilation options, packages, +and styles are included in the binary. + +Thanks to Christoph Junghans (LANL) for making LAMMPS available in OpenSuse. + +:line + Pre-built Gentoo Linux executable :h4,link(gentoo) LAMMPS is part of Gentoo's main package tree and can be installed by diff --git a/doc/src/Install_patch.txt b/doc/src/Install_patch.txt index 3d0b27370e1285e293f247e02c7a4fac0c24c630..ff9b14c12c162dcd9112fde9298d18f5370e3220 100644 --- a/doc/src/Install_patch.txt +++ b/doc/src/Install_patch.txt @@ -17,10 +17,11 @@ how to stay current are on the "Install git"_Install_git.html and If you prefer to download a tarball, as described on the "Install git"_Install_tarball.html doc page, you can stay current by downloading "patch files" when new patch releases are made. A link to -a patch file is posted on the "bug and feature page"_bug of the -website, along with a list of changed files and details about what is -in the new patch release. This page explains how to apply the patch -file to your local LAMMPS directory. +a patch file is posted on the "bug and feature +page"_http://lammps.sandia.gov/bug.html of the LAMMPS website, along +with a list of changed files and details about what is in the new patch +release. This page explains how to apply the patch file to your local +LAMMPS directory. NOTE: You should not apply patch files to a local Git or SVN repo of LAMMPS, only to an unpacked tarball. Use Git and SVN commands to diff --git a/doc/src/Install_tarball.txt b/doc/src/Install_tarball.txt index b672c5ff252143a0484cd60025549c64878b127f..7ba5d15ac4af341d44fcd3e84c897365237e1543 100644 --- a/doc/src/Install_tarball.txt +++ b/doc/src/Install_tarball.txt @@ -7,7 +7,7 @@ Documentation"_ld - "LAMMPS Commands"_lc :c :line -Download source as a tarball :h3 +Download source and documentation as a tarball :h3 You can download a current LAMMPS tarball from the "download page"_download of the "LAMMPS website"_lws. @@ -22,6 +22,10 @@ few times per year, and undergo more testing before release. Patch releases occur a couple times per month. The new contents in all releases are listed on the "bug and feature page"_bug of the website. +Both tarballs include LAMMPS documentation (HTML and PDF files) +corresponding to that version. The download page also has an option +to download the current-version LAMMPS documentation by itself. + Older versions of LAMMPS can also be downloaded from "this page"_older. diff --git a/doc/src/Intro_overview.txt b/doc/src/Intro_overview.txt index 49c14bc5f06d463037d294d28873b43fdf6c7f14..cd822c778f29db10193966d27b7f7f0cada6392d 100644 --- a/doc/src/Intro_overview.txt +++ b/doc/src/Intro_overview.txt @@ -17,7 +17,7 @@ variety of interatomic potentials (force fields) and boundary conditions. It can model 2d or 3d systems with only a few particles up to millions or billions. -LAMMPS can be built and run on a laptop or destop machine, but is +LAMMPS can be built and run on a laptop or desktop machine, but is designed for parallel computers. It will run on any parallel machine that supports the "MPI"_mpi message-passing library. This includes shared-memory boxes and distributed-memory clusters and @@ -45,7 +45,7 @@ nature; some long-range models are included as well. LAMMPS uses neighbor lists to keep track of nearby particles. The lists are optimized for systems with particles that are repulsive at short distances, so that the local density of particles never becomes -too large. This is in contrast to methods used for modeling plasmas +too large. This is in contrast to methods used for modeling plasma or gravitational bodies (e.g. galaxy formation). On parallel machines, LAMMPS uses spatial-decomposition techniques to diff --git a/doc/src/JPG/pair_atm_dia.jpg b/doc/src/JPG/pair_atm_dia.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd8edc5e676ee9973dd4ca1aced98b641c4157c7 Binary files /dev/null and b/doc/src/JPG/pair_atm_dia.jpg differ diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index c5e5aff61b1ce5149ee2a2acef906bf31eb6bdd5..dab2ea385e0e5bc442e8b0cd2eab317ea6355f90 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -16 Aug 2018 version :c,h2 +10 Oct 2018 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/doc/src/Manual_build.txt b/doc/src/Manual_build.txt index a6b881cb79708c37760dc482cac2a7017342d7df..ac12dd7b2ed3da973c726b6d4ded6a68745fb34e 100644 --- a/doc/src/Manual_build.txt +++ b/doc/src/Manual_build.txt @@ -10,15 +10,16 @@ Section"_Manual.html :c Building the LAMMPS manual :h2 -Depending on how you obtained LAMMPS, the doc directory has -2 or 3 sub-directories and optionally 2 PDF files and an ePUB file: +Depending on how you obtained LAMMPS, the doc directory has 2 or 3 +sub-directories and optionally 2 PDF files and 2 e-book format files: src # content files for LAMMPS documentation html # HTML version of the LAMMPS manual (see html/Manual.html) tools # tools and settings for building the documentation Manual.pdf # large PDF version of entire manual Developer.pdf # small PDF with info about how LAMMPS is structured -LAMMPS.epub # Manual in ePUB format :pre +LAMMPS.epub # Manual in ePUB e-book format +LAMMPS.mobi # Manual in MOBI e-book format :pre If you downloaded LAMMPS as a tarball from the web site, all these directories and files should be included. @@ -40,7 +41,7 @@ HTML files already exist. This requires various tools including Sphinx, which the build process will attempt to download and install on your system, if not already available. See more details below. -(c) You can genererate an older, simpler, less-fancy style of HTML +(c) You can generate an older, simpler, less-fancy style of HTML documentation by typing "make old". This will create an "old" directory. This can be useful if (b) does not work on your box for some reason, or you want to quickly view the HTML version of a doc @@ -61,6 +62,7 @@ make old # generate old-style HTML pages in old dir via txt2html make fetch # fetch HTML doc pages and 2 PDF files from web site # as a tarball and unpack into html dir and 2 PDFs make epub # generate LAMMPS.epub in ePUB format using Sphinx +make mobi # generate LAMMPS.mobi in MOBI format using ebook-convert make clean # remove intermediate RST files created by HTML build make clean-all # remove entire build folder and any cached data :pre @@ -68,7 +70,7 @@ make clean-all # remove entire build folder and any cached data :pre Installing prerequisites for HTML build :h3 -To run the HTML documention build toolchain, Python 3 and virtualenv +To run the HTML documentation build toolchain, Python 3 and virtualenv have to be installed. Here are instructions for common setups: Ubuntu :h4 @@ -115,10 +117,8 @@ ePUB :h4 Same as for HTML. This uses the same tools and configuration files as the HTML tree. -For converting the generated ePUB file to a mobi format file +For converting the generated ePUB file to a MOBI format file (for e-book readers like Kindle, that cannot read ePUB), you also need to have the 'ebook-convert' tool from the "calibre" software installed. "http://calibre-ebook.com/"_http://calibre-ebook.com/ -You first create the ePUB file with 'make epub' and then do: - -ebook-convert LAMMPS.epub LAMMPS.mobi :pre +You first create the ePUB file and then convert it with 'make mobi' diff --git a/doc/src/Modify_overview.txt b/doc/src/Modify_overview.txt index cf94b40281417805515700d697dc84cbd476fc38..4ab1eddf218786a6dca4c2b4f77bcda26fa3d57f 100644 --- a/doc/src/Modify_overview.txt +++ b/doc/src/Modify_overview.txt @@ -10,7 +10,7 @@ Documentation"_ld - "LAMMPS Commands"_lc :c Overview :h3 The best way to add a new feature to LAMMPS is to find a similar -featureand look at the corresponding source and header files to figure +feature and look at the corresponding source and header files to figure out what it does. You will need some knowledge of C++ to be able to understand the hi-level structure of LAMMPS and its class organization, but functions (class methods) that do actual diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 892774be383f379ade01ca6265e69ea6b6f4bcfc..6efcfd5f62a2769d227e2c5572d32dc8f82da62c 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -46,6 +46,7 @@ as contained in the file name. "MANYBODY"_#PKG-MANYBODY, "MC"_#PKG-MC, "MEAM"_#PKG-MEAM, +"MESSAGE"_#PKG-MESSAGE, "MISC"_#PKG-MISC, "MOLECULE"_#PKG-MOLECULE, "MPIIO"_#PKG-MPIIO, @@ -88,10 +89,12 @@ as contained in the file name. "USER-NETCDF"_#PKG-USER-NETCDF, "USER-OMP"_#PKG-USER-OMP, "USER-PHONON"_#PKG-USER-PHONON, +"USER-PTM"_#PKG-USER-PTM, "USER-QMMM"_#PKG-USER-QMMM, "USER-QTB"_#PKG-USER-QTB, "USER-QUIP"_#PKG-USER-QUIP, "USER-REAXC"_#PKG-USER-REAXC, +"USER-SCAFACOS"_#PKG-USER-SCAFACOS, "USER-SMD"_#PKG-USER-SMD, "USER-SMTBQ"_#PKG-USER-SMTBQ, "USER-SPH"_#PKG-USER-SPH, @@ -297,7 +300,7 @@ lib/gpu/README "Section 2.6 -sf gpu"_Run_options.html "Section 2.6 -pk gpu"_Run_options.html "package gpu"_package.html -"Commands all"_Commands_all.html pages (pair,kspace) for styles followed by (g) +"Commands all"_lc pages (pair,kspace) for styles followed by (g) "Benchmarks page"_http://lammps.sandia.gov/bench.html of web site :ul :line @@ -412,7 +415,7 @@ lib/kokkos/README "Section 2.6 -sf kk"_Run_options.html "Section 2.6 -pk kokkos"_Run_options.html "package kokkos"_package.html -"Commands all"_Commands_all.html pages (fix,compute,pair,etc) for styles followed by (k) +"Commands all"_lc pages (fix,compute,pair,etc) for styles followed by (k) "Benchmarks page"_http://lammps.sandia.gov/bench.html of web site :ul :line @@ -549,10 +552,6 @@ This package has "specific installation instructions"_Build_extras.html#gpu on the "Build extras"_Build_extras.html doc page. -NOTE: You should test building the MEAM library with both the Intel -and GNU compilers to see if a simulation runs faster with one versus -the other on your system. - [Supporting info:] src/MEAM: filenames -> commands @@ -563,6 +562,31 @@ examples/meam :ul :line +MESSAGE package :link(PKG-MESSAGE),h4 + +[Contents:] + +Commands to use LAMMPS as either a client or server and couple it to +another application. + +[Install:] + +This package has "specific installation +instructions"_Build_extras.html#message on the "Build +extras"_Build_extras.html doc page. + +[Supporting info:] + +src/MESSAGE: filenames -> commands +lib/message/README +"message"_message.html +"fix client/md"_fix_client_md.html +"server md"_server_md.html +"server mc"_server_mc.html +examples/message :ul + +:line + MISC package :link(PKG-MISC),h4 [Contents:] @@ -851,7 +875,7 @@ multi-replica simulations in LAMMPS. Methods in the package include nudged elastic band (NEB), parallel replica dynamics (PRD), temperature accelerated dynamics (TAD), parallel tempering, and a verlet/split algorithm for performing long-range Coulombics on one set -of processors, and the remainder of the force field calcalation on +of processors, and the remainder of the force field calculation on another set. [Supporting info:] @@ -874,7 +898,7 @@ RIGID package :link(PKG-RIGID),h4 [Contents:] Fixes which enforce rigid constraints on collections of atoms or -particles. This includes SHAKE and RATTLE, as well as varous +particles. This includes SHAKE and RATTLE, as well as various rigid-body integrators for a few large bodies or many small bodies. Also several computes which calculate properties of rigid bodies. @@ -1370,7 +1394,7 @@ which have styles optimized for CPUs and KNLs. You need to have an Intel compiler, version 14 or higher to take full advantage of this package. While compilation with GNU compilers is -supported, performance will be suboptimal. +supported, performance will be sub-optimal. NOTE: the USER-INTEL package contains styles that require using the -restrict flag, when compiling with Intel compilers. @@ -1392,7 +1416,7 @@ src/USER-INTEL/README "Section 2.6 -sf intel"_Run_options.html "Section 2.6 -pk intel"_Run_options.html "package intel"_package.html -"Commands all"_Commands_all.html pages (fix,compute,pair,etc) for styles followed by (i) +"Commands all"_lc pages (fix,compute,pair,etc) for styles followed by (i) src/USER-INTEL/TEST "Benchmarks page"_http://lammps.sandia.gov/bench.html of web site :ul @@ -1582,8 +1606,6 @@ molecular visualization and analysis program, to enable LAMMPS to dump snapshots in formats compatible with various molecular simulation tools. -:link(vmd_home,http://www.ks.uiuc.edu/Research/vmd) - To use this package you must have the desired VMD plugins available on your system. @@ -1593,7 +1615,7 @@ plugin via the "dump molfile"_dump_molfile.html command. Plugins can be obtained from a VMD installation which has to match the platform that you are using to compile LAMMPS for. By adding plugins to VMD, support for new file formats can be added to LAMMPS (or VMD or other -programs that use them) without having to recompile the application +programs that use them) without having to re-compile the application itself. More information about the VMD molfile plugins can be found at "http://www.ks.uiuc.edu/Research/vmd/plugins/molfile"_http://www.ks.uiuc.edu/Research/vmd/plugins/molfile. @@ -1635,6 +1657,7 @@ tools: "AtomEye"_atomeye (the libAtoms version of AtomEye contains a NetCDF reader not present in the standard distribution) :ul :link(ovito,http://www.ovito.org) +:link(vmd_home,https://www.ks.uiuc.edu/Research/vmd/) :link(atomeye,http://www.libatoms.org) [Author:] Lars Pastewka (Karlsruhe Institute of Technology). @@ -1698,7 +1721,7 @@ src/USER-OMP/README "Section 2.6 -sf omp"_Run_options.html "Section 2.6 -pk omp"_Run_options.html "package omp"_package.html -"Commands all"_Commands_all.html pages (fix,compute,pair,etc) for styles followed by (o) +"Commands all"_lc pages (fix,compute,pair,etc) for styles followed by (o) "Benchmarks page"_http://lammps.sandia.gov/bench.html of web site :ul :line @@ -1722,6 +1745,24 @@ examples/USER/phonon :ul :line +USER-PTM package :link(PKG-USER-PTM),h4 + +[Contents:] + +A "compute ptm/atom"_compute_ptm_atom.html command that calculates +local structure characterization using the Polyhedral Template +Matching methodology. + +[Author:] Peter Mahler Larsen (MIT). + +[Supporting info:] + +src/USER-PTM: filename starting with ptm_ -> supporting code, other filenames -> commands +src/USER-PTM/LICENSE +"compute ptm/atom"_compute_ptm_atom.html :ul + +:line + USER-QMMM package :link(PKG-USER-QMMM),h4 [Contents:] @@ -1839,6 +1880,41 @@ examples/reax :ul :line +USER-SCAFACOS package :link(PKG-USER-SCAFACOS),h4 + +[Contents:] + +A KSpace style which wraps the "ScaFaCoS Coulomb solver +library"_http://www.scafacos.de to compute long-range Coulombic +interactions. + +To use this package you must have the ScaFaCoS library available on +your system. + +[Author:] Rene Halver (JSC) wrote the scafacos LAMMPS command. + +ScaFaCoS itself was developed by a consortium of German research +facilities with a BMBF (German Ministry of Science and Education) +funded project in 2009-2012. Participants of the consortium were the +Universities of Bonn, Chemnitz, Stuttgart, and Wuppertal as well as +the Forschungszentrum Juelich. + +[Install:] + +This package has "specific installation +instructions"_Build_extras.html#user-scafacos on the "Build +extras"_Build_extras.html doc page. + +[Supporting info:] + +src/USER-SCAFACOS: filenames -> commands +src/USER-SCAFACOS/README +"kspace_style scafacos"_kspace_style.html +"kspace_modify"_kspace_modify.html +examples/USER/scafacos :ul + +:line + USER-SMD package :link(PKG-USER-SMD),h4 [Contents:] @@ -1998,3 +2074,5 @@ src/USER-VTK: filenames -> commands src/USER-VTK/README lib/vtk/README "dump vtk"_dump_vtk.html :ul + + diff --git a/doc/src/Packages_standard.txt b/doc/src/Packages_standard.txt index 55d0d616f417a5511898b98f61d9b7b0b348edd9..583ecf39fe39ab603168d2956c9c4f2c035860c2 100644 --- a/doc/src/Packages_standard.txt +++ b/doc/src/Packages_standard.txt @@ -47,7 +47,8 @@ Package, Description, Doc page, Example, Library "MANYBODY"_Packages_details.html#PKG-MANYBODY, many-body potentials, "pair_style tersoff"_pair_tersoff.html, shear, no "MC"_Packages_details.html#PKG-MC, Monte Carlo options, "fix gcmc"_fix_gcmc.html, n/a, no "MEAM"_Packages_details.html#PKG-MEAM, modified EAM potential, "pair_style meam"_pair_meam.html, meam, int -"MISC"_Packages_details.html#PKG-MISC, miscellanous single-file commands, n/a, no, no +"MESSAGE"_Packages_details.html#PKG-MESSAGE, client/server messaging, "message"_message.html, message, int +"MISC"_Packages_details.html#PKG-MISC, miscellaneous single-file commands, n/a, no, no "MOLECULE"_Packages_details.html#PKG-MOLECULE, molecular system force fields, "Howto bioFF"_Howto_bioFF.html, peptide, no "MPIIO"_Packages_details.html#PKG-MPIIO, MPI parallel I/O dump and restart, "dump"_dump.html, n/a, no "MSCG"_Packages_details.html#PKG-MSCG, multi-scale coarse-graining wrapper, "fix mscg"_fix_mscg.html, mscg, ext diff --git a/doc/src/Packages_user.txt b/doc/src/Packages_user.txt index c1a52fd0d0d864493d49f849aa5c531fcb1cd40f..6e363b28f7681e04e906ce8aed8a3b4b12f18476 100644 --- a/doc/src/Packages_user.txt +++ b/doc/src/Packages_user.txt @@ -58,14 +58,16 @@ Package, Description, Doc page, Example, Library "USER-MGPT"_Packages_details.html#PKG-USER-MGPT, fast MGPT multi-ion potentials, "pair_style mgpt"_pair_mgpt.html, USER/mgpt, no "USER-MISC"_Packages_details.html#PKG-USER-MISC, single-file contributions, USER-MISC/README, USER/misc, no "USER-MOFFF"_Packages_details.html#PKG-USER-MOFFF, styles for "MOF-FF"_MOFplus force field, "pair_style buck6d/coul/gauss"_pair_buck6d_coul_gauss.html, USER/mofff, no -"USER-MOLFILE"_Packages_details.html#PKG-USER-MOLFILE, "VMD"_vmd_home molfile plug-ins,"dump molfile"_dump_molfile.html, n/a, ext +"USER-MOLFILE"_Packages_details.html#PKG-USER-MOLFILE, "VMD"_https://www.ks.uiuc.edu/Research/vmd/ molfile plug-ins,"dump molfile"_dump_molfile.html, n/a, ext "USER-NETCDF"_Packages_details.html#PKG-USER-NETCDF, dump output via NetCDF,"dump netcdf"_dump_netcdf.html, n/a, ext "USER-OMP"_Packages_details.html#PKG-USER-OMP, OpenMP-enabled styles,"Speed omp"_Speed_omp.html, "Benchmarks"_http://lammps.sandia.gov/bench.html, no "USER-PHONON"_Packages_details.html#PKG-USER-PHONON, phonon dynamical matrix,"fix phonon"_fix_phonon.html, USER/phonon, no +"USER-PTM"_Packages_details.html#PKG-USER-PTM, Polyhedral Template Matching,"compute ptm/atom"_compute_ptm_atom.html, n/a, no "USER-QMMM"_Packages_details.html#PKG-USER-QMMM, QM/MM coupling,"fix qmmm"_fix_qmmm.html, USER/qmmm, ext "USER-QTB"_Packages_details.html#PKG-USER-QTB, quantum nuclear effects,"fix qtb"_fix_qtb.html "fix qbmsst"_fix_qbmsst.html, qtb, no "USER-QUIP"_Packages_details.html#PKG-USER-QUIP, QUIP/libatoms interface,"pair_style quip"_pair_quip.html, USER/quip, ext "USER-REAXC"_Packages_details.html#PKG-USER-REAXC, ReaxFF potential (C/C++) ,"pair_style reaxc"_pair_reaxc.html, reax, no +"USER-SCAFACOS"_Packages_details.html#PKG-USER-SCAFACOS, wrapper on ScaFaCoS solver,"kspace_style scafacos"_kspace_style.html, USER/scafacos, ext "USER-SMD"_Packages_details.html#PKG-USER-SMD, smoothed Mach dynamics,"SMD User Guide"_PDF/SMD_LAMMPS_userguide.pdf, USER/smd, ext "USER-SMTBQ"_Packages_details.html#PKG-USER-SMTBQ, second moment tight binding QEq potential,"pair_style smtbq"_pair_smtbq.html, USER/smtbq, no "USER-SPH"_Packages_details.html#PKG-USER-SPH, smoothed particle hydrodynamics,"SPH User Guide"_PDF/SPH_LAMMPS_userguide.pdf, USER/sph, no diff --git a/doc/src/Python_call.txt b/doc/src/Python_call.txt index 029c8f831cc537da73f898ac5ba3172036a54faf..3c382de1ba2b6661aceada829de918721d4f2673 100644 --- a/doc/src/Python_call.txt +++ b/doc/src/Python_call.txt @@ -59,9 +59,9 @@ and callbacks to LAMMPS. The "fix python/invoke"_fix_python_invoke.html command can execute Python code at selected timesteps during a simulation run. -The "pair_style python"_pair_python command allows you to define +The "pair_style python"_pair_python.html command allows you to define pairwise potentials as python code which encodes a single pairwise -interaction. This is useful for rapid-developement and debugging of a +interaction. This is useful for rapid development and debugging of a new potential. To use any of these commands, you only need to build LAMMPS with the diff --git a/doc/src/Python_head.txt b/doc/src/Python_head.txt index 1f0236842993a5a7492f3e805b32939a3c2fdff0..54f995c565b741456fcfc02cee75b4072c52b361 100644 --- a/doc/src/Python_head.txt +++ b/doc/src/Python_head.txt @@ -62,11 +62,11 @@ library interface provided in src/library.h and src/library.h. That interface is exposed to Python either when calling LAMMPS from Python or when calling Python from a LAMMPS input script and then calling back to LAMMPS from Python code. The library interface is designed to -be easy to add funcionality to. Thus the Python interface to LAMMPS +be easy to add functionality to. Thus the Python interface to LAMMPS is also easy to extend as well. If you create interesting Python scripts that run LAMMPS or interesting Python functions that can be called from a LAMMPS input -script, that you think would be genearlly useful, please post them as +script, that you think would be generally useful, please post them as a pull request to our "GitHub site"_https://github.com/lammps/lammps, and they can be added to the LAMMPS distribution or webpage. diff --git a/doc/src/Python_library.txt b/doc/src/Python_library.txt index 9a3ea93fc30ee932cbc1a85e374f37fb41bddee9..e76af83962336cb267a738f4cfee4ad84c41f9dc 100644 --- a/doc/src/Python_library.txt +++ b/doc/src/Python_library.txt @@ -186,20 +186,20 @@ keyword as a float. The get_natoms() method returns the total number of atoms in the simulation, as an int. -The set_variable() methosd sets an existing string-style variable to a +The set_variable() method sets an existing string-style variable to a new string value, so that subsequent LAMMPS commands can access the variable. -The reset_box() emthods resets the size and shape of the simulation +The reset_box() method resets the size and shape of the simulation box, e.g. as part of restoring a previously extracted and saved state of a simulation. The gather methods collect peratom info of the requested type (atom coords, atom types, forces, etc) from all processors, and returns the -same vector of values to each callling processor. The scatter +same vector of values to each calling processor. The scatter functions do the inverse. They distribute a vector of peratom values, -passed by all calling processors, to invididual atoms, which may be -owned by different processos. +passed by all calling processors, to individual atoms, which may be +owned by different processors. Note that the data returned by the gather methods, e.g. gather_atoms("x"), is different from the data structure returned diff --git a/doc/src/Run_basics.txt b/doc/src/Run_basics.txt index 02139a8c69ad9f7ddb37b7fa8e24e7b080de5d37..1b7387b46ba672c1cb92cfe1f49f7d98d2593166 100644 --- a/doc/src/Run_basics.txt +++ b/doc/src/Run_basics.txt @@ -75,7 +75,7 @@ setenv OMP_NUM_THREADS 2 # csh or tcsh :pre This can also be done via the "package"_package.html command or via the "-pk command-line switch"_Run_options.html which invokes the package command. See the "package"_package.html command or -"Speed"_Speed.html doc pages for more details about which accerlarator +"Speed"_Speed.html doc pages for more details about which accelerator packages and which commands support multi-threading. :line diff --git a/doc/src/Run_options.txt b/doc/src/Run_options.txt index 9c862d7b8ec136b75fe95e5126a500a3801bc359..1fc00bc2e3c0f99a9650e633458d9688a0a665d2 100644 --- a/doc/src/Run_options.txt +++ b/doc/src/Run_options.txt @@ -18,6 +18,7 @@ letter abbreviation can be used: "-i or -in"_#file "-k or -kokkos"_#run-kokkos "-l or -log"_#log +"-m or -mpicolor"_#mpicolor "-nc or -nocite"_#nocite "-pk or -package"_#package "-p or -partition"_#partition @@ -175,6 +176,30 @@ Option -plog will override the name of the partition log files file.N. :line +[-mpicolor] color :link(mpicolor) + +If used, this must be the first command-line argument after the LAMMPS +executable name. It is only used when LAMMPS is launched by an mpirun +command which also launches another executable(s) at the same time. +(The other executable could be LAMMPS as well.) The color is an +integer value which should be different for each executable (another +application may set this value in a different way). LAMMPS and the +other executable(s) perform an MPI_Comm_split() with their own colors +to shrink the MPI_COMM_WORLD communication to be the subset of +processors they are actually running on. + +Currently, this is only used in LAMMPS to perform client/server +messaging with another application. LAMMPS can act as either a client +or server (or both). More details are given on the "Howto +client/server"_Howto_client_server.html doc page. + +Specifically, this refers to the "mpi/one" mode of messaging provided +by the "message"_message.html command and the CSlib library LAMMPS +links with from the lib/message directory. See the +"message"_message.html command for more details. + +:line + [-nocite] :link(nocite) Disable writing the log.cite file which is normally written to list diff --git a/doc/src/Run_windows.txt b/doc/src/Run_windows.txt index 2b93cc7d4944f4a3e61a826d9967986fb5d32516..85c9a6550d637036815cd58f53326dfe3c930363 100644 --- a/doc/src/Run_windows.txt +++ b/doc/src/Run_windows.txt @@ -33,8 +33,8 @@ in parallel, follow these steps. Download and install a compatible MPI library binary package: -for 32-bit Windows: "mpich2-1.4.1p1-win-ia32.msi"_download.lammps.org/thirdparty/mpich2-1.4.1p1-win-ia32.msi -for 64-bit Windows: "mpich2-1.4.1p1-win-x86-64.msi"_download.lammps.org/thirdparty/mpich2-1.4.1p1-win-x86-64.msi :ul +for 32-bit Windows: "mpich2-1.4.1p1-win-ia32.msi"_http://download.lammps.org/thirdparty/mpich2-1.4.1p1-win-ia32.msi +for 64-bit Windows: "mpich2-1.4.1p1-win-x86-64.msi"_http://download.lammps.org/thirdparty/mpich2-1.4.1p1-win-x86-64.msi :ul The LAMMPS Windows installer packages will automatically adjust your path for the default location of this MPI package. After the diff --git a/doc/src/Speed_bench.txt b/doc/src/Speed_bench.txt index 8e407d14ea6bdb7428bff3818a670a9a84244f63..a3d0bf4f46f95c07f04c304449d4399a6c79c95f 100644 --- a/doc/src/Speed_bench.txt +++ b/doc/src/Speed_bench.txt @@ -11,7 +11,7 @@ Benchmarks :h3 Current LAMMPS performance is discussed on the "Benchmarks page"_http://lammps.sandia.gov/bench.html of the "LAMMPS website"_lws -where timings and parallel efficiencies are listed. The page has +where timings and parallel efficiency are listed. The page has several sections, which are briefly described below: CPU performance on 5 standard problems, strong and weak scaling @@ -77,8 +77,8 @@ style, force field, cutoff, etc) can then be estimated. Performance on a parallel machine can also be predicted from one-core or one-node timings if the parallel efficiency can be estimated. The communication bandwidth and latency of a particular parallel machine -affects the efficiency. On most machines LAMMPS will give parallel -efficiencies on these benchmarks above 50% so long as the number of +affects the efficiency. On most machines LAMMPS will give a parallel +efficiency on these benchmarks above 50% so long as the number of atoms/core is a few 100 or greater, and closer to 100% for large numbers of atoms/core. This is for all-MPI mode with one MPI task per core. For nodes with accelerator options or hardware (OpenMP, GPU, diff --git a/doc/src/Speed_gpu.txt b/doc/src/Speed_gpu.txt index 3ae4639dc2391b492410a450c8f9b3ad56402684..bddefc50314d6d73879337bf84bb1a79238888bf 100644 --- a/doc/src/Speed_gpu.txt +++ b/doc/src/Speed_gpu.txt @@ -9,17 +9,17 @@ Documentation"_ld - "LAMMPS Commands"_lc :c GPU package :h3 -The GPU package was developed by Mike Brown at ORNL and his -collaborators, particularly Trung Nguyen (ORNL). It provides GPU -versions of many pair styles, including the 3-body Stillinger-Weber -pair style, and for "kspace_style pppm"_kspace_style.html for -long-range Coulombics. It has the following general features: +The GPU package was developed by Mike Brown while at SNL and ORNL +and his collaborators, particularly Trung Nguyen (now at Northwestern). +It provides GPU versions of many pair styles and for parts of the +"kspace_style pppm"_kspace_style.html for long-range Coulombics. +It has the following general features: It is designed to exploit common GPU hardware configurations where one or more GPUs are coupled to many cores of one or more multi-core CPUs, e.g. within a node of a parallel machine. :ulb,l -Atom-based data (e.g. coordinates, forces) moves back-and-forth +Atom-based data (e.g. coordinates, forces) are moved back-and-forth between the CPU(s) and GPU every timestep. :l Neighbor lists can be built on the CPU or on the GPU :l @@ -28,8 +28,8 @@ The charge assignment and force interpolation portions of PPPM can be run on the GPU. The FFT portion, which requires MPI communication between processors, runs on the CPU. :l -Asynchronous force computations can be performed simultaneously on the -CPU(s) and GPU. :l +Force computations of different style (pair vs. bond/angle/dihedral/improper) +can be performed concurrently on the GPU and CPU(s), respectively. :l It allows for GPU computations to be performed in single or double precision, or in mixed-mode precision, where pairwise forces are @@ -39,21 +39,32 @@ force vectors. :l LAMMPS-specific code is in the GPU package. It makes calls to a generic GPU library in the lib/gpu directory. This library provides NVIDIA support as well as more general OpenCL support, so that the -same functionality can eventually be supported on a variety of GPU -hardware. :l +same functionality is supported on a variety of hardware. :l :ule [Required hardware/software:] -To use this package, you currently need to have an NVIDIA GPU and -install the NVIDIA CUDA software on your system: - -Check if you have an NVIDIA GPU: cat -/proc/driver/nvidia/gpus/0/information Go to -http://www.nvidia.com/object/cuda_get.html Install a driver and -toolkit appropriate for your system (SDK is not necessary) Run -lammps/lib/gpu/nvc_get_devices (after building the GPU library, see -below) to list supported devices and properties :ul +To compile and use this package in CUDA mode, you currently need +to have an NVIDIA GPU and install the corresponding NVIDIA CUDA +toolkit software on your system (this is primarily tested on Linux +and completely unsupported on Windows): + +Check if you have an NVIDIA GPU: cat /proc/driver/nvidia/gpus/*/information :ulb,l +Go to http://www.nvidia.com/object/cuda_get.html :l +Install a driver and toolkit appropriate for your system (SDK is not necessary) :l +Run lammps/lib/gpu/nvc_get_devices (after building the GPU library, see below) to +list supported devices and properties :ule,l + +To compile and use this package in OpenCL mode, you currently need +to have the OpenCL headers and the (vendor neutral) OpenCL library installed. +In OpenCL mode, the acceleration depends on having an "OpenCL Installable Client +Driver (ICD)"_https://www.khronos.org/news/permalink/opencl-installable-client-driver-icd-loader +installed. There can be multiple of them for the same or different hardware +(GPUs, CPUs, Accelerators) installed at the same time. OpenCL refers to those +as 'platforms'. The GPU library will select the [first] suitable platform, +but this can be overridden using the device option of the "package"_package.html +command. run lammps/lib/gpu/ocl_get_devices to get a list of available +platforms and devices with a suitable ICD available. [Building LAMMPS with the GPU package:] @@ -120,7 +131,10 @@ GPUs/node to use, as well as other options. The performance of a GPU versus a multi-core CPU is a function of your hardware, which pair style is used, the number of atoms/GPU, and the -precision used on the GPU (double, single, mixed). +precision used on the GPU (double, single, mixed). Using the GPU package +in OpenCL mode on CPUs (which uses vectorization and multithreading) is +usually resulting in inferior performance compared to using LAMMPS' native +threading and vectorization support in the USER-OMP and USER-INTEL packages. See the "Benchmark page"_http://lammps.sandia.gov/bench.html of the LAMMPS web site for performance of the GPU package on various @@ -146,7 +160,7 @@ The "package gpu"_package.html command has several options for tuning performance. Neighbor lists can be built on the GPU or CPU. Force calculations can be dynamically balanced across the CPU cores and GPUs. GPU-specific settings can be made which can be optimized -for different hardware. See the "packakge"_package.html command +for different hardware. See the "package"_package.html command doc page for details. :l As described by the "package gpu"_package.html command, GPU diff --git a/doc/src/Speed_intel.txt b/doc/src/Speed_intel.txt index ef876a7d42108a3ae8aad4f6c2f65670f65e0223..bf078fb57652b747c99b17d12d4f441618e58d24 100644 --- a/doc/src/Speed_intel.txt +++ b/doc/src/Speed_intel.txt @@ -68,7 +68,7 @@ In most molecular dynamics software, parallelization parameters to changing the order of operations with finite-precision calculations. The USER-INTEL package is deterministic. This means that the results should be reproducible from run to run with the -{same} parallel configurations and when using determinstic +{same} parallel configurations and when using deterministic libraries or library settings (MPI, OpenMP, FFT). However, there are differences in the USER-INTEL package that can change the order of operations compared to LAMMPS without acceleration: @@ -400,7 +400,7 @@ within the input script to automatically append the "omp" suffix to styles when USER-INTEL styles are not available. NOTE: For simulations on higher node counts, add "processors * * * -grid numa"_processors.html" to the beginning of the input script for +grid numa"_processors.html to the beginning of the input script for better scalability. When running on many nodes, performance might be better when using diff --git a/doc/src/Speed_kokkos.txt b/doc/src/Speed_kokkos.txt index eb787df5d6ac8a1e97136453a8eda62f754bdc0b..f74c9c9ed77de96e6cc619499453e0b6db0048f4 100644 --- a/doc/src/Speed_kokkos.txt +++ b/doc/src/Speed_kokkos.txt @@ -93,12 +93,12 @@ The "t Nt" option specifies how many OpenMP threads per MPI task to use with a node. The default is Nt = 1, which is MPI-only mode. Note that the product of MPI tasks * OpenMP threads/task should not exceed the physical number of cores (on a node), otherwise performance will -suffer. If hyperthreading is enabled, then the product of MPI tasks * -OpenMP threads/task should not exceed the physical number of cores * -hardware threads. The "-k on" switch also issues a "package kokkos" -command (with no additional arguments) which sets various KOKKOS -options to default values, as discussed on the "package"_package.html -command doc page. +suffer. If Hyper-Threading (HT) is enabled, then the product of MPI +tasks * OpenMP threads/task should not exceed the physical number of +cores * hardware threads. The "-k on" switch also issues a +"package kokkos" command (with no additional arguments) which sets +various KOKKOS options to default values, as discussed on the +"package"_package.html command doc page. The "-sf kk" "command-line switch"_Run_options.html will automatically append the "/kk" suffix to styles that support it. In this manner no @@ -106,6 +106,11 @@ modification to the input script is needed. Alternatively, one can run with the KOKKOS package by editing the input script as described below. +NOTE: When using a single OpenMP thread, the Kokkos Serial backend (i.e. +Makefile.kokkos_mpi_only) will give better performance than the OpenMP +backend (i.e. Makefile.kokkos_omp) because some of the overhead to make +the code thread-safe is removed. + NOTE: The default for the "package kokkos"_package.html command is to use "full" neighbor lists and set the Newton flag to "off" for both pairwise and bonded interactions. However, when running on CPUs, it @@ -122,6 +127,22 @@ mpirun -np 16 lmp_kokkos_mpi_only -k on -sf kk -pk kokkos newton on neigh half c If the "newton"_newton.html command is used in the input script, it can also override the Newton flag defaults. +For half neighbor lists and OpenMP, the KOKKOS package uses data +duplication (i.e. thread-private arrays) by default to avoid +thread-level write conflicts in the force arrays (and other data +structures as necessary). Data duplication is typically fastest for +small numbers of threads (i.e. 8 or less) but does increase memory +footprint and is not scalable to large numbers of threads. An +alternative to data duplication is to use thread-level atomics, which +don't require duplication. The use of atomics can be forced by compiling +with the "-DLMP_KOKKOS_USE_ATOMICS" compile switch. Most but not all +Kokkos-enabled pair_styles support data duplication. Alternatively, full +neighbor lists avoid the need for duplication or atomics but require +more compute operations per atom. When using the Kokkos Serial backend +or the OpenMP backend with a single thread, no duplication or atomics are +used. For CUDA and half neighbor lists, the KOKKOS package always uses +atomics. + [Core and Thread Affinity:] When using multi-threading, it is important for performance to bind @@ -149,7 +170,7 @@ Intel Knight's Landing (KNL) Xeon Phi: KNL Intel Phi chips have 68 physical cores. Typically 1 to 4 cores are reserved for the OS, and only 64 or 66 cores are used. Each core has 4 -hyperthreads,so there are effectively N = 256 (4*64) or N = 264 (4*66) +Hyper-Threads,so there are effectively N = 256 (4*64) or N = 264 (4*66) cores to run on. The product of MPI tasks * OpenMP threads/task should not exceed this limit, otherwise performance will suffer. Note that with the KOKKOS package you do not need to specify how many KNLs there @@ -228,7 +249,7 @@ for details and default settings. Experimenting with its options can provide a speed-up for specific calculations. For example: mpirun -np 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -pk kokkos binsize 2.8 -in in.lj # Set binsize = neighbor ghost cutoff -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 neighborlist, set binsize = neighbor ghost cutoff :pre +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 :pre NOTE: For good performance of the KOKKOS package on GPUs, you must have Kepler generation GPUs (or later). The Kokkos library exploits diff --git a/doc/src/Speed_measure.txt b/doc/src/Speed_measure.txt index 647ff71e36593f9a642c22360e74c36752e43e7d..dd12685dc547a4115229d68409ba0d6c544fd323 100644 --- a/doc/src/Speed_measure.txt +++ b/doc/src/Speed_measure.txt @@ -50,6 +50,6 @@ inaccurate relative timing data, because processors have to wait when communication occurs for other processors to catch up. Thus the reported times for "Communication" or "Other" may be higher than they really are, due to load-imbalance. If this is an issue, you can -uncomment the MPI_Barrier() lines in src/timer.cpp, and recompile +uncomment the MPI_Barrier() lines in src/timer.cpp, and re-compile LAMMPS, to obtain synchronized timings. diff --git a/doc/src/Speed_omp.txt b/doc/src/Speed_omp.txt index 0abf54430ef042de4e04080cd741332cf5a7b85f..238909d1b47c1711562687b79f6f402a618c23e5 100644 --- a/doc/src/Speed_omp.txt +++ b/doc/src/Speed_omp.txt @@ -29,7 +29,7 @@ instructions. [Run with the USER-OMP package from the command line:] -These example asume one or more 16-core nodes. +These examples assume one or more 16-core nodes. env OMP_NUM_THREADS=16 lmp_omp -sf omp -in in.script # 1 MPI task, 16 threads according to OMP_NUM_THREADS lmp_mpi -sf omp -in in.script # 1 MPI task, no threads, optimized kernels diff --git a/doc/src/Speed_packages.txt b/doc/src/Speed_packages.txt index 6c837885cd4dd5272e9b7925d84aa01ee8f9ab79..4c87091e7e20c675413c605738ec776813b52b9b 100644 --- a/doc/src/Speed_packages.txt +++ b/doc/src/Speed_packages.txt @@ -72,7 +72,7 @@ Lennard-Jones "pair_style lj/cut"_pair_lj.html: "pair_style lj/cut/opt"_pair_lj.html :ul To see what accelerate styles are currently available for a particular -style, find the style name in the "Commands_all"_Commands_all.html +style, find the style name in the "Commands_all"_lc style pages (fix,compute,pair,etc) and see what suffixes are listed (g,i,k,o,t) with it. The doc pages for individual commands (e.g. "pair lj/cut"_pair_lj.html or "fix nve"_fix_nve.html) also list diff --git a/doc/src/USER/atc/man_add_molecule.html b/doc/src/USER/atc/man_add_molecule.html index 8d9625e1bd0e926742f0283c5229880681f89431..4e7810aa615c202f1c94158517552a8ec47d7aa5 100644 --- a/doc/src/USER/atc/man_add_molecule.html +++ b/doc/src/USER/atc/man_add_molecule.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_add_species.html b/doc/src/USER/atc/man_add_species.html index 9beded1b164d22c57f5800d62d258bf0867e9999..a990ab626fbc62322b0c63cf346066298de3cf98 100644 --- a/doc/src/USER/atc/man_add_species.html +++ b/doc/src/USER/atc/man_add_species.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_atom_element_map.html b/doc/src/USER/atc/man_atom_element_map.html index 6725170928a49b0887e1e09e3fc1634b94666773..a5707d280e831c83ab93de07a2b9e2476cba1894 100644 --- a/doc/src/USER/atc/man_atom_element_map.html +++ b/doc/src/USER/atc/man_atom_element_map.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_atom_weight.html b/doc/src/USER/atc/man_atom_weight.html index 28bc90fa01c053c99983a594100b086ddd6b08a5..350ab13b92ad1e47baa672fed6448cfa9e4c55f6 100644 --- a/doc/src/USER/atc/man_atom_weight.html +++ b/doc/src/USER/atc/man_atom_weight.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_atomic_charge.html b/doc/src/USER/atc/man_atomic_charge.html index ef787f53acc2632e066aaf14766b5df0ac350706..17e854a37f5e0472632918537b766ef5ae796be5 100644 --- a/doc/src/USER/atc/man_atomic_charge.html +++ b/doc/src/USER/atc/man_atomic_charge.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_boundary.html b/doc/src/USER/atc/man_boundary.html index 61596d3b31899ea0a65cdd4332753b61b3436eeb..8dcf328dd3ba8df57c87b5c258314bc681da6980 100644 --- a/doc/src/USER/atc/man_boundary.html +++ b/doc/src/USER/atc/man_boundary.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_boundary_dynamics.html b/doc/src/USER/atc/man_boundary_dynamics.html index 40b82f3f6113ba5b21416776a4927fc2f05de3de..335ff2d20957f62def15c506845d9601e0035548 100644 --- a/doc/src/USER/atc/man_boundary_dynamics.html +++ b/doc/src/USER/atc/man_boundary_dynamics.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_boundary_faceset.html b/doc/src/USER/atc/man_boundary_faceset.html index 7eb950f78e54c7dfd17f4f7121332a592265f236..6c2fb8494028f4934a9af203c6f98806cd385c8a 100644 --- a/doc/src/USER/atc/man_boundary_faceset.html +++ b/doc/src/USER/atc/man_boundary_faceset.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_boundary_integral.html b/doc/src/USER/atc/man_boundary_integral.html index 0663dba176e57066ea8b878f5bf3b7b2e1280889..c4b0d4865e75e5b518c0f42285378f568de4a8e1 100644 --- a/doc/src/USER/atc/man_boundary_integral.html +++ b/doc/src/USER/atc/man_boundary_integral.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_consistent_fe_initialization.html b/doc/src/USER/atc/man_consistent_fe_initialization.html index a731b09116dd2a9e7fb677b5fcc12b433023bdfa..baa306a1c80afc280f2aa8d31551de329726fb8e 100644 --- a/doc/src/USER/atc/man_consistent_fe_initialization.html +++ b/doc/src/USER/atc/man_consistent_fe_initialization.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_contour_integral.html b/doc/src/USER/atc/man_contour_integral.html index 690f0fcc986e9670071c54d30c5cdc70a1756601..16f6d9abadbb15176737ff7d6950ae7d8f0e81fa 100644 --- a/doc/src/USER/atc/man_contour_integral.html +++ b/doc/src/USER/atc/man_contour_integral.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_control.html b/doc/src/USER/atc/man_control.html index 900952ba0b39735f31d74d8a44b6c6fd80067667..e94a9a52ef84db97b7c5598182f97e249eb30379 100644 --- a/doc/src/USER/atc/man_control.html +++ b/doc/src/USER/atc/man_control.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_control_momentum.html b/doc/src/USER/atc/man_control_momentum.html index 8f4f48659561834285e915632ec4dd8802cb1f1a..e3074eae8f14acf35018fe1f357d42995ecf1066 100644 --- a/doc/src/USER/atc/man_control_momentum.html +++ b/doc/src/USER/atc/man_control_momentum.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_control_thermal.html b/doc/src/USER/atc/man_control_thermal.html index eab186f71502d82b1667487b8b6e9c621e887e57..8d32f1c4f9aa78d407540e3872405fd724d9b73e 100644 --- a/doc/src/USER/atc/man_control_thermal.html +++ b/doc/src/USER/atc/man_control_thermal.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_control_thermal_correction_max_iterations.html b/doc/src/USER/atc/man_control_thermal_correction_max_iterations.html index a337a495e0e3eaf2cedb69441267654cdb68316a..d28ec334f5ac84e08570760ddf0bc87896cb4691 100644 --- a/doc/src/USER/atc/man_control_thermal_correction_max_iterations.html +++ b/doc/src/USER/atc/man_control_thermal_correction_max_iterations.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_decomposition.html b/doc/src/USER/atc/man_decomposition.html index d54a2010342e783243cc0ab90f8010515c23a892..98eedafa6cfc7295ae980e6a8e11268ec75c7a3d 100644 --- a/doc/src/USER/atc/man_decomposition.html +++ b/doc/src/USER/atc/man_decomposition.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_electron_integration.html b/doc/src/USER/atc/man_electron_integration.html index ab454c16d271fa0e9ed02e186601f9c2cdc0259e..7cf40f6813e318e57df6fca20dfffc3669839994 100644 --- a/doc/src/USER/atc/man_electron_integration.html +++ b/doc/src/USER/atc/man_electron_integration.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_equilibrium_start.html b/doc/src/USER/atc/man_equilibrium_start.html index d01253c4b3e574981cc3d2e32159a4639bd7bcd3..8c81ce5925c0bbb504a9399ef5680f0e78220141 100644 --- a/doc/src/USER/atc/man_equilibrium_start.html +++ b/doc/src/USER/atc/man_equilibrium_start.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_extrinsic_exchange.html b/doc/src/USER/atc/man_extrinsic_exchange.html index 4f1f5962d9f3956bd1be3bf7a41c6a028769b07e..f4d1b01e880cb17a8ee9174090c68b029156dc5d 100644 --- a/doc/src/USER/atc/man_extrinsic_exchange.html +++ b/doc/src/USER/atc/man_extrinsic_exchange.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_fe_md_boundary.html b/doc/src/USER/atc/man_fe_md_boundary.html index e517dd4855d86a90fe95517bf3bb07a0c99425f1..e39ddd3cec063f57b0e80476dc18b66daadff2b3 100644 --- a/doc/src/USER/atc/man_fe_md_boundary.html +++ b/doc/src/USER/atc/man_fe_md_boundary.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_fem_mesh.html b/doc/src/USER/atc/man_fem_mesh.html index b8ba584816bc2b2fce453df4f12f2a3589378feb..485b8c95a0f24f91fa5c44bc69cfbe9c1676a940 100644 --- a/doc/src/USER/atc/man_fem_mesh.html +++ b/doc/src/USER/atc/man_fem_mesh.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_filter_scale.html b/doc/src/USER/atc/man_filter_scale.html index 7a871f5c8141c7c8122919f0c2ea8b5abdfa27ca..e2190dea21b38aad2feca6dedd6f684117025a3d 100644 --- a/doc/src/USER/atc/man_filter_scale.html +++ b/doc/src/USER/atc/man_filter_scale.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_filter_type.html b/doc/src/USER/atc/man_filter_type.html index 2711d128e9f945be4e7c65ad8e18be43b2b78d08..0928139d7dabdd499826726274ce6a5f8a556d91 100644 --- a/doc/src/USER/atc/man_filter_type.html +++ b/doc/src/USER/atc/man_filter_type.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_fix_atc.html b/doc/src/USER/atc/man_fix_atc.html index 7cc6cfea5bad5089cfbddab53036c75ed2fedd0f..f6f7b43a38b7c45d48fb7748e8e46d499ba81119 100644 --- a/doc/src/USER/atc/man_fix_atc.html +++ b/doc/src/USER/atc/man_fix_atc.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_fix_flux.html b/doc/src/USER/atc/man_fix_flux.html index 42815def6bca896ee183505fb869a327908b5853..31bd5619a37ba7aa7db08768f4810a3924cd6524 100644 --- a/doc/src/USER/atc/man_fix_flux.html +++ b/doc/src/USER/atc/man_fix_flux.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_fix_nodes.html b/doc/src/USER/atc/man_fix_nodes.html index 03cf86eb9220720940f1fae44257a3df93addd12..2245e32607ceb217c23e4cf35642844be2a5aec0 100644 --- a/doc/src/USER/atc/man_fix_nodes.html +++ b/doc/src/USER/atc/man_fix_nodes.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_hardy_computes.html b/doc/src/USER/atc/man_hardy_computes.html index b45b7dfb0101a117ca58cc7faf78b1eec80a3a06..ec2dc3ccb915f280b1370e49b862d0e5988dbecc 100644 --- a/doc/src/USER/atc/man_hardy_computes.html +++ b/doc/src/USER/atc/man_hardy_computes.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_hardy_fields.html b/doc/src/USER/atc/man_hardy_fields.html index 17903aabd0d913d0d0bb78b9998c7c4105df4fba..483e5be6bdf560fb2dfdbc1a28c7069a3b76eda8 100644 --- a/doc/src/USER/atc/man_hardy_fields.html +++ b/doc/src/USER/atc/man_hardy_fields.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_hardy_gradients.html b/doc/src/USER/atc/man_hardy_gradients.html index 00935f0ae25968b2c633a068899e03917241edaf..1874ad152e030bbc26afce4f96198bcb26697d98 100644 --- a/doc/src/USER/atc/man_hardy_gradients.html +++ b/doc/src/USER/atc/man_hardy_gradients.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_hardy_kernel.html b/doc/src/USER/atc/man_hardy_kernel.html index f97037784c73349cab27f1df5e1145ede359b7ce..620b9b1d365bd5a4ab11ed42885172136561b2a4 100644 --- a/doc/src/USER/atc/man_hardy_kernel.html +++ b/doc/src/USER/atc/man_hardy_kernel.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_hardy_on_the_fly.html b/doc/src/USER/atc/man_hardy_on_the_fly.html index 79c1006c973eb515a8416bbfc47399f86e03621e..04d24ff02958ce187c81ba23ff9c1cc488bda786 100644 --- a/doc/src/USER/atc/man_hardy_on_the_fly.html +++ b/doc/src/USER/atc/man_hardy_on_the_fly.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_hardy_rates.html b/doc/src/USER/atc/man_hardy_rates.html index e51cbc9873a03ed584d3d4fde162cdc738f2b0c9..337a92517eb799c4b9589f9eefa2a51bc8a09acb 100644 --- a/doc/src/USER/atc/man_hardy_rates.html +++ b/doc/src/USER/atc/man_hardy_rates.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_initial.html b/doc/src/USER/atc/man_initial.html index 41ae06eb8c42f7c2afba2ca1362c9ef8361ada52..c8348c45ed7c9ec1a23905059868741c068ac4af 100644 --- a/doc/src/USER/atc/man_initial.html +++ b/doc/src/USER/atc/man_initial.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_internal_atom_integrate.html b/doc/src/USER/atc/man_internal_atom_integrate.html index dfa19474e5be9e6c314ca23eafa58da8ee50439b..f76607cc914214f73884c0385bb0490c6c0f6818 100644 --- a/doc/src/USER/atc/man_internal_atom_integrate.html +++ b/doc/src/USER/atc/man_internal_atom_integrate.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_internal_element_set.html b/doc/src/USER/atc/man_internal_element_set.html index 849e8f0671369f9c22f05ccd6190cbddf15e2746..a5d893f2a3095b52d62150990425b13b9fa94937 100644 --- a/doc/src/USER/atc/man_internal_element_set.html +++ b/doc/src/USER/atc/man_internal_element_set.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_internal_quadrature.html b/doc/src/USER/atc/man_internal_quadrature.html index 7f10e1707679d2c7027ee0166369aebc4a6654d8..6af543cbaea9991f18986fe46f7c0b979491bb2d 100644 --- a/doc/src/USER/atc/man_internal_quadrature.html +++ b/doc/src/USER/atc/man_internal_quadrature.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_kernel_function.html b/doc/src/USER/atc/man_kernel_function.html index 92db590198a43fc753c5e8becf64e465021f0f59..cb02c05c23c37f9189b1f492582ad5a4b22b7841 100644 --- a/doc/src/USER/atc/man_kernel_function.html +++ b/doc/src/USER/atc/man_kernel_function.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_localized_lambda.html b/doc/src/USER/atc/man_localized_lambda.html index fd845d0a712f1c6d6d49108d7a8a3fcb174e098b..88442d63a185f4578ef1c9eb6397a35de765df67 100644 --- a/doc/src/USER/atc/man_localized_lambda.html +++ b/doc/src/USER/atc/man_localized_lambda.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_lumped_lambda_solve.html b/doc/src/USER/atc/man_lumped_lambda_solve.html index ade780ddee0faf5bc11c18be9b79860db2ce4aa5..89aabebd3c75d62353721f210c54a0699684dee8 100644 --- a/doc/src/USER/atc/man_lumped_lambda_solve.html +++ b/doc/src/USER/atc/man_lumped_lambda_solve.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mask_direction.html b/doc/src/USER/atc/man_mask_direction.html index 31c18b4f1f961a1d77b321a1775ba4f818f40b59..ea5a6e357ba526125162f3a08668bdc36f13fec3 100644 --- a/doc/src/USER/atc/man_mask_direction.html +++ b/doc/src/USER/atc/man_mask_direction.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mass_matrix.html b/doc/src/USER/atc/man_mass_matrix.html index 140b745f09b72e0c208e6d9ce49e084c4f2ea556..fd744e5bbf38572a8b0d05eb9d4fc38f6938027f 100644 --- a/doc/src/USER/atc/man_mass_matrix.html +++ b/doc/src/USER/atc/man_mass_matrix.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_material.html b/doc/src/USER/atc/man_material.html index c31ab4938d6c5ad6befe8ae71d6540dce2a7d9b8..1646abc671742d1055e70e04081ff0834f189e11 100644 --- a/doc/src/USER/atc/man_material.html +++ b/doc/src/USER/atc/man_material.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mesh_add_to_nodeset.html b/doc/src/USER/atc/man_mesh_add_to_nodeset.html index 25a5c2cdae60c930794721d86bd10b933566dfa2..c4976f699d1cc2c7c080d59adfb30e5bd052788c 100644 --- a/doc/src/USER/atc/man_mesh_add_to_nodeset.html +++ b/doc/src/USER/atc/man_mesh_add_to_nodeset.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mesh_create.html b/doc/src/USER/atc/man_mesh_create.html index a7ee112614fb93652bb14dbf4707907607a84460..98989bd015a754444f63576631163f79f37ca410 100644 --- a/doc/src/USER/atc/man_mesh_create.html +++ b/doc/src/USER/atc/man_mesh_create.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mesh_create_elementset.html b/doc/src/USER/atc/man_mesh_create_elementset.html index 2ac383a974bc37de6749eb0b12e1de53c81eda8f..735d462b73cd17422564ac9af160d5a770389b76 100644 --- a/doc/src/USER/atc/man_mesh_create_elementset.html +++ b/doc/src/USER/atc/man_mesh_create_elementset.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mesh_create_faceset_box.html b/doc/src/USER/atc/man_mesh_create_faceset_box.html index e62a827a783333c6aa596d1e28efdac434c16704..0ae68435e58ff6830a5eac9d674569f1a366162f 100644 --- a/doc/src/USER/atc/man_mesh_create_faceset_box.html +++ b/doc/src/USER/atc/man_mesh_create_faceset_box.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mesh_create_faceset_plane.html b/doc/src/USER/atc/man_mesh_create_faceset_plane.html index b1969cb79dd899194e1b797e25eb56343f319236..cd78816bae757aa604d8abbc474808b1281b12dc 100644 --- a/doc/src/USER/atc/man_mesh_create_faceset_plane.html +++ b/doc/src/USER/atc/man_mesh_create_faceset_plane.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mesh_create_nodeset.html b/doc/src/USER/atc/man_mesh_create_nodeset.html index 39bfffd1198c6715bfa5b9e04e5ca1716519e6a5..0e3624cf8a05225744a8f2e72d2b09c56309b515 100644 --- a/doc/src/USER/atc/man_mesh_create_nodeset.html +++ b/doc/src/USER/atc/man_mesh_create_nodeset.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mesh_delete_elements.html b/doc/src/USER/atc/man_mesh_delete_elements.html index 60a2fe59a1095934762d4c34b845b560e00a3175..e39cc54d416e9c1097a8535e84a65d8775460909 100644 --- a/doc/src/USER/atc/man_mesh_delete_elements.html +++ b/doc/src/USER/atc/man_mesh_delete_elements.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mesh_nodeset_to_elementset.html b/doc/src/USER/atc/man_mesh_nodeset_to_elementset.html index d05429ebabbf811cd7fe5929aa7fdd3c205fd9ec..66b55a48fb6f0574f12922c584b1df6eba7d1a26 100644 --- a/doc/src/USER/atc/man_mesh_nodeset_to_elementset.html +++ b/doc/src/USER/atc/man_mesh_nodeset_to_elementset.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mesh_output.html b/doc/src/USER/atc/man_mesh_output.html index f768a29c41de56432542fa5febb8cc96782601af..1d2983afff93589b176e15f8a3bc9bb01d7579c7 100644 --- a/doc/src/USER/atc/man_mesh_output.html +++ b/doc/src/USER/atc/man_mesh_output.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mesh_quadrature.html b/doc/src/USER/atc/man_mesh_quadrature.html index 46487fdce7e7be93fed9d32ca8d09c66c1467298..821e50e4cfc328ce6ab6b2c0a4843675d5ccfec7 100644 --- a/doc/src/USER/atc/man_mesh_quadrature.html +++ b/doc/src/USER/atc/man_mesh_quadrature.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mesh_read.html b/doc/src/USER/atc/man_mesh_read.html index e0571ccf88eef86cb6dbc8e336591df345d44bf8..315180e1db5096a889f1dffa2791414723249e3d 100644 --- a/doc/src/USER/atc/man_mesh_read.html +++ b/doc/src/USER/atc/man_mesh_read.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_mesh_write.html b/doc/src/USER/atc/man_mesh_write.html index 756cf4992258b507e87a0f199bae5df16407398a..f709c02a8430b6535f5d23722672b308e102cd20 100644 --- a/doc/src/USER/atc/man_mesh_write.html +++ b/doc/src/USER/atc/man_mesh_write.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_momentum_time_integration.html b/doc/src/USER/atc/man_momentum_time_integration.html index 60fbfcd888555ae5fb7c79ea748455c7e8e9704c..ee0505847c9878d79a531c2f1cf30ad9bdeec22a 100644 --- a/doc/src/USER/atc/man_momentum_time_integration.html +++ b/doc/src/USER/atc/man_momentum_time_integration.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_output.html b/doc/src/USER/atc/man_output.html index aec1d5d55ae33a6713dde6ab621c4c132ad108d4..d0a08fa0da111c62039c6c1726cc58921bc1e928 100644 --- a/doc/src/USER/atc/man_output.html +++ b/doc/src/USER/atc/man_output.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_output_elementset.html b/doc/src/USER/atc/man_output_elementset.html index 54079027c5053a2ebe3d9c2b387b966a1287fa56..18afe0aa973bc5511f5c093a3f124e8662740ed3 100644 --- a/doc/src/USER/atc/man_output_elementset.html +++ b/doc/src/USER/atc/man_output_elementset.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_output_nodeset.html b/doc/src/USER/atc/man_output_nodeset.html index 2fc6e0268169fb3f0f00308ecff8160882f8bba6..7906c5fc52f3fd9f48c34fbd274aa0f2813346ac 100644 --- a/doc/src/USER/atc/man_output_nodeset.html +++ b/doc/src/USER/atc/man_output_nodeset.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_pair_interactions.html b/doc/src/USER/atc/man_pair_interactions.html index 2cb2cb6113383c34effad09f654a8f41d532b1cd..3ec2eecc60504e2c772c49501f381a95e1aa5b62 100644 --- a/doc/src/USER/atc/man_pair_interactions.html +++ b/doc/src/USER/atc/man_pair_interactions.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_poisson_solver.html b/doc/src/USER/atc/man_poisson_solver.html index b6fabbb27c1613cf8cda041d04560d9c4458b1b3..3e22a51f3e9e4eada56e1fe337018dec72e863d5 100644 --- a/doc/src/USER/atc/man_poisson_solver.html +++ b/doc/src/USER/atc/man_poisson_solver.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_read_restart.html b/doc/src/USER/atc/man_read_restart.html index 5fc21282f68860c6726887df2e9916c9b8bfcfff..d13151a12ed3c01ed2d2504f53e2fbd219173a49 100644 --- a/doc/src/USER/atc/man_read_restart.html +++ b/doc/src/USER/atc/man_read_restart.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_remove_molecule.html b/doc/src/USER/atc/man_remove_molecule.html index e6ad418de6871e7b4dab85dc02eede170bbf048d..54e4e3419fbcf126d22287759c25d45cdb523443 100644 --- a/doc/src/USER/atc/man_remove_molecule.html +++ b/doc/src/USER/atc/man_remove_molecule.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_remove_source.html b/doc/src/USER/atc/man_remove_source.html index acea7a56074df6c0ed151296fcd1d1048abc1426..c15e0ca46ddcbdb4192d709990f0e3979572e712 100644 --- a/doc/src/USER/atc/man_remove_source.html +++ b/doc/src/USER/atc/man_remove_source.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_remove_species.html b/doc/src/USER/atc/man_remove_species.html index 561364518fe2033590626709f6fd1ac72b512c77..ee063ce57f524120279df2f36071986b33b3a813 100644 --- a/doc/src/USER/atc/man_remove_species.html +++ b/doc/src/USER/atc/man_remove_species.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_reset_atomic_reference_positions.html b/doc/src/USER/atc/man_reset_atomic_reference_positions.html index 88e6748001c44716880a1b8a71b072d343e33d60..3c438610540faeb48a021a943e1d93628cac7358 100644 --- a/doc/src/USER/atc/man_reset_atomic_reference_positions.html +++ b/doc/src/USER/atc/man_reset_atomic_reference_positions.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_reset_time.html b/doc/src/USER/atc/man_reset_time.html index a6429bf6d6c8b040f9171787f779ef49a9333768..9607848e1a490c18addf77da883cb5568f65abae 100644 --- a/doc/src/USER/atc/man_reset_time.html +++ b/doc/src/USER/atc/man_reset_time.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_sample_frequency.html b/doc/src/USER/atc/man_sample_frequency.html index 4e48c4bb299c854bb86f26adcb83d1a771725a3e..9a9a8e3a02fbeb8d2cbee68a2b057d759f30ff8a 100644 --- a/doc/src/USER/atc/man_sample_frequency.html +++ b/doc/src/USER/atc/man_sample_frequency.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_set.html b/doc/src/USER/atc/man_set.html index cf775c9b36d4e9a43abab0d2716c0a6d7c70a29d..55ad8d952b8ae5fb679ba08c0bd83550be7870df 100644 --- a/doc/src/USER/atc/man_set.html +++ b/doc/src/USER/atc/man_set.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_source.html b/doc/src/USER/atc/man_source.html index c7239f2c412db0ac97ec56462ce96c93d1726c7e..78fb1652ebc05a9a3296c6faee275c74b3230c3a 100644 --- a/doc/src/USER/atc/man_source.html +++ b/doc/src/USER/atc/man_source.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_source_integration.html b/doc/src/USER/atc/man_source_integration.html index 3f43340af827c5c61162078843dd7b6af7116ff9..3b261b781014715c1346623fb5d6cef6c0b86dee 100644 --- a/doc/src/USER/atc/man_source_integration.html +++ b/doc/src/USER/atc/man_source_integration.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_temperature_definition.html b/doc/src/USER/atc/man_temperature_definition.html index a07ba29cab6f1780d61dfbc22bd0f5f50f3973b8..c317c06c00cf0aca03cd5eefaf212505cf34a616 100644 --- a/doc/src/USER/atc/man_temperature_definition.html +++ b/doc/src/USER/atc/man_temperature_definition.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_thermal_time_integration.html b/doc/src/USER/atc/man_thermal_time_integration.html index fe293138be2a7206963a5c2339be637da3542e6e..830591921e7dbd63cc73d1dc5f4ebb17c65c2d95 100644 --- a/doc/src/USER/atc/man_thermal_time_integration.html +++ b/doc/src/USER/atc/man_thermal_time_integration.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_time_filter.html b/doc/src/USER/atc/man_time_filter.html index 732eaa3a36114c766118a0ab5aadd541e6284ab5..5000fb079d2a0dc5f7ed1a474a8f516d03a3b5f0 100644 --- a/doc/src/USER/atc/man_time_filter.html +++ b/doc/src/USER/atc/man_time_filter.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_track_displacement.html b/doc/src/USER/atc/man_track_displacement.html index f5410816d75a779a6c6ec38c2e8bad1f64ac262f..2c7cf2615018eaf3a4be95be6ee15d0884c1bfd5 100644 --- a/doc/src/USER/atc/man_track_displacement.html +++ b/doc/src/USER/atc/man_track_displacement.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_unfix_flux.html b/doc/src/USER/atc/man_unfix_flux.html index 95e1f4be5a85ea44cb7db7b434a0eb053262b9b4..551896431a06dac1dedb2c7b35a2d03351a36fd4 100644 --- a/doc/src/USER/atc/man_unfix_flux.html +++ b/doc/src/USER/atc/man_unfix_flux.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_unfix_nodes.html b/doc/src/USER/atc/man_unfix_nodes.html index 78495c928a4751e188868ade7b93cbfb6496b04b..4dfd9b3cfc4c8755eeecfb1b2bffb24868564aae 100644 --- a/doc/src/USER/atc/man_unfix_nodes.html +++ b/doc/src/USER/atc/man_unfix_nodes.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_write_atom_weights.html b/doc/src/USER/atc/man_write_atom_weights.html index 8a0e5b62a81bb9488e6bf5e9e6f61dbfc929fef3..1722d74f67fa82dbabc61ea535f98553e4adcef8 100644 --- a/doc/src/USER/atc/man_write_atom_weights.html +++ b/doc/src/USER/atc/man_write_atom_weights.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/USER/atc/man_write_restart.html b/doc/src/USER/atc/man_write_restart.html index 6dca57673bbdabe393ad0fa2512f8c566a1f4374..74c6e2d289feac47f5f83f5a8448ee08115a7ad1 100644 --- a/doc/src/USER/atc/man_write_restart.html +++ b/doc/src/USER/atc/man_write_restart.html @@ -11,7 +11,7 @@ LAMMPS Website     LAMMPS Manual     USER-AtC Manual     - Commands + Commands
diff --git a/doc/src/angle_sdk.txt b/doc/src/angle_sdk.txt index 4de1a6755d9eebf47045996fdad8b711367d9f6d..22238880fea24e35ae40e055cb8de5a384a426ef 100644 --- a/doc/src/angle_sdk.txt +++ b/doc/src/angle_sdk.txt @@ -7,6 +7,7 @@ :line angle_style sdk command :h3 +angle_style sdk/omp command :h3 [Syntax:] @@ -43,6 +44,30 @@ internally; hence the units of K are in energy/radian^2. The also required {lj/sdk} parameters will be extracted automatically from the pair_style. +:line + +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +functionally the same as the corresponding style without the suffix. +They have been optimized to run faster, depending on your available +hardware, as discussed on the "Speed packages"_Speed_packages.html doc +page. The accelerated styles take the same arguments and should +produce the same results, except for round-off and precision issues. + +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Build +package"_Build_package.html doc page for more info. + +You can specify the accelerated styles explicitly in your input script +by including their suffix, or you can use the "-suffix command-line +switch"_Run_options.html when you invoke LAMMPS, or you can use the +"suffix"_suffix.html command in your input script. + +See the "Speed packages"_Speed_packages.html doc page for more +instructions on how to use the accelerated styles effectively. + +:line + [Restrictions:] This angle style can only be used if LAMMPS was built with the diff --git a/doc/src/atom_modify.txt b/doc/src/atom_modify.txt index 4b4ac3862d102b54ed08cb0b2d8b63f84ec32f89..0f0b241b766c1e5b19b37aedb652b85be57ebbd7 100644 --- a/doc/src/atom_modify.txt +++ b/doc/src/atom_modify.txt @@ -67,7 +67,7 @@ when required. An example are the bond (angle, etc) methods which need to find the local index of an atom with a specific global ID which is a bond (angle, etc) partner. LAMMPS performs this operation efficiently by creating a "map", which is either an {array} or {hash} -table, as descibed below. +table, as described below. When the {map} keyword is not specified in your input script, LAMMPS only creates a map for "atom_styles"_atom_style.html for molecular diff --git a/doc/src/commands_list.txt b/doc/src/commands_list.txt index 62b973e3a4f65bfead97cae22fffa44879516867..db3ef36ddf074cb133d04a95dd5961ae86955e5c 100644 --- a/doc/src/commands_list.txt +++ b/doc/src/commands_list.txt @@ -56,6 +56,7 @@ Commands :h1 lattice log mass + message min_modify min_style minimize @@ -87,6 +88,9 @@ Commands :h1 restart run run_style + server + server_mc + server_md set shell special_bonds diff --git a/doc/src/compute.txt b/doc/src/compute.txt index 7d9e443e7da7455de147ca1531daab58887e65f8..72ea1c193004b132a32af49797e12a58478bdaad 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -173,7 +173,7 @@ There are also additional accelerated compute styles included in the LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. The individual style names on the "Commands compute"_Commands_compute.html doc page are followed by one or more of -(g,i,k,o,t) to indicate which accerlerated styles exist. +(g,i,k,o,t) to indicate which accelerated styles exist. "aggregate/atom"_compute_cluster_atom.html - aggregate ID for each atom "angle/local"_compute_bond_local.html - theta and energy of each angle @@ -183,6 +183,7 @@ compute"_Commands_compute.html doc page are followed by one or more of "bond/local"_compute_bond_local.html - distance and energy of each bond "centro/atom"_compute_centro_atom.html - centro-symmetry parameter for each atom "chunk/atom"_compute_chunk_atom.html - assign chunk IDs to each atom +"chunk/spread/atom"_compute_chunk_spread_atom.html - spreads chunk values to each atom in chunk "cluster/atom"_compute_cluster_atom.html - cluster ID for each atom "cna/atom"_compute_cna_atom.html - common neighbor analysis (CNA) for each atom "com"_compute_com.html - center-of-mass of group of atoms @@ -225,6 +226,7 @@ compute"_Commands_compute.html doc page are followed by one or more of "property/chunk"_compute_property_chunk.html - extract various per-chunk attributes "rdf"_compute_rdf.html - radial distribution function g(r) histogram of group of atoms "reduce"_compute_reduce.html - combine per-atom quantities into a single global value +"reduce/chunk"_compute_reduce_chunk.html - reduce per-atom quantities within each chunk "reduce/region"_compute_reduce.html - same as compute reduce, within a region "rigid/local"_compute_rigid_local.html - extract rigid body attributes "slice"_compute_slice.html - extract values from global vector or array diff --git a/doc/src/compute_ackland_atom.txt b/doc/src/compute_ackland_atom.txt index cda4a36b34d01c83a4977440adc94e747ea090df..46db81eb9e3d366592e3a1a9e254fb3d3f04170a 100644 --- a/doc/src/compute_ackland_atom.txt +++ b/doc/src/compute_ackland_atom.txt @@ -32,7 +32,7 @@ according to the formulation given in "(Ackland)"_#Ackland. Historically, LAMMPS had two, slightly different implementations of the algorithm from the paper. With the {legacy} keyword, it is possible to switch between the pre-2015 ({legacy yes}) and post-2015 -implemention ({legacy no}). The post-2015 variant is the default. +implementation ({legacy no}). The post-2015 variant is the default. In contrast to the "centro-symmetry parameter"_compute_centro_atom.html this method is stable against diff --git a/doc/src/compute_angle_local.txt b/doc/src/compute_angle_local.txt index 3a321965ef71135104bdf12f8dc13111dd515564..8acaec94d5331fb8ea8bd4898e4642333d77cf69 100644 --- a/doc/src/compute_angle_local.txt +++ b/doc/src/compute_angle_local.txt @@ -10,20 +10,27 @@ compute angle/local command :h3 [Syntax:] -compute ID group-ID angle/local value1 value2 ... :pre +compute ID group-ID angle/local value1 value2 ... keyword args ... :pre ID, group-ID are documented in "compute"_compute.html command :ulb,l angle/local = style name of this compute command :l one or more values may be appended :l -value = {theta} or {eng} :l +value = {theta} or {eng} or {v_name} :l {theta} = tabulate angles - {eng} = tabulate angle energies :pre + {eng} = tabulate angle energies + {v_name} = equal-style variable with name (see below) :pre +zero or more keyword/args pairs may be appended :l +keyword = {set} :l + {set} args = theta name + theta = only currently allowed arg + name = name of variable to set with theta :pre :ule [Examples:] compute 1 all angle/local theta -compute 1 all angle/local eng theta :pre +compute 1 all angle/local eng theta +compute 1 all angle/local theta v_cos set theta t :pre [Description:] @@ -36,6 +43,47 @@ The value {theta} is the angle for the 3 atoms in the interaction. The value {eng} is the interaction energy for the angle. +The value {v_name} can be used together with the {set} keyword to +compute a user-specified function of the angle theta. The {name} +specified for the {v_name} value is the name of an "equal-style +variable"_variable.html which should evaluate a formula based on a +variable which will store the angle theta. This other variable must +be an "internal-style variable"_variable.html defined in the input +script; its initial numeric value can be anything. It must be an +internal-style variable, because this command resets its value +directly. The {set} keyword is used to identify the name of this +other variable associated with theta. + +Note that the value of theta for each angle which stored in the +internal variable is in radians, not degrees. + +As an example, these commands can be added to the bench/in.rhodo +script to compute the cosine and cosine^2 of every angle in the system +and output the statistics in various ways: + +variable t internal 0.0 +variable cos equal cos(v_t) +variable cossq equal cos(v_t)*cos(v_t) :pre + +compute 1 all property/local aatom1 aatom2 aatom3 atype +compute 2 all angle/local eng theta v_cos v_cossq set theta t +dump 1 all local 100 tmp.dump c_1[*] c_2[*] :pre + +compute 3 all reduce ave c_2[*] +thermo_style custom step temp press c_3[*] :pre + +fix 10 all ave/histo 10 10 100 -1 1 20 c_2[3] mode vector file tmp.histo :pre + +The "dump local"_dump.html command will output the energy, angle, +cosine(angle), cosine^2(angle) for every angle in the system. The +"thermo_style"_thermo_style.html command will print the average of +those quantities via the "compute reduce"_compute_reduce.html command +with thermo output. And the "fix ave/histo"_fix_ave_histo.html +command will histogram the cosine(angle) values and write them to a +file. + +:line + The local data stored by this command is generated by looping over all the atoms owned on a processor and their angles. An angle will only be included if all 3 atoms in the angle are in the specified compute @@ -65,12 +113,12 @@ dump 1 all local 1000 tmp.dump index c_1\[1\] c_1\[2\] c_1\[3\] c_1\[4\] c_2\[1\ [Output info:] This compute calculates a local vector or local array depending on the -number of keywords. The length of the vector or number of rows in the -array is the number of angles. If a single keyword is specified, a -local vector is produced. If two or more keywords are specified, a +number of values. The length of the vector or number of rows in the +array is the number of angles. If a single value is specified, a +local vector is produced. If two or more values are specified, a local array is produced where the number of columns = the number of -keywords. The vector or array can be accessed by any command that -uses local values from a compute as input. See the "Howto +values. The vector or array can be accessed by any command that uses +local values from a compute as input. See the "Howto output"_Howto_output.html doc page for an overview of LAMMPS output options. diff --git a/doc/src/compute_bond_local.txt b/doc/src/compute_bond_local.txt index c3dc1cc4afe92ae09118e8f56c0e678a380cee71..4afd1aec402e550e5e9f18d13cf597ba09b0104e 100644 --- a/doc/src/compute_bond_local.txt +++ b/doc/src/compute_bond_local.txt @@ -10,12 +10,12 @@ compute bond/local command :h3 [Syntax:] -compute ID group-ID bond/local value1 value2 ... :pre +compute ID group-ID bond/local value1 value2 ... keyword args ... :pre ID, group-ID are documented in "compute"_compute.html command :ulb,l bond/local = style name of this compute command :l one or more values may be appended :l -value = {dist} or {engpot} or {force} or {engvib} or {engrot} or {engtrans} or {omega} or {velvib} :l +value = {dist} or {engpot} or {force} or {engvib} or {engrot} or {engtrans} or {omega} or {velvib} or {v_name} :l {dist} = bond distance {engpot} = bond potential energy {force} = bond force :pre @@ -23,13 +23,22 @@ value = {dist} or {engpot} or {force} or {engvib} or {engrot} or {engtrans} or { {engrot} = bond kinetic energy of rotation {engtrans} = bond kinetic energy of translation {omega} = magnitude of bond angular velocity - {velvib} = vibrational velocity along the bond length :pre + {velvib} = vibrational velocity along the bond length + {v_name} = equal-style variable with name (see below) :pre +zero or more keyword/args pairs may be appended :l +keyword = {set} :l + {set} args = dist name + dist = only currently allowed arg + name = name of variable to set with distance (dist) :pre +:ule + :ule [Examples:] compute 1 all bond/local engpot compute 1 all bond/local dist engpot force :pre +compute 1 all angle/local dist v_distsq set dist d :pre [Description:] @@ -38,6 +47,10 @@ interactions. The number of datums generated, aggregated across all processors, equals the number of bonds in the system, modified by the group parameter as explained below. +All these properties are computed for the pair of atoms in a bond, +whether the 2 atoms represent a simple diatomic molecule, or are part +of some larger molecule. + The value {dist} is the current length of the bond. The value {engpot} is the potential energy for the bond, @@ -79,9 +92,41 @@ two atoms in the bond towards each other. A negative value means the 2 atoms are moving toward each other; a positive value means they are moving apart. -Note that all these properties are computed for the pair of atoms in a -bond, whether the 2 atoms represent a simple diatomic molecule, or are -part of some larger molecule. +The value {v_name} can be used together with the {set} keyword to +compute a user-specified function of the bond distance. The {name} +specified for the {v_name} value is the name of an "equal-style +variable"_variable.html which should evaluate a formula based on a +variable which will store the bond distance. This other variable must +be an "internal-style variable"_variable.html defined in the input +script; its initial numeric value can be anything. It must be an +internal-style variable, because this command resets its value +directly. The {set} keyword is used to identify the name of this +other variable associated with theta. + +As an example, these commands can be added to the bench/in.rhodo +script to compute the distance^2 of every bond in the system and +output the statistics in various ways: + +variable d internal 0.0 +variable dsq equal v_d*v_d :pre + +compute 1 all property/local batom1 batom2 btype +compute 2 all bond/local engpot dist v_dsq set dist d +dump 1 all local 100 tmp.dump c_1[*] c_2[*] :pre + +compute 3 all reduce ave c_2[*] +thermo_style custom step temp press c_3[*] :pre + +fix 10 all ave/histo 10 10 100 0 6 20 c_2[3] mode vector file tmp.histo :pre + +The "dump local"_dump.html command will output the energy, distance, +distance^2 for every bond in the system. The +"thermo_style"_thermo_style.html command will print the average of +those quantities via the "compute reduce"_compute_reduce.html command +with thermo output. And the "fix ave/histo"_fix_ave_histo.html +command will histogram the distance^2 values and write them to a file. + +:line The local data stored by this command is generated by looping over all the atoms owned on a processor and their bonds. A bond will only be @@ -111,12 +156,12 @@ dump 1 all local 1000 tmp.dump index c_1\[*\] c_2\[*\] :pre [Output info:] This compute calculates a local vector or local array depending on the -number of keywords. The length of the vector or number of rows in the -array is the number of bonds. If a single keyword is specified, a -local vector is produced. If two or more keywords are specified, a -local array is produced where the number of columns = the number of -keywords. The vector or array can be accessed by any command that -uses local values from a compute as input. See the "Howto +number of values. The length of the vector or number of rows in the +array is the number of bonds. If a single value is specified, a local +vector is produced. If two or more values are specified, a local +array is produced where the number of columns = the number of values. +The vector or array can be accessed by any command that uses local +values from a compute as input. See the "Howto output"_Howto_output.html doc page for an overview of LAMMPS output options. diff --git a/doc/src/compute_chunk_atom.txt b/doc/src/compute_chunk_atom.txt index e76b51e6ec9df377f4e1354f0090c588f6dd4b53..c29a5600a982659325cd6af6948eb8ed16de22d9 100644 --- a/doc/src/compute_chunk_atom.txt +++ b/doc/src/compute_chunk_atom.txt @@ -14,7 +14,7 @@ compute ID group-ID chunk/atom style args keyword values ... :pre ID, group-ID are documented in "compute"_compute.html command :ulb,l chunk/atom = style name of this compute command :l -style = {bin/1d} or {bin/2d} or {bin/3d} or {bin/sphere} or {type} or {molecule} or {compute/fix/variable} +style = {bin/1d} or {bin/2d} or {bin/3d} or {bin/sphere} or {type} or {molecule} or c_ID, c_ID\[I\], f_ID, f_ID\[I\], v_name {bin/1d} args = dim origin delta dim = {x} or {y} or {z} origin = {lower} or {center} or {upper} or coordinate value (distance units) @@ -40,7 +40,7 @@ style = {bin/1d} or {bin/2d} or {bin/3d} or {bin/sphere} or {type} or {molecule} ncbin = # of concentric circle bins between rmin and rmax {type} args = none {molecule} args = none - {compute/fix/variable} = c_ID, c_ID\[I\], f_ID, f_ID\[I\], v_name with no args + c_ID, c_ID\[I\], f_ID, f_ID\[I\], v_name args = none 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 f_ID = per-atom vector calculated by a fix with ID @@ -85,7 +85,8 @@ compute 1 all chunk/atom bin/1d z lower 0.02 units reduced compute 1 all chunk/atom bin/2d z lower 1.0 y 0.0 2.5 compute 1 all chunk/atom molecule region sphere nchunk once ids once compress yes compute 1 all chunk/atom bin/sphere 5 5 5 2.0 5.0 5 discard yes -compute 1 all chunk/atom bin/cylinder z lower 2 10 10 2.0 5.0 3 discard yes :pre +compute 1 all chunk/atom bin/cylinder z lower 2 10 10 2.0 5.0 3 discard yes +compute 1 all chunk/atom c_cluster :pre [Description:] @@ -386,8 +387,8 @@ described below, which resets {Nchunk}. The {limit} keyword is then applied to the new {Nchunk} value, exactly as described in the preceding paragraph. Note that in this case, all atoms will end up with chunk IDs <= {Nc}, but their original values (e.g. molecule ID or -compute/fix/variable value) may have been > {Nc}, because of the -compression operation. +compute/fix/variable) may have been > {Nc}, because of the compression +operation. If {compress yes} is set, and the {compress} keyword comes after the {limit} keyword, then the {limit} value of {Nc} is applied first to diff --git a/doc/src/compute_chunk_spread_atom.txt b/doc/src/compute_chunk_spread_atom.txt new file mode 100644 index 0000000000000000000000000000000000000000..f84ef679743894b19108da5b7f29af2086dcb090 --- /dev/null +++ b/doc/src/compute_chunk_spread_atom.txt @@ -0,0 +1,174 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +compute chunk/spread/atom command :h3 + +[Syntax:] + +compute ID group-ID chunk/spread/atom chunkID input1 input2 ... :pre + +ID, group-ID are documented in "compute"_compute.html command :ulb,l +chunk/spread/atom = style name of this compute command :l +chunkID = ID of "compute chunk/atom"_compute_chunk_atom.html command :l +one or more inputs can be listed :l +input = c_ID, c_ID\[N\], f_ID, f_ID\[N\] :l + c_ID = global vector calculated by a compute with ID + c_ID\[I\] = Ith column of global array calculated by a compute with ID, I can include wildcard (see below) + f_ID = global vector calculated by a fix with ID + f_ID\[I\] = Ith column of global array calculated by a fix with ID, I can include wildcard (see below) :pre +:ule + +[Examples:] + +compute 1 all chunk/spread/atom mychunk c_com[*] c_gyration :pre + +[Description:] + +Define a calculation that "spreads" one or more per-chunk values to +each atom in the chunk. This can be useful for creating a "dump +file"_dump.html where each atom lists info about the chunk it is in, +e.g. for post-processing purposes. It can also be used in "atom-style +variables"_variable.html that need info about the chunk each atom is +in. Examples are given below. + +In LAMMPS, chunks are collections of atoms defined by a "compute +chunk/atom"_compute_chunk_atom.html command, which assigns each atom +to a single chunk (or no chunk). The ID for this command is specified +as chunkID. For example, a single chunk could be the atoms in a +molecule or atoms in a spatial bin. See the "compute +chunk/atom"_compute_chunk_atom.html and "Howto chunk"_Howto_chunk.html +doc pages for details of how chunks can be defined and examples of how +they can be used to measure properties of a system. + +For inputs that are computes, they must be a compute that calculates +per-chunk values. These are computes whose style names end in +"/chunk". + +For inputs that are fixes, they should be a a fix that calculates +per-chunk values. For example, "fix ave/chunk"_fix_ave_chunk.html or +"fix ave/time"_fix_ave_time.html (assuming it is time-averaging +per-chunk data). + +For each atom, this compute accesses its chunk ID from the specified +{chunkID} compute, then accesses the per-chunk value in each input. +Those values are copied to this compute to become the output for that +atom. + +The values generated by this compute will be 0.0 for atoms not in the +specified compute group {group-ID}. They will also be 0.0 if the atom +is not in a chunk, as assigned by the {chunkID} compute. They will +also be 0.0 if the current chunk ID for the atom is out-of-bounds with +respect to the number of chunks stored by a particular input compute +or fix. + +NOTE: LAMMPS does not check that a compute or fix which calculates +per-chunk values uses the same definition of chunks as this compute. +It's up to you to be consistent. Likewise, for a fix input, LAMMPS +does not check that it is per-chunk data. It only checks that the fix +produces a global vector or array. + +:line + +Each listed input is operated on independently. + +If a bracketed index I is used, it can be specified using a wildcard +asterisk with the index to effectively specify multiple values. This +takes the form "*" or "*n" or "n*" or "m*n". If N = the number of +columns in the array, then an asterisk with no numeric values means +all indices from 1 to N. A leading asterisk means all indices from 1 +to n (inclusive). A trailing asterisk means all indices from n to N +(inclusive). A middle asterisk means all indices from m to n +(inclusive). + +Using a wildcard is the same as if the individual columns of the array +had been listed one by one. E.g. these 2 compute chunk/spread/atom +commands are equivalent, since the "compute +com/chunk"_compute_com_chunk.html command creates a per-atom array +with 3 columns: + +compute com all com/chunk mychunk +compute 10 all chunk/spread/atom mychunk c_com\[*\] +compute 10 all chunk/spread/atom mychunk c_com\[1\] c_com\[2\] c_com\[3\] :pre + +:line + +Here is an example of writing a dump file the with the center-of-mass +(COM) for the chunk each atom is in. The commands below can be added +to the bench/in.chain script. + +compute cmol all chunk/atom molecule +compute com all com/chunk cmol +compute comchunk all chunk/spread/atom cmol c_com[*] +dump 1 all custom 50 tmp.dump id mol type x y z c_comchunk[*] +dump_modify 1 sort id :pre + +The same per-chunk data for each atom could be used to define per-atom +forces for the "fix addforce"_fix_addforce.html command. In this +example the forces act to pull atoms of an extended polymer chain +towards its COM in an attractive manner. + +compute prop all property/atom xu yu zu +variable k equal 0.1 +variable fx atom v_k*(c_comchunk\[1\]-c_prop\[1\]) +variable fy atom v_k*(c_comchunk\[2\]-c_prop\[2\]) +variable fz atom v_k*(c_comchunk\[3\]-c_prop\[3\]) +fix 3 all addforce v_fx v_fy v_fz :pre + +Note that "compute property/atom"_compute_property_atom.html is used +to generate unwrapped coordinates for use in the per-atom force +calculation, so that the effect of periodic boundaries is accounted +for properly. + +Over time this applied force could shrink each polymer chain's radius +of gyration in a polymer mixture simulation. Here is output from the +bench/in.chain script. Thermo output is shown for 1000 steps, where +the last column is the average radius of gyration over all 320 chains +in the 32000 atom system: + +compute gyr all gyration/chunk cmol +variable ave equal ave(c_gyr) +thermo_style custom step etotal press v_ave :pre + + 0 22.394765 4.6721833 5.128278 + 100 22.445002 4.8166709 5.0348372 + 200 22.500128 4.8790392 4.9364875 + 300 22.534686 4.9183766 4.8590693 + 400 22.557196 4.9492211 4.7937849 + 500 22.571017 4.9161853 4.7412008 + 600 22.573944 5.0229708 4.6931243 + 700 22.581804 5.0541301 4.6440647 + 800 22.584683 4.9691734 4.6000016 + 900 22.59128 5.0247538 4.5611513 + 1000 22.586832 4.94697 4.5238362 :pre + +:line + +[Output info:] + +This compute calculates a per-atom vector or array, which can be +accessed by any command that uses per-atom values from a compute as +input. See the "Howto output"_Howto_output.html doc page for an +overview of LAMMPS output options. + +The output is a per-atom vector if a single input value is specified, +otherwise a per-atom array is output. The number of columns in the +array is the number of inputs provided. The per-atom values for the +vector or each column of the array will be in whatever +"units"_units.html the corresponding input value is in. + +The vector or array values are "intensive". + +[Restrictions:] none + +[Related commands:] + +"compute chunk/atom"_compute_chunk_atom.html, "fix +ave/chunk"_fix_ave_chunk.html, "compute +reduce/chunk"_compute_reduce_chunk.html + +[Default:] none diff --git a/doc/src/compute_coord_atom.txt b/doc/src/compute_coord_atom.txt index 66eecd195da4fb19851d5d84349c72391e51add6..ddc4cc82d30483aa2e5352ed034da9a48bfdb87b 100644 --- a/doc/src/compute_coord_atom.txt +++ b/doc/src/compute_coord_atom.txt @@ -67,7 +67,7 @@ identify crystal-like atoms in a system, as discussed in "ten Wolde"_#tenWolde1. The ID of the previously specified "compute -orientorder/atom"_compute_orientorder/atom command is specified as +orientorder/atom"_compute_orientorder_atom.html command is specified as {orientorderID}. The compute must invoke its {components} option to calculate components of the {Ybar_lm} vector for each atoms, as described in its documentation. Note that orientorder/atom compute diff --git a/doc/src/compute_dihedral_local.txt b/doc/src/compute_dihedral_local.txt index 77812699d35fc826c95a344ddc7bf0207caf2ec4..951b360f19516e36433ed4a10a1966c83d10bcfb 100644 --- a/doc/src/compute_dihedral_local.txt +++ b/doc/src/compute_dihedral_local.txt @@ -10,18 +10,25 @@ compute dihedral/local command :h3 [Syntax:] -compute ID group-ID dihedral/local value1 value2 ... :pre +compute ID group-ID dihedral/local value1 value2 ... keyword args ... :pre ID, group-ID are documented in "compute"_compute.html command :ulb,l dihedral/local = style name of this compute command :l one or more values may be appended :l -value = {phi} :l - {phi} = tabulate dihedral angles :pre +value = {phi} or {v_name} :l + {phi} = tabulate dihedral angles + {v_name} = equal-style variable with name (see below) :pre +zero or more keyword/args pairs may be appended :l +keyword = {set} :l + {set} args = phi name + phi = only currently allowed arg + name = name of variable to set with phi :pre :ule [Examples:] compute 1 all dihedral/local phi :pre +compute 1 all dihedral/local phi v_cos set phi p :pre [Description:] @@ -33,6 +40,47 @@ by the group parameter as explained below. The value {phi} is the dihedral angle, as defined in the diagram on the "dihedral_style"_dihedral_style.html doc page. +The value {v_name} can be used together with the {set} keyword to +compute a user-specified function of the dihedral angle phi. The +{name} specified for the {v_name} value is the name of an "equal-style +variable"_variable.html which should evaluate a formula based on a +variable which will store the angle phi. This other variable must +be an "internal-style variable"_variable.html defined in the input +script; its initial numeric value can be anything. It must be an +internal-style variable, because this command resets its value +directly. The {set} keyword is used to identify the name of this +other variable associated with phi. + +Note that the value of phi for each angle which stored in the internal +variable is in radians, not degrees. + +As an example, these commands can be added to the bench/in.rhodo +script to compute the cosine and cosine^2 of every dihedral angle in +the system and output the statistics in various ways: + +variable p internal 0.0 +variable cos equal cos(v_p) +variable cossq equal cos(v_p)*cos(v_p) :pre + +compute 1 all property/local datom1 datom2 datom3 datom4 dtype +compute 2 all dihedral/local phi v_cos v_cossq set phi p +dump 1 all local 100 tmp.dump c_1[*] c_2[*] :pre + +compute 3 all reduce ave c_2[*] +thermo_style custom step temp press c_3[*] :pre + +fix 10 all ave/histo 10 10 100 -1 1 20 c_2[2] mode vector file tmp.histo :pre + +The "dump local"_dump.html command will output the angle, +cosine(angle), cosine^2(angle) for every dihedral in the system. The +"thermo_style"_thermo_style.html command will print the average of +those quantities via the "compute reduce"_compute_reduce.html command +with thermo output. And the "fix ave/histo"_fix_ave_histo.html +command will histogram the cosine(angle) values and write them to a +file. + +:line + The local data stored by this command is generated by looping over all the atoms owned on a processor and their dihedrals. A dihedral will only be included if all 4 atoms in the dihedral are in the specified @@ -57,12 +105,12 @@ dump 1 all local 1000 tmp.dump index c_1\[1\] c_1\[2\] c_1\[3\] c_1\[4\] c_1\[5\ [Output info:] This compute calculates a local vector or local array depending on the -number of keywords. The length of the vector or number of rows in the -array is the number of dihedrals. If a single keyword is specified, a -local vector is produced. If two or more keywords are specified, a +number of values. The length of the vector or number of rows in the +array is the number of dihedrals. If a single value is specified, a +local vector is produced. If two or more values are specified, a local array is produced where the number of columns = the number of -keywords. The vector or array can be accessed by any command that -uses local values from a compute as input. See the "Howto +values. The vector or array can be accessed by any command that uses +local values from a compute as input. See the "Howto output"_Howto_output.html doc page for an overview of LAMMPS output options. diff --git a/doc/src/compute_displace_atom.txt b/doc/src/compute_displace_atom.txt index 669ab9f7ca3ea74e4a3a8a0b5537c0b09cbd814d..7cea62c7b3a4e824de53b234bba0176130447941 100644 --- a/doc/src/compute_displace_atom.txt +++ b/doc/src/compute_displace_atom.txt @@ -85,7 +85,7 @@ dump 1 all custom 100 tmp.dump id type x y z dump_modify 1 append yes thresh c_dsp[4] > ${Dhop} & refresh c_dsp delay 100 :pre -The "dump_modify thresh"_dump_modify.html command will only ouptut +The "dump_modify thresh"_dump_modify.html command will only output atoms that have displaced more than 0.6 Angstroms on each snapshot (assuming metal units). The dump_modify {refresh} option triggers a call to this compute at the end of every dump. diff --git a/doc/src/compute_entropy_atom.txt b/doc/src/compute_entropy_atom.txt index b3891841b8ce04185b3f0705e877b8c34f87b34f..04f0fd0b82df8a98ac3a11311ba95fe4a7882479 100644 --- a/doc/src/compute_entropy_atom.txt +++ b/doc/src/compute_entropy_atom.txt @@ -14,7 +14,7 @@ compute ID group-ID entropy/atom sigma cutoff keyword value ... :pre ID, group-ID are documented in "compute"_compute.html command :l entropy/atom = style name of this compute command :l -sigma = width of gaussians used in the g(r) smoothening :l +sigma = width of gaussians used in the g(r) smoothing :l cutoff = cutoff for the g(r) calculation :l one or more keyword/value pairs may be appended :l keyword = {avg} or {local} @@ -49,14 +49,14 @@ This parameter for atom i is computed using the following formula from where r is a distance, g(r) is the radial distribution function of atom i and rho is the density of the system. The g(r) computed for each -atom i can be noisy and therefore it is smoothened using: +atom i can be noisy and therefore it is smoothed using: :c,image(Eqs/pair_entropy2.jpg) where the sum in j goes through the neighbors of atom i, and sigma is a -parameter to control the smoothening. +parameter to control the smoothing. -The input parameters are {sigma} the smoothening parameter, and the +The input parameters are {sigma} the smoothing parameter, and the {cutoff} for the calculation of g(r). If the keyword {avg} has the setting {yes}, then this compute also @@ -82,7 +82,7 @@ If the {local yes} option is used, the g(r) is normalized by the local density around each atom, that is to say the density around each atom is the number of neighbors within the neighbor list cutoff divided by the corresponding volume. This option can be useful when dealing with -inhomogeneus systems such as those that have surfaces. +inhomogeneous systems such as those that have surfaces. Here are typical input parameters for fcc aluminum (lattice constant 4.05 Angstroms), diff --git a/doc/src/compute_modify.txt b/doc/src/compute_modify.txt index 192ea0bc9ec96d6c7691214f78f7cf2c080f4ddd..5ba2100fbaa0bb51ab8f2bc112cb22248d745639 100644 --- a/doc/src/compute_modify.txt +++ b/doc/src/compute_modify.txt @@ -19,7 +19,7 @@ keyword = {extra/dof} or {extra} or {dynamic/dof} or {dynamic} :l N = # of extra degrees of freedom to subtract {extra} syntax is identical to {extra/dof}, will be disabled at some point {dynamic/dof} value = {yes} or {no} - yes/no = do or do not recompute the number of degrees of freedom (DOF) contributing to the temperature + yes/no = do or do not re-compute the number of degrees of freedom (DOF) contributing to the temperature {dynamic} syntax is identical to {dynamic/dof}, will be disabled at some point :pre :ule diff --git a/doc/src/compute_msd_chunk.txt b/doc/src/compute_msd_chunk.txt index 264f38d5fde4a6f587ff97f22ed797b07f3b50bc..7ff57c984420fec57c4fdca4faeb2028fcaeb7d4 100644 --- a/doc/src/compute_msd_chunk.txt +++ b/doc/src/compute_msd_chunk.txt @@ -90,12 +90,12 @@ This is so that the fix this compute creates to store per-chunk quantities will also have the same ID, and thus be initialized correctly with chunk reference positions from the restart file. -The simplest way to output the results of the compute com/msd +The simplest way to output the results of the compute msd/chunk calculation to a file is to use the "fix ave/time"_fix_ave_time.html command, for example: compute cc1 all chunk/atom molecule -compute myChunk all com/msd cc1 +compute myChunk all msd/chunk cc1 fix 1 all ave/time 100 1 100 c_myChunk\[*\] file tmp.out mode vector :pre [Output info:] diff --git a/doc/src/compute_pair.txt b/doc/src/compute_pair.txt index a2c25fcc8dc0dbe737e3efb76fd1ef57197dd765..b36d61f71c929a28a89b23219f361e021729be39 100644 --- a/doc/src/compute_pair.txt +++ b/doc/src/compute_pair.txt @@ -10,36 +10,45 @@ compute pair command :h3 [Syntax:] -compute ID group-ID pair pstyle evalue :pre +compute ID group-ID pair pstyle \[nstyle\] \[evalue\] :pre -ID, group-ID are documented in "compute"_compute.html command -pair = style name of this compute command -pstyle = style name of a pair style that calculates additional values -evalue = {epair} or {evdwl} or {ecoul} or blank (optional setting) :ul +ID, group-ID are documented in "compute"_compute.html command :ulb,l +pair = style name of this compute command :l +pstyle = style name of a pair style that calculates additional values :l +nsub = {n}-instance of a substyle, if a pair style is used multiple times in a hybrid style :l +{evalue} = {epair} or {evdwl} or {ecoul} or blank (optional) :l +:ule [Examples:] compute 1 all pair gauss compute 1 all pair lj/cut/coul/cut ecoul +compute 1 all pair tersoff 2 epair compute 1 all pair reax :pre [Description:] Define a computation that extracts additional values calculated by a pair style, and makes them accessible for output or further processing -by other commands. The group specified for this command is ignored. +by other commands. + +NOTE: The group specified for this command is [ignored]. The specified {pstyle} must be a pair style used in your simulation either by itself or as a sub-style in a "pair_style hybrid or -hybrid/overlay"_pair_hybrid.html command. +hybrid/overlay"_pair_hybrid.html command. If the sub-style is +used more than once, an additional number {nsub} has to be specified +in order to choose which instance of the sub-style will be used by +the compute. Not specifying the number in this case will cause the +compute to fail. -The {evalue} setting is optional; it may be left off the command. All +The {evalue} setting is optional. All pair styles tally a potential energy {epair} which may be broken into two parts: {evdwl} and {ecoul} such that {epair} = {evdwl} + {ecoul}. If the pair style calculates Coulombic interactions, their energy will be tallied in {ecoul}. Everything else (whether it is a Lennard-Jones style van der Waals interaction or not) is tallied in {evdwl}. If -{evalue} is specified as {epair} or left out, then {epair} is stored +{evalue} is blank or specified as {epair}, then {epair} is stored as a global scalar by this compute. This is useful when using "pair_style hybrid"_pair_hybrid.html if you want to know the portion of the total energy contributed by one sub-style. If {evalue} is @@ -80,4 +89,4 @@ the doc page for the pair style for details. [Default:] -The default for {evalue} is {epair}. +The keyword defaults are {evalue} = {epair}, nsub = 0. diff --git a/doc/src/compute_pressure_cylinder.txt b/doc/src/compute_pressure_cylinder.txt new file mode 100644 index 0000000000000000000000000000000000000000..4865fe8a795f961375d5486b1ed1b2b5358d42a7 --- /dev/null +++ b/doc/src/compute_pressure_cylinder.txt @@ -0,0 +1,81 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +compute pressure/cylinder command :h3 + +[Syntax:] + +compute ID group-ID pressure/cylinder zlo zhi Rmax bin_width :pre + +ID, group-ID are documented in "compute"_compute.html command +pressure/cylinder = style name of this compute command +zlo = minimum z-boundary for cylinder +zhi = maximum z-boundary for cylinder +Rmax = maximum radius to perform calculation to +bin_width = width of radial bins to use for calculation :ul + +[Examples:] + +compute 1 all pressure/cylinder -10.0 10.0 15.0 0.25 :pre + +[Description:] + +Define a computation that calculates the pressure tensor of a system in +cylindrical coordinates, as discussed in "(Addington)"_#Addington1. +This is useful for systems with a single axis of rotational symmetry, +such as cylindrical micelles or carbon nanotubes. The compute splits the +system into radial, cylindrical-shell-type bins of width bin_width, +centered at x=0,y=0, and calculates the radial (P_rhorho), azimuthal +(P_phiphi), and axial (P_zz) components of the configurational pressure +tensor. The local density is also calculated for each bin, so that the +true pressure can be recovered as P_kin+P_conf=density*k*T+P_conf. The +output is a global array with 5 columns; one each for bin radius, local +number density, P_rhorho, P_phiphi, and P_zz. The number of rows is +governed by the values of Rmax and bin_width. Pressure tensor values are +output in pressure units. + +[Output info:] + +This compute calculates a global array with 5 columns and Rmax/bin_width +rows. The output columns are: R (distance units), number density (inverse +volume units), configurational radial pressure (pressure units), +configurational azimuthal pressure (pressure units), and configurational +axial pressure (pressure units). + +The values calculated by this compute are +"intensive". The pressure values will be in pressure +"units"_units.html. The number density values will be in +inverse volume "units"_units.html. + +[Restrictions:] + +This compute currently calculates the pressure tensor contributions +for pair styles only (i.e. no bond, angle, dihedral, etc. contributions +and in the presence of bonded interactions, the result will be incorrect +due to exclusions for special bonds) and requires pair-wise force +calculations not available for most manybody pair styles. K-space +calculations are also excluded. Note that this pressure compute outputs +the configurational terms only; the kinetic contribution is not included +and may be calculated from the number density output by P_kin=density*k*T. + +This compute is part of the USER-MISC package. It is only enabled +if LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"compute temp"_compute_temp.html, "compute +stress/atom"_compute_stress_atom.html, +"thermo_style"_thermo_style.html, + +[Default:] none + +:line + +:link(Addington1) +[(Addington)] Addington, Long, Gubbins, J Chem Phys, 149, 084109 (2018). diff --git a/doc/src/compute_pressure_uef.txt b/doc/src/compute_pressure_uef.txt index c4c0fc405ff563273c1d9b1ff72c51a638eedf02..72ed0ba5c4003af0a1ca3881baf190a93f6db58d 100644 --- a/doc/src/compute_pressure_uef.txt +++ b/doc/src/compute_pressure_uef.txt @@ -27,8 +27,8 @@ compute 2 all pressure/uef my_temp_uef virial :pre This command is used to compute the pressure tensor in the reference frame of the applied flow field when -"fix nvt/uef"_fix_nh_uef.html" or -"fix npt/uef"_fix_nh_uef.html" is used. +"fix nvt/uef"_fix_nh_uef.html or +"fix npt/uef"_fix_nh_uef.html is used. It is not necessary to use this command to compute the scalar value of the pressure. A "compute pressure"_compute_pressure.html may be used for that purpose. diff --git a/doc/src/compute_property_atom.txt b/doc/src/compute_property_atom.txt index 512009093c0e052e8e7b43f44455d1f61d7e6fb8..bc1e3049fadc20b8f98018bcf2cf1fe69426e85f 100644 --- a/doc/src/compute_property_atom.txt +++ b/doc/src/compute_property_atom.txt @@ -158,7 +158,7 @@ corresponding attribute is in, e.g. velocity units for vx, charge units for q, etc. For the spin quantities, sp is in the units of the Bohr magneton, spx, -spy, and spz are adimentional quantities, and fmx, fmy and fmz are +spy, and spz are adimensional quantities, and fmx, fmy and fmz are given in rad.THz. [Restrictions:] none diff --git a/doc/src/compute_ptm_atom.txt b/doc/src/compute_ptm_atom.txt new file mode 100644 index 0000000000000000000000000000000000000000..2e22e4e9fb8822a2e46532a41b67da99a65dd9fb --- /dev/null +++ b/doc/src/compute_ptm_atom.txt @@ -0,0 +1,121 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +compute ptm/atom command :h3 + +[Syntax:] + +compute ID group-ID ptm/atom structures threshold :pre + +ID, group-ID are documented in "compute"_compute.html command +ptm/atom = style name of this compute command +structures = structure types to search for +threshold = lattice distortion threshold (RMSD) :ul + +[Examples:] + +compute 1 all ptm/atom default 0.1 +compute 1 all ptm/atom fcc-hcp-dcub-dhex 0.15 +compute 1 all ptm/atom all 0 :pre + +[Description:] + +Define a computation that determines the local lattice structure +around an atom using the PTM (Polyhedral Template Matching) method. +The PTM method is described in "(Larsen)"_#Larsen. + +Currently, there are seven lattice structures PTM recognizes: + +fcc = 1 +hcp = 2 +bcc = 3 +ico (icosahedral) = 4 +sc (simple cubic) = 5 +dcub (diamond cubic) = 6 +dhex (diamond hexagonal) = 7 +other = 8 :ul + +The value of the PTM structure will be 0 for atoms not in the specified +compute group. The choice of structures to search for can be specified using the "structures" +argument, which is a hyphen-separated list of structure keywords. +Two convenient pre-set options are provided: + +default: fcc-hcp-bcc-ico +all: fcc-hcp-bcc-ico-sc-dcub-dhex :ul + +The 'default' setting detects the same structures as the Common Neighbor Analysis method. +The 'all' setting searches for all structure types. A small performance penalty is +incurred for the diamond structures, so it is not recommended to use this option if +it is known that the simulation does not contain diamond structures. + + +PTM identifies structures using two steps. First, a graph isomorphism test is used +to identify potential structure matches. Next, the deviation is computed between the +local structure (in the simulation) and a template of the ideal lattice structure. +The deviation is calculated as: + +:c,image(Eqs/ptm_rmsd.jpg) + +Here, u and v contain the coordinates of the local and ideal structures respectively, +s is a scale factor, and Q is a rotation. The best match is identified by the +lowest RMSD value, using the optimal scaling, rotation, and correspondence between the +points. + +The 'threshold' keyword sets an upper limit on the maximum permitted deviation before +a local structure is identified as disordered. Typical values are in the range 0.1-0.15, +but larger values may be desirable at higher temperatures. +A value of 0 is equivalent to infinity and can be used if no threshold is desired. + + +The neighbor list needed to compute this quantity is constructed each +time the calculation is performed (e.g. each time a snapshot of atoms +is dumped). Thus it can be inefficient to compute/dump this quantity +too frequently or to have multiple compute/dump commands, each with a +{ptm/atom} style. + +[Output info:] + +This compute calculates a per-atom arry, which can be accessed by +any command that uses per-atom values from a compute as input. See +the "Howto output"_Howto_output.html doc page for an overview of +LAMMPS output options. + +Results are stored in the per-atom array in the following order: + +type +rmsd +interatomic distance +qw +qx +qy +qw :ul + +The type is a number from 0 to 8. The rmsd is a positive real number. +The interatomic distance is computed from the scale factor in the RMSD equation. +The (qw,qx,qy,qz) parameters represent the orientation of the local structure +in quaternion form. The reference coordinates for each template (from which the +orientation is determined) can be found in the {ptm_constants.h} file in the PTM source directory. + +[Restrictions:] + +This fix is part of the USER-PTM package. It is only enabled if +LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"compute centro/atom"_compute_centro_atom.html +"compute cna/atom"_compute_cna_atom.html + +[Default:] none + +:line + +:link(Larsen) +[(Larsen)] Larsen, Schmidt, Schiøtz, Modelling Simul Mater Sci Eng, 24, 055007 (2016). + diff --git a/doc/src/compute_rdf.txt b/doc/src/compute_rdf.txt index 04b38682cc4957ac67459b18652249b1dfb75f14..d11ae9e3bf0ba508a42e46e4cdb8023e33ef21f1 100644 --- a/doc/src/compute_rdf.txt +++ b/doc/src/compute_rdf.txt @@ -182,7 +182,7 @@ change from zero to one at the location of the spike in g(r). NOTE: compute rdf can handle dynamic groups and systems where atoms are added or removed, but this causes that certain normalization -parameters need to be recomputed in every step and include collective +parameters need to be re-computed in every step and include collective communication operations. This will reduce performance and limit parallel efficiency and scaling. For systems, where only the type of atoms changes (e.g. when using "fix atom/swap"_fix_atom_swap.html), diff --git a/doc/src/compute_reduce.txt b/doc/src/compute_reduce.txt index ef3c7c6489e03ef3c1056edefd8d4dc419766cdf..0bd2accf3c08ba9d7f50cb008c8b8151fe8b4012 100644 --- a/doc/src/compute_reduce.txt +++ b/doc/src/compute_reduce.txt @@ -97,9 +97,9 @@ equivalent, since the "compute stress/atom"_compute_stress_atom.html command creates a per-atom array with 6 columns: compute myPress all stress/atom NULL -compute 2 all reduce min myPress\[*\] -compute 2 all reduce min myPress\[1\] myPress\[2\] myPress\[3\] & - myPress\[4\] myPress\[5\] myPress\[6\] :pre +compute 2 all reduce min c_myPress\[*\] +compute 2 all reduce min c_myPress\[1\] c_myPress\[2\] c_myPress\[3\] & + c_myPress\[4\] c_myPress\[5\] c_myPress\[6\] :pre :line diff --git a/doc/src/compute_reduce_chunk.txt b/doc/src/compute_reduce_chunk.txt new file mode 100644 index 0000000000000000000000000000000000000000..3628c0f1ad7a0a0e1add2773d24ecf97d86b89ee --- /dev/null +++ b/doc/src/compute_reduce_chunk.txt @@ -0,0 +1,177 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +compute reduce/chunk command :h3 + +[Syntax:] + +compute ID group-ID reduce/chunk chunkID mode input1 input2 ... :pre + +ID, group-ID are documented in "compute"_compute.html command :ulb,l +reduce/chunk = style name of this compute command :l +chunkID = ID of "compute chunk/atom"_compute_chunk_atom.html command :l +mode = {sum} or {min} or {max} :l +one or more inputs can be listed :l +input = c_ID, c_ID\[N\], f_ID, f_ID\[N\], v_ID :l + 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) + f_ID = per-atom vector calculated by a fix with ID + f_ID\[I\] = Ith column of per-atom array calculated by a fix with ID, I can include wildcard (see below) + v_name = per-atom vector calculated by an atom-style variable with name :pre +:ule + +[Examples:] + +compute 1 all reduce/chunk/atom mychunk min c_cluster :pre + +[Description:] + +Define a calculation that reduces one or more per-atom vectors into +per-chunk values. This can be useful for diagnostic output. Or when +used in conjunction with the "compute +chunk/spread/atom"_compute_chunk_spread_atom.html command it can be +used ot create per-atom values that induce a new set of chunks with a +second "compute chunk/atom"_compute_chunk_atom.html command. An +example is given below. + +In LAMMPS, chunks are collections of atoms defined by a "compute +chunk/atom"_compute_chunk_atom.html command, which assigns each atom +to a single chunk (or no chunk). The ID for this command is specified +as chunkID. For example, a single chunk could be the atoms in a +molecule or atoms in a spatial bin. See the "compute +chunk/atom"_compute_chunk_atom.html and "Howto chunk"_Howto_chunk.html +doc pages for details of how chunks can be defined and examples of how +they can be used to measure properties of a system. + +For each atom, this compute accesses its chunk ID from the specified +{chunkID} compute. The per-atom value from an input contributes +to a per-chunk value corresponding the the chunk ID. + +The reduction operation is specified by the {mode} setting and is +performed over all the per-atom values from the atoms in each chunk. +The {sum} option adds the pre-atom values to a per-chunk total. The +{min} or {max} options find the minimum or maximum value of the +per-atom values for each chunk. + +Note that only atoms in the specified group contribute to the +reduction operation. If the {chunkID} compute returns a 0 for the +chunk ID of an atom (i.e. the atom is not in a chunk defined by the +"compute chunk/atom"_compute_chunk_atom.html command), that atom will +also not contribute to the reduction operation. An input that is a +compute or fix may define its own group which affects the quantities +it returns. For example, a compute with return a zero value for atoms +that are not in the group specified for that compute. + +Each listed input is operated on independently. Each input can be the +result of a "compute"_compute.html or "fix"_fix.html or the evaluation +of an atom-style "variable"_variable.html. + +Note that for values from a compute or fix, the bracketed index I can +be specified using a wildcard asterisk with the index to effectively +specify multiple values. This takes the form "*" or "*n" or "n*" or +"m*n". If N = the size of the vector (for {mode} = scalar) or the +number of columns in the array (for {mode} = vector), then an asterisk +with no numeric values means all indices from 1 to N. A leading +asterisk means all indices from 1 to n (inclusive). A trailing +asterisk means all indices from n to N (inclusive). A middle asterisk +means all indices from m to n (inclusive). + +Using a wildcard is the same as if the individual columns of the array +had been listed one by one. E.g. these 2 compute reduce/chunk +commands are equivalent, since the "compute +property/chunk"_compute_property_chunk.html command creates a per-atom +array with 3 columns: + +compute prop all property/atom vx vy vz +compute 10 all reduce/chunk mychunk max c_prop\[*\] +compute 10 all reduce/chunk mychunk max c_prop\[1\] c_prop\[2\] c_prop\[3\] :pre + +:line + +Here is an example of using this compute, in conjunction with the +compute chunk/spread/atom command to identify self-assembled micelles. +The commands below can be added to the examples/in.micelle script. + +Imagine a collection of polymer chains or small molecules with +hydrophobic end groups. All the hydrophobic (HP) atoms are assigned +to a group called "phobic". + +These commands will assign a unique cluster ID to all HP atoms within +a specified distance of each other. A cluster will contain all HP +atoms in a single molecule, but also the HP atoms in nearby molecules, +e.g. molecules that have clumped to form a micelle due to the +attraction induced by the hydrophobicity. The output of the +chunk/reduce command will be a cluster ID per chunk (molecule). +Molecules with the same cluster ID are in the same micelle. + +group phobic type 4 # specific to in.micelle model +compute cluster phobic cluster/atom 2.0 +compute cmol all chunk/atom molecule +compute reduce phobic reduce/chunk cmol min c_cluster :pre + +This per-chunk info could be output in at least two ways: + +fix 10 all ave/time 1000 1 1000 c_reduce file tmp.phobic mode vector :pre + +compute spread all chunk/spread/atom cmol c_reduce +dump 1 all custom 1000 tmp.dump id type mol x y z c_cluster c_spread +dump_modify 1 sort id :pre + +In the first case, each snapshot in the tmp.phobic file will contain +one line per molecule. Molecules with the same value are in the same +micelle. In the second case each dump snapshot contains all atoms, +each with a final field with the cluster ID of the micelle that the HP +atoms of that atom's molecule belong to. + +The result from compute chunk/spread/atom can be used to define a new +set of chunks, where all the atoms in all the molecules in the same +micelle are assigned to the same chunk, i.e. one chunk per micelle. + +compute micelle all chunk/atom c_spread compress yes :pre + +Further analysis on a per-micelle basis can now be performed using any +of the per-chunk computes listed on the "Howto chunk"_Howto_chunk.html +doc page. E.g. count the number of atoms in each micelle, calculate +its center or mass, shape (moments of intertia), radius of gyration, +etc. + +compute prop all property/chunk micelle count +fix 20 all ave/time 1000 1 1000 c_prop file tmp.micelle mode vector :pre + +Each snapshot in the tmp.micelle file will have one line per micelle +with its count of atoms, plus a first line for a chunk with all the +solvent atoms. By the time 50000 steps have elapsed there are a +handful of large micelles. + +:line + +[Output info:] + +This compute calculates a global vector if a single input value is +specified, otherwise a global array is output. The number of columns +in the array is the number of inputs provided. The length of the +vector or the number of vector elements or array rows = the number of +chunks {Nchunk} as calculated by the specified "compute +chunk/atom"_compute_chunk_atom.html command. The vector or array can +be accessed by any command that uses global values from a compute as +input. See the "Howto output"_Howto_output.html doc page for an +overview of LAMMPS output options. + +The per-atom values for the vector or each column of the array will be +in whatever "units"_units.html the corresponding input value is in. +The vector or array values are "intensive". + +[Restrictions:] none + +[Related commands:] + +"compute chunk/atom"_compute_chunk_atom.html, "compute +reduce"_compute_reduce.html, "compute +chunk/spread/atom"_compute_chunk_spread_atom.html + +[Default:] none diff --git a/doc/src/compute_rigid_local.txt b/doc/src/compute_rigid_local.txt index 9b829a70fcb82a1de7defbafbce6b949ca833f20..67c6209bdf302e471ce2847a1400f4b8ccc799c5 100644 --- a/doc/src/compute_rigid_local.txt +++ b/doc/src/compute_rigid_local.txt @@ -92,7 +92,7 @@ dump 1 all local 1000 tmp.dump index c_1\[1\] c_1\[2\] c_1\[3\] c_1\[4\] c_1\[5\ This section explains the rigid body attributes that can be specified. -The {id} attribute is the atomID of the atom which owns the rigid body, which is +The {id} attribute is the atom-ID of the atom which owns the rigid body, which is assigned by the "fix rigid/small"_fix_rigid.html command. The {mol} attribute is the molecule ID of the rigid body. It should diff --git a/doc/src/compute_smd_tlsph_dt.txt b/doc/src/compute_smd_tlsph_dt.txt index 92f5923de05f735931aae9908844b197ad127fe3..e9ff2e739b111a8b733fd7aa01f31262834ed45f 100644 --- a/doc/src/compute_smd_tlsph_dt.txt +++ b/doc/src/compute_smd_tlsph_dt.txt @@ -25,7 +25,7 @@ Define a computation that outputs the CFL-stable time increment per particle. This time increment is essentially given by the speed of sound, divided by the SPH smoothing length. Because both the speed of sound and the smoothing length typically change during the course of a -simulation, the stable time increment needs to be recomputed every +simulation, the stable time increment needs to be re-computed every time step. This calculation is performed automatically in the relevant SPH pair styles and this compute only serves to make the stable time increment accessible for output purposes. diff --git a/doc/src/compute_smd_triangle_mesh_vertices.txt b/doc/src/compute_smd_triangle_vertices.txt similarity index 91% rename from doc/src/compute_smd_triangle_mesh_vertices.txt rename to doc/src/compute_smd_triangle_vertices.txt index cd1f8fdd9b29b007ae0f3f0a28a491b7dee2fd7e..487b1b590b4d6e9a70643305f900a68a57e0b03c 100644 --- a/doc/src/compute_smd_triangle_mesh_vertices.txt +++ b/doc/src/compute_smd_triangle_vertices.txt @@ -6,14 +6,14 @@ :line -compute smd/triangle/mesh/vertices :h3 +compute smd/triangle/vertices command :h3 [Syntax:] -compute ID group-ID smd/triangle/mesh/vertices :pre +compute ID group-ID smd/triangle/vertices :pre ID, group-ID are documented in "compute"_compute.html command -smd/triangle/mesh/vertices = style name of this compute command :ul +smd/triangle/vertices = style name of this compute command :ul [Examples:] diff --git a/doc/src/compute_spin.txt b/doc/src/compute_spin.txt index 787ff8cdcfa822ba37c896d464e6c9655d5e543a..4edecc240846c2f5c0981ae9ff83b38775ea4441 100644 --- a/doc/src/compute_spin.txt +++ b/doc/src/compute_spin.txt @@ -10,14 +10,14 @@ compute spin command :h3 [Syntax:] -compute ID group-ID compute/spin :pre +compute ID group-ID spin :pre ID, group-ID are documented in "compute"_compute.html command -compute/spin = style name of this compute command :ul +spin = style name of this compute command :ul [Examples:] -compute out_mag all compute/spin :pre +compute out_mag all spin :pre [Description:] @@ -26,7 +26,8 @@ of atoms having spins. This compute calculates 6 magnetic quantities. -The three first quantities are the x,y and z coordinates of the total magnetization. +The three first quantities are the x,y and z coordinates of the total +magnetization. The fourth quantity is the norm of the total magnetization. @@ -39,7 +40,7 @@ The simplest way to output the results of the compute spin calculation is to define some of the quantities as variables, and to use the thermo and thermo_style commands, for example: -compute out_mag all compute/spin :pre +compute out_mag all spin :pre variable mag_z equal c_out_mag\[3\] variable mag_norm equal c_out_mag\[4\] @@ -48,12 +49,11 @@ variable temp_mag equal c_out_mag\[6\] :pre thermo 10 thermo_style custom step v_mag_z v_mag_norm v_temp_mag :pre -This serie of commands evaluates the total magnetization along z, the norm of +This series of commands evaluates the total magnetization along z, the norm of the total magnetization, and the magnetic temperature. Three variables are assigned to those quantities. The thermo and thermo_style commands print them every 10 timesteps. - [Output info:] The array values are "intensive". The array values will be in @@ -68,7 +68,6 @@ has to be "spin" for this compute to be valid. [Related commands:] none - [Default:] none :line diff --git a/doc/src/compute_stress_mop.txt b/doc/src/compute_stress_mop.txt new file mode 100644 index 0000000000000000000000000000000000000000..1006463179acf18cecff15105d4738c9f2bdc87a --- /dev/null +++ b/doc/src/compute_stress_mop.txt @@ -0,0 +1,111 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Section_commands.html#comm) + +:line + +compute stress/mop command :h3 +compute stress/mop/profile command :h3 + + +[Syntax:] + +compute ID group-ID style dir args keywords ... :pre + +ID, group-ID are documented in "compute"_compute.html command +style = {stress/mop} or {stress/mop/profile} +dir = {x} or {y} or {z} is the direction normal to the plane +args = argument specific to the compute style +keywords = {kin} or {conf} or {total} (one of more can be specified) :ul + {stress/mop} args = pos + pos = {lower} or {center} or {upper} or coordinate value (distance units) is the position of the plane + {stress/mop/profile} args = origin delta + origin = {lower} or {center} or {upper} or coordinate value (distance units) is the position of the first plane + delta = value (distance units) is the distance between planes :pre + +compute 1 all stress/mop x lower total +compute 1 liquid stress/mop z 0.0 kin conf +fix 1 all ave/time 10 1000 10000 c_1\[*\] file mop.time +fix 1 all ave/time 10 1000 10000 c_1\[2\] file mop.time :pre + +compute 1 all stress/mop/profile x lower 0.1 total +compute 1 liquid stress/mop/profile z 0.0 0.25 kin conf +fix 1 all ave/time 500 20 10000 c_1\[*\] ave running overwrite file mopp.time mode vector :pre + + +[Description:] + +Compute {stress/mop} and compute {stress/mop/profile} define computations that +calculate components of the local stress tensor using the method of +planes "(Todd)"_#mop-todd. Specifically in compute {stress/mop} calculates 3 +components are computed in directions {dir},{x}; {dir},{y}; and +{dir},{z}; where {dir} is the direction normal to the plane, while +in compute {stress/mop/profile} the profile of the stress is computed. + +Contrary to methods based on histograms of atomic stress (i.e. using +"compute stress/atom"_compute_stress_atom.html), the method of planes is +compatible with mechanical balance in heterogeneous systems and at +interfaces "(Todd)"_#mop-todd. + +The stress tensor is the sum of a kinetic term and a configurational +term, which are given respectively by Eq. (21) and Eq. (16) in +"(Todd)"_#mop-todd. For the kinetic part, the algorithm considers that +atoms have crossed the plane if their positions at times t-dt and t are +one on either side of the plane, and uses the velocity at time t-dt/2 +given by the velocity-Verlet algorithm. + +Between one and three keywords can be used to indicate which +contributions to the stress must be computed: kinetic stress (kin), +configurational stress (conf), and/or total stress (total). + +NOTE 1: The configurational stress is computed considering all pairs of atoms where at least one atom belongs to group group-ID. + +NOTE 2: The local stress does not include any Lennard-Jones tail +corrections to the pressure added by the "pair_modify tail +yes"_pair_modify.html command, since those are contributions to the global system pressure. + +[Output info:] + +Compute {stress/mop} calculates a global vector (indices starting at 1), with 3 +values for each declared keyword (in the order the keywords have been +declared). For each keyword, the stress tensor components are ordered as +follows: stress_dir,x, stress_dir,y, and stress_dir,z. + +Compute {stress/mop/profile} instead calculates a global array, with 1 column +giving the position of the planes where the stress tensor was computed, +and with 3 columns of values for each declared keyword (in the order the +keywords have been declared). For each keyword, the profiles of stress +tensor components are ordered as follows: stress_dir,x; stress_dir,y; +and stress_dir,z. + +The values are in pressure "units"_units.html. + +The values produced by this compute can be accessed by various "output commands"_Howto_output.html. For instance, the results can be written to a file using the "fix ave/time"_fix_ave_time.html command. Please see the example in the examples/USER/mop folder. + +[Restrictions:] + +These styles are part of the USER-MISC package. They are only enabled if +LAMMPS is built with that package. See the "Build package"_Build_package.html +doc page on for more info. + +The method is only implemented for 3d orthogonal simulation boxes whose +size does not change in time, and axis-aligned planes. + +The method only works with two-body pair interactions, because it +requires the class method pair->single() to be implemented. In +particular, it does not work with more than two-body pair interactions, +intra-molecular interactions, and long range (kspace) interactions. + +[Related commands:] + +"compute stress/atom"_compute_stress_atom.html + +[Default:] none + +:line + +:link(mop-todd) +[(Todd)] B. D. Todd, Denis J. Evans, and Peter J. Daivis: "Pressure tensor for inhomogeneous fluids", +Phys. Rev. E 52, 1627 (1995). diff --git a/doc/src/compute_temp_uef.txt b/doc/src/compute_temp_uef.txt index 9a509da4503db6cb3a9e03b0314de6300e28d36b..97e1d6e1ae87ff94166dd20f67518c5dc1d29d92 100644 --- a/doc/src/compute_temp_uef.txt +++ b/doc/src/compute_temp_uef.txt @@ -24,8 +24,8 @@ compute 2 sel temp/uef :pre This command is used to compute the kinetic energy tensor in the reference frame of the applied flow field when -"fix nvt/uef"_fix_nh_uef.html" or -"fix npt/uef"_fix_nh_uef.html" is used. +"fix nvt/uef"_fix_nh_uef.html or +"fix npt/uef"_fix_nh_uef.html is used. It is not necessary to use this command to compute the scalar value of the temperature. A "compute temp"_compute_temp.html may be used for that purpose. diff --git a/doc/src/computes.txt b/doc/src/computes.txt index 46dd30f7570f7a87d9874367f67f1d4af85a2fca..c836fb6cb1c980682373dd45654ce9fc535698b1 100644 --- a/doc/src/computes.txt +++ b/doc/src/computes.txt @@ -15,6 +15,7 @@ Computes :h1 compute_bond_local compute_centro_atom compute_chunk_atom + compute_chunk_spread_atom compute_cluster_atom compute_cna_atom compute_cnp_atom @@ -66,12 +67,15 @@ Computes :h1 compute_pe_atom compute_plasticity_atom compute_pressure + compute_pressure_cylinder compute_pressure_uef compute_property_atom compute_property_chunk compute_property_local + compute_ptm_atom compute_rdf compute_reduce + compute_reduce_chunk compute_rigid_local compute_saed compute_slice @@ -89,7 +93,7 @@ Computes :h1 compute_smd_tlsph_strain compute_smd_tlsph_strain_rate compute_smd_tlsph_stress - compute_smd_triangle_mesh_vertices + compute_smd_triangle_vertices compute_smd_ulsph_num_neighs compute_smd_ulsph_strain compute_smd_ulsph_strain_rate @@ -98,6 +102,7 @@ Computes :h1 compute_sna_atom compute_spin compute_stress_atom + compute_stress_mop compute_tally compute_tdpd_cc_atom compute_temp diff --git a/doc/src/delete_atoms.txt b/doc/src/delete_atoms.txt index 57faf97ad1bf1d213135707989985a1f866a8f8d..a55288e1dbad05e79f32d047355bafd3d65d3caa 100644 --- a/doc/src/delete_atoms.txt +++ b/doc/src/delete_atoms.txt @@ -84,7 +84,7 @@ connectivity that has already been assigned. However, the "reset_ids"_reset_ids.html command can be used after this command to accomplish the same thing. -Note that the re-assignement of IDs is not really a compression, where +Note that the re-assignment of IDs is not really a compression, where gaps in atom IDs are removed by decrementing atom IDs that are larger. Instead the IDs for all atoms are erased, and new IDs are assigned so that the atoms owned by individual processors have consecutive IDs, as diff --git a/doc/src/delete_bonds.txt b/doc/src/delete_bonds.txt index b29fa82f2d0d16c9b1a252073080aba43332605c..4e336046968ca3b0dc3c7f32db3a341ece4d9c9b 100644 --- a/doc/src/delete_bonds.txt +++ b/doc/src/delete_bonds.txt @@ -140,7 +140,7 @@ enough for a processor to acquire the ghost atoms its needs to compute bond, angle, etc interactions. If deleted bonds (angles, etc) are removed but the 1-2, 1-3, 1-4 -weighting list is not recomputed, this can cause a later "fix +weighting list is not re-computed, this can cause a later "fix shake"_fix_shake.html command to fail due to an atom's bonds being inconsistent with the weighting list. This should only happen if the group used in the fix command includes both atoms in the bond, in diff --git a/doc/src/dihedral_nharmonic.txt b/doc/src/dihedral_nharmonic.txt index 7a8bf6cdb7c6ce73c0593896ace978cac62e044a..660bbb3f1f521a76faa1ec334ead659bdef3ffc0 100644 --- a/doc/src/dihedral_nharmonic.txt +++ b/doc/src/dihedral_nharmonic.txt @@ -16,7 +16,7 @@ dihedral_style nharmonic :pre [Examples:] dihedral_style nharmonic -dihedral_coeff 3 10.0 20.0 30.0 :pre +dihedral_coeff * 3 10.0 20.0 30.0 :pre [Description:] diff --git a/doc/src/dump_image.txt b/doc/src/dump_image.txt index 9b56dd95a6006878dc9e865be9c148093e3f52a5..df1ff324c138951caedd3b77d975528825bf5c7b 100644 --- a/doc/src/dump_image.txt +++ b/doc/src/dump_image.txt @@ -384,12 +384,7 @@ change this via the "dump_modify"_dump_modify.html command. :line The {fix} keyword can be used with a "fix"_fix.html that produces -objects to be drawn. An example is the "fix -surface/global"_fix_surface_global.html command which can draw lines -or triangles for 2d/3d simulations. - -NOTE: Aug 2016 - The fix surface/global command is not yet added to -LAMMPS. +objects to be drawn. The {fflag1} and {fflag2} settings are numerical values which are passed to the fix to affect how the drawing of its objects is done. diff --git a/doc/src/dump_modify.txt b/doc/src/dump_modify.txt index 98bcbc5e551e85216732c74afebbc6c6b361a663..72f493591677e0e01eefde4f7044898f46966da1 100644 --- a/doc/src/dump_modify.txt +++ b/doc/src/dump_modify.txt @@ -914,7 +914,7 @@ flush = yes format = %d and %g for each integer or floating point value image = no label = ENTRIES -maxifiles = -1 +maxfiles = -1 nfile = 1 pad = 0 pbc = no diff --git a/doc/src/dump_molfile.txt b/doc/src/dump_molfile.txt index dd2b212f0baafc6efd4200c42eb4439e1d6715e3..b5f157cf292cba47d11fc6258b0fdea4ca34cf54 100644 --- a/doc/src/dump_molfile.txt +++ b/doc/src/dump_molfile.txt @@ -99,7 +99,7 @@ USER-MOLFILE package only provides the interface code, not the plugins. These can be obtained from a VMD installation which has to match the platform that you are using to compile LAMMPS for. By adding plugins to VMD, support for new file formats can be added to LAMMPS (or VMD -or other programs that use them) without having to recompile the +or other programs that use them) without having to re-compile the application itself. The plugins are installed in the directory: /plugins//molfile diff --git a/doc/src/fix.txt b/doc/src/fix.txt index 9c3a1d0349fd097eb9f5572b943872bce1254a4e..ee0d006fe8396fc265a9493a27af86f156b58aea 100644 --- a/doc/src/fix.txt +++ b/doc/src/fix.txt @@ -30,7 +30,7 @@ Set a fix that will be applied to a group of atoms. In LAMMPS, a timestepping or minimization. Examples include updating of atom positions and velocities due to time integration, controlling temperature, applying constraint forces to atoms, enforcing boundary -conditions, computing diagnostics, etc. There are hundredes of fixes +conditions, computing diagnostics, etc. There are hundreds of fixes defined in LAMMPS and new ones can be added; see the "Modify"_Modify.html doc page for details. @@ -164,7 +164,7 @@ There are also additional accelerated fix styles included in the LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. The individual style names on the "Commands fix"_Commands_fix.html doc page are followed by one or more of (g,i,k,o,t) to indicate which -accerlerated styles exist. +accelerated styles exist. "adapt"_fix_adapt.html - change a simulation parameter over time "addforce"_fix_addforce.html - add a force to each atom diff --git a/doc/src/fix_bocs.txt b/doc/src/fix_bocs.txt index 7acc22d702e4b7cfd496df2865fdbdc0844bd276..b7d4e7badfc5496c884c92ae7307d92550007893 100644 --- a/doc/src/fix_bocs.txt +++ b/doc/src/fix_bocs.txt @@ -56,7 +56,7 @@ value and its corresponding pressure correction. The volumes in the file should be uniformly spaced. Both the volumes and the pressure corrections should be provided in the proper units, e.g. if you are using {units real}, the volumes should all be in cubic angstroms, and the pressure corrections -should all be in atomspheres. Furthermore, the table should start/end at a +should all be in atmospheres. Furthermore, the table should start/end at a volume considerably smaller/larger than you expect your system to sample during the simulation. If the system ever reaches a volume outside of the range provided, the simulation will stop. diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index 7317dd26bb3b9d4b563b0266364490fafc39d37c..8e7cb1bdaef8b565a4138bcd5a68cd0d4343a277 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -34,7 +34,7 @@ react = mandatory argument indicating new reaction specification :l Rmax = bonding pair atoms must be separated by less than Rmax to initiate reaction (distance units) :l template-ID(pre-reacted) = ID of a molecule template containing pre-reaction topology :l template-ID(post-reacted) = ID of a molecule template containing post-reaction topology :l - map_file = name of file specifying corresponding atomIDs in the pre- and post-reacted templates :l + map_file = name of file specifying corresponding atom-IDs in the pre- and post-reacted templates :l zero or more individual keyword/value pairs may be appended to each react argument :l individual_keyword = {prob} or {stabilize_steps} :l {prob} values = fraction seed @@ -125,13 +125,13 @@ template. If both these conditions are met, the reaction site is modified to match the post-reaction template. A bonding atom pair will be identified if several conditions are met. -First, a pair of atoms within the specified react-group-ID of type -typei and typej must separated by a distance between {Rmin} and +First, a pair of atoms I,J within the specified react-group-ID of type +itype and jtype must separated by a distance between {Rmin} and {Rmax}. It is possible that multiple bonding atom pairs are identified: if the bonding atoms in the pre-reacted template are not 1-2, 1-3, or 1-4 neighbors, the closest bonding atom partner is set as its bonding partner; otherwise, the farthest potential partner is -chosen. Then, if both an atomi and atomj have each other as their +chosen. Then, if both an atom I and atom J have each other as their nearest bonding partners, these two atoms are identified as the bonding atom pair of the reaction site. Once this unique bonding atom pair is identified for each reaction, there could two or more @@ -323,7 +323,7 @@ bond/break"_fix_bond_break.html, "fix bond/swap"_fix_bond_swap.html, [Default:] -The option defaults are stabilization = no, stabilize_steps = 60 +The option defaults are stabilization = no, prob = 1.0, stabilize_steps = 60 :line diff --git a/doc/src/fix_box_relax.txt b/doc/src/fix_box_relax.txt index 29ebeaeef391d370c5bb3f6659ccf73e68fe990b..d41607e2ed9e285289ea7d632592ec711c855377 100644 --- a/doc/src/fix_box_relax.txt +++ b/doc/src/fix_box_relax.txt @@ -221,8 +221,8 @@ This equation only applies when the box dimensions are equal to those of the reference dimensions. If this is not the case, then the converged stress tensor will not equal that specified by the user. We can resolve this problem by periodically resetting the reference -dimensions. The keyword {nreset_ref} controls how often this is done. -If this keyword is not used, or is given a value of zero, then the +dimensions. The keyword {nreset} controls how often this is done. If +this keyword is not used, or is given a value of zero, then the reference dimensions are set to those of the initial simulation domain and are never changed. A value of {nstep} means that every {nstep} minimization steps, the reference dimensions are set to those of the diff --git a/doc/src/fix_client_md.txt b/doc/src/fix_client_md.txt new file mode 100644 index 0000000000000000000000000000000000000000..77f6b82c5e2ae076fb83baa2efee86753edce92d --- /dev/null +++ b/doc/src/fix_client_md.txt @@ -0,0 +1,106 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +fix client/md command :h3 + +[Syntax:] + +fix ID group-ID client/md :pre + +ID, group-ID are documented in "fix"_fix.html command +client/md = style name of this fix command :ul + +[Examples:] + +fix 1 all client/md :pre + +[Description:] + +This fix style enables LAMMPS to run as a "client" code and +communicate each timestep with a separate "server" code to perform an +MD simulation together. + +The "Howto client/server"_Howto_client_server.html doc page gives an +overview of client/server coupling of LAMMPS with another code where +one code is the "client" and sends request messages to a "server" +code. The server responds to each request with a reply message. This +enables the two codes to work in tandem to perform a simulation. + +When using this fix, LAMMPS (as the client code) passes the current +coordinates of all particles to the server code each timestep, which +computes their interaction, and returns the energy, forces, and virial +for the interacting particles to LAMMPS, so it can complete the +timestep. + +The server code could be a quantum code, or another classical MD code +which encodes a force field (pair_style in LAMMPS lingo) which LAMMPS +does not have. In the quantum case, this fix is a mechanism for +running {ab initio} MD with quantum forces. + +The group associated with this fix is ignored. + +The protocol and "units"_units.html for message format and content +that LAMMPS exchanges with the server code is defined on the "server +md"_server_md.html doc page. + +Note that when using LAMMPS as an MD client, your LAMMPS input script +should not normally contain force field commands, like a +"pair_style"_pair_style.html, "bond_style"_bond_style.html, or +"kspace_style"_kspace_style.html commmand. However it is possible for +a server code to only compute a portion of the full force-field, while +LAMMPS computes the remaining part. Your LAMMPS script can also +specify boundary conditions or force constraints in the usual way, +which will be added to the per-atom forces returned by the server +code. + +See the examples/message dir for example scripts where LAMMPS is both +the "client" and/or "server" code for this kind of client/server MD +simulation. The examples/message/README file explains how to launch +LAMMPS and another code in tandem to perform a coupled simulation. + +:line + +[Restart, fix_modify, output, run start/stop, minimize info:] + +No information about this fix is written to "binary restart +files"_restart.html. + +The "fix_modify"_fix_modify.html {energy} option is supported by this +fix to add the potential energy computed by the server application to +the system's potential energy as part of "thermodynamic +output"_thermo_style.html. + +The "fix_modify"_fix_modify.html {virial} option is supported by this +fix to add the server application's contribution to the system's +virial as part of "thermodynamic output"_thermo_style.html. The +default is {virial yes} + +This fix computes a global scalar which can be accessed by various +"output commands"_Howto_output.html. The scalar is the potential +energy discussed above. The scalar value calculated by this fix is +"extensive". + +No parameter of this fix can be used with the {start/stop} keywords of +the "run"_run.html command. This fix is not invoked during "energy +minimization"_minimize.html. + +[Restrictions:] + +This fix is part of the MESSAGE package. It is only enabled if LAMMPS +was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +A script that uses this command must also use the +"message"_message.html command to setup the messaging protocol with +the other server code. + +[Related commands:] + +"message"_message.html, "server"_server.html + +[Default:] none diff --git a/doc/src/fix_dt_reset.txt b/doc/src/fix_dt_reset.txt index be4fbd255b58983cd52ac8a9fbb1e4144b5a2f6c..0c5a4493ae7d7a2507770720bd025c44f157e5bd 100644 --- a/doc/src/fix_dt_reset.txt +++ b/doc/src/fix_dt_reset.txt @@ -14,7 +14,7 @@ fix ID group-ID dt/reset N Tmin Tmax Xmax keyword values ... :pre ID, group-ID are documented in "fix"_fix.html command dt/reset = style name of this fix command -N = recompute dt every N timesteps +N = re-compute dt every N timesteps Tmin = minimum dt allowed which can be NULL (time units) Tmax = maximum dt allowed which can be NULL (time units) Xmax = maximum distance for an atom to move in one timestep (distance units) diff --git a/doc/src/fix_ffl.txt b/doc/src/fix_ffl.txt new file mode 100644 index 0000000000000000000000000000000000000000..ea33dc432f749dbb636ef245323e1390644c0d5f --- /dev/null +++ b/doc/src/fix_ffl.txt @@ -0,0 +1,124 @@ + + + +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +fix ffl command :h3 + +[Syntax:] + +fix ID id-group ffl tau Tstart Tstop seed \[flip-type\] :pre + +ID, group-ID are documented in "fix"_fix.html command :ulb,l +ffl = style name of this fix command :l +tau = thermostat parameter (positive real) :l +Tstart, Tstop = temperature ramp during the run :l +seed = random number seed to use for generating noise (positive integer) :l +one more value may be appended :l + flip-type = determines the flipping type, can be chosen between rescale - no_flip - hard - soft, if no flip type is given, rescale will be chosen by default :pre +:ule + +[Examples:] + +fix 3 boundary ffl 10 300 300 31415 +fix 1 all ffl 100 500 500 9265 soft :pre + +[Description:] + +Apply a Fast-Forward Langevin Equation (FFL) thermostat as described +in "(Hijazi)"_#Hijazi. Contrary to +"fix langevin"_fix_langevin.html, this fix performs both +thermostatting and evolution of the Hamiltonian equations of motion, so it +should not be used together with "fix nve"_fix_nve.html -- at least not +on the same atom groups. + +The time-evolution of a single particle undergoing Langevin dynamics is described +by the equations + +\begin\{equation\} \frac \{dq\}\{dt\} = \frac\{p\}\{m\}, \end\{equation\} + +\begin\{equation\} \frac \{dp\}\{dt\} = -\gamma p + W + F, \end\{equation\} + +where \(F\) is the physical force, \(\gamma\) is the friction coefficient, and \(W\) is a +Gaussian random force. + +The friction coefficient is the inverse of the thermostat parameter : \(\gamma = 1/\tau\), with \(\tau\) the thermostat parameter {tau}. +The thermostat parameter is given in the time units, \(\gamma\) is in inverse time units. + +Equilibrium sampling a temperature T is obtained by specifying the +target value as the {Tstart} and {Tstop} arguments, so that the internal +constants depending on the temperature are computed automatically. + +The random number {seed} must be a positive integer. A Marsaglia random +number generator is used. Each processor uses the input seed to +generate its own unique seed and its own stream of random numbers. +Thus the dynamics of the system will not be identical on two runs on +different numbers of processors. + +The flipping type {flip-type} can be chosen between 4 types described in +"(Hijazi)"_#Hijazi. The flipping operation occurs during the thermostatting +step and it flips the momenta of the atoms. If no_flip is chosen, no flip +will be executed and the integration will be the same as a standard +Langevin thermostat "(Bussi)"_#Bussi3. The other flipping types are : rescale - hard - soft. + +[Restart, fix_modify, output, run start/stop, minimize info:] + +The instantaneous values of the extended variables are written to +"binary restart files"_restart.html. Because the state of the random +number generator is not saved in restart files, this means you cannot +do "exact" restarts with this fix, where the simulation continues on +the same as if no restart had taken place. However, in a statistical +sense, a restarted simulation should produce the same behavior. +Note however that you should use a different seed each time you +restart, otherwise the same sequence of random numbers will be used +each time, which might lead to stochastic synchronization and +subtle artefacts in the sampling. + +This fix can ramp its target temperature over multiple runs, using the +{start} and {stop} keywords of the "run"_run.html command. See the +"run"_run.html command for details of how to do this. + +The "fix_modify"_fix_modify.html {energy} option is supported by this +fix to add the energy change induced by Langevin thermostatting to the +system's potential energy as part of "thermodynamic +output"_thermo_style.html. + +This fix computes a global scalar which can be accessed by various +"output commands"_Howto_output.html. The scalar is the cumulative +energy change due to this fix. The scalar value calculated by this +fix is "extensive". + +[Restrictions:] + +In order to perform constant-pressure simulations please use +"fix press/berendsen"_fix_press_berendsen.html, rather than +"fix npt"_fix_nh.html, to avoid duplicate integration of the +equations of motion. + +This fix is part of the USER-MISC package. It is only enabled if +LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"fix nvt"_fix_nh.html, "fix temp/rescale"_fix_temp_rescale.html, "fix +viscous"_fix_viscous.html, "fix nvt"_fix_nh.html, "pair_style +dpd/tstat"_pair_dpd.html, "fix gld"_fix_gld.html, "fix gle"_fix_gle.html + +:line + +:link(Hijazi) +[(Hijazi)] M. Hijazi, D. M. Wilkins, M. Ceriotti, J. Chem. Phys. 148, 184109 (2018) +:link(Bussi3) +[(Bussi)] G. Bussi, M. Parrinello, Phs. Rev. E 75, 056707 (2007) + diff --git a/doc/src/fix_filter_corotate.txt b/doc/src/fix_filter_corotate.txt index b30966c2f941de518e42f4c90463f543a21fdad5..4868761d4207675072fc00c1f6fd66c1c7a06629 100644 --- a/doc/src/fix_filter_corotate.txt +++ b/doc/src/fix_filter_corotate.txt @@ -47,7 +47,7 @@ this can significantly accelerate the simulation. The filter computes a cluster decomposition of the molecular structure following the criteria indicated by the options a, b, t and m. This process is similar to the approach in "fix shake"_fix_shake.html, -however, the clusters are not kept contrained. Instead, the position +however, the clusters are not kept constrained. Instead, the position is slightly modified only for the computation of long-range forces. A good cluster decomposition constitutes in building clusters which contain the fastest covalent bonds inside clusters. diff --git a/doc/src/fix_ipi.txt b/doc/src/fix_ipi.txt index b115aba7dfa38d5a85a0aee82000d2e8bf568fcd..64486a9cc7922efb7a689c09aaba3b98d652671a 100644 --- a/doc/src/fix_ipi.txt +++ b/doc/src/fix_ipi.txt @@ -63,7 +63,7 @@ electrostatics, or that contain parameters that depend on box size: all of these options will be initialized based on the cell size in the LAMMPS-side initial configuration and kept constant during the run. This is required to e.g. obtain reproducible and conserved forces. -If the cell varies too wildly, it may be advisable to reinitialize +If the cell varies too wildly, it may be advisable to re-initialize these interactions at each call. This behavior can be requested by setting the {reset} switch. diff --git a/doc/src/fix_langevin_spin.txt b/doc/src/fix_langevin_spin.txt index 7bb25e0a687af2c0af3f14a1ccd9d0c9a73e7257..d4836706e2a8577cc3c27b70d9f630aaec1ede51 100644 --- a/doc/src/fix_langevin_spin.txt +++ b/doc/src/fix_langevin_spin.txt @@ -34,7 +34,7 @@ the following stochastic differential equation: :c,image(Eqs/fix_langevin_spin_sLLG.jpg) -with lambda the transverse damping, and eta a random verctor. +with lambda the transverse damping, and eta a random vector. This equation is referred to as the stochastic Landau-Lifshitz-Gilbert (sLLG) equation. diff --git a/doc/src/fix_latte.txt b/doc/src/fix_latte.txt index bd61e29dcb66f9c19772345cbe3c19161143474e..c97095bcfc98c015f59c271dc9aa70249351c587 100644 --- a/doc/src/fix_latte.txt +++ b/doc/src/fix_latte.txt @@ -44,7 +44,7 @@ Once LAMMPS is built with the LATTE package, you can run the example input scripts for molecular dynamics or energy minimization that are found in examples/latte. -A step-by-step tutorial can be follwed at: "LAMMPS-LATTE +A step-by-step tutorial can be followed at: "LAMMPS-LATTE tutorial"_https://github.com/lanl/LATTE/wiki/Using-LATTE-through-LAMMPS The {peID} argument is not yet supported by fix latte, so it must be diff --git a/doc/src/fix_lb_fluid.txt b/doc/src/fix_lb_fluid.txt index 1a5239782268f34870cd3ec3faac1b560f7c451a..d9012d8cb396371d3fd4568cbba35b19c5d6e275 100644 --- a/doc/src/fix_lb_fluid.txt +++ b/doc/src/fix_lb_fluid.txt @@ -187,7 +187,7 @@ NOTE: Care must be taken when choosing both a value for dx, and a simulation domain size. This fix uses the same subdivision of the simulation domain among processors as the main LAMMPS program. In order to uniformly cover the simulation domain with lattice sites, the -lengths of the individual LAMMPS subdomains must all be evenly +lengths of the individual LAMMPS sub-domains must all be evenly divisible by dx. If the simulation domain size is cubic, with equal lengths in all dimensions, and the default value for dx is used, this will automatically be satisfied. diff --git a/doc/src/fix_modify.txt b/doc/src/fix_modify.txt index ddb5f9a4cd4346e6f0d3195a101445c15eaedfde..f50747948a91152948fa1c31e4037ef735d2035a 100644 --- a/doc/src/fix_modify.txt +++ b/doc/src/fix_modify.txt @@ -21,7 +21,7 @@ keyword = {temp} or {press} or {energy} or {virial} or {respa} or {dynamic/dof} {virial} value = {yes} or {no} {respa} value = {1} to {max respa level} or {0} (for outermost level) {dynamic/dof} value = {yes} or {no} - yes/no = do or do not recompute the number of degrees of freedom (DOF) contributing to the temperature + yes/no = do or do not re-compute the number of degrees of freedom (DOF) contributing to the temperature {bodyforces} value = {early} or {late} early/late = compute rigid-body forces/torques early or late in the timestep :pre :ule diff --git a/doc/src/fix_msst.txt b/doc/src/fix_msst.txt index e31f61e5f7c815c8a0253b3db69b6f8c8fcb6a35..7f0e5512ae6d2df4d59e64e8281c6318f0ef4f9c 100644 --- a/doc/src/fix_msst.txt +++ b/doc/src/fix_msst.txt @@ -6,7 +6,7 @@ :line - fix msst command :h3 +fix msst command :h3 [Syntax:] diff --git a/doc/src/fix_neb.txt b/doc/src/fix_neb.txt index d331d9ad75fbf7c2a203bfe68bb1035abcfd410a..521dfff12b2fe03b0b8c5aa221e1a63abb596676 100644 --- a/doc/src/fix_neb.txt +++ b/doc/src/fix_neb.txt @@ -168,7 +168,7 @@ The difference between these two {estyle} options is as follows. When {estyle} is specified as {last/efirst}, no change is made to the inter-replica force applied to the intermediate replicas (neither first or last). If the initial path is too far from the MEP, an -intermediate repilica may relax "faster" and reach a lower energy than +intermediate replica may relax "faster" and reach a lower energy than the last replica. In this case the intermediate replica will be relaxing toward its own local minima. This behavior can be prevented by specifying {estyle} as {last/efirst/middle} which will alter the diff --git a/doc/src/fix_nh_uef.txt b/doc/src/fix_nh_uef.txt index ae403cafd1d8ff7c5ee8f6e7fcc0589dd9437cb6..dc05948de338c24441d5d1849c6f347dc2a8e311 100644 --- a/doc/src/fix_nh_uef.txt +++ b/doc/src/fix_nh_uef.txt @@ -174,7 +174,7 @@ This fix can be used with the "fix_modify"_fix_modify.html {temp} and {press} options. The temperature and pressure computes used must be of type {temp/uef} and {pressure/uef}. -This fix computes the same global scalar and vecor quantities as "fix +This fix computes the same global scalar and vector quantities as "fix npt"_fix_nh.html. The fix is not invoked during "energy minimization"_minimize.html. diff --git a/doc/src/fix_nve_awpmd.txt b/doc/src/fix_nve_awpmd.txt new file mode 100644 index 0000000000000000000000000000000000000000..c266d46eeebd7c4326eb7d391df247c5f270a37a --- /dev/null +++ b/doc/src/fix_nve_awpmd.txt @@ -0,0 +1,56 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +fix nve/awpmd command :h3 + +[Syntax:] + +fix ID group-ID nve/awpmd :pre + +ID, group-ID are documented in "fix"_fix.html command +nve/awpmd = style name of this fix command :ul + +[Examples:] + +fix 1 all nve/awpmd :pre + +[Description:] + +Perform constant NVE integration to update position and velocity for +nuclei and electrons in the group for the "Antisymmetrized Wave Packet +Molecular Dynamics"_pair_awpmd.html model. V is volume; E is energy. +This creates a system trajectory consistent with the microcanonical +ensemble. + +The operation of this fix is exactly like that described by the "fix +nve"_fix_nve.html command, except that the width and width-velocity of +the electron wavefunctions are also updated. + +:line + +[Restart, fix_modify, output, run start/stop, minimize info:] + +No information about this fix is written to "binary restart +files"_restart.html. None of the "fix_modify"_fix_modify.html options +are relevant to this fix. No global or per-atom quantities are stored +by this fix for access by various "output commands"_Howto_output.html. +No parameter of this fix can be used with the {start/stop} keywords of +the "run"_run.html command. This fix is not invoked during "energy +minimization"_minimize.html. + +[Restrictions:] + +This fix is part of the USER-AWPMD package. It is only enabled if +LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"fix nve"_fix_nve.html + +[Default:] none diff --git a/doc/src/fix_nvt_sllod.txt b/doc/src/fix_nvt_sllod.txt index 97a864a231d32cbc503031840d17384fcfa8e44f..7a350e48b5fe81fd9fbf8f6802b7d5e3ef17f6a9 100644 --- a/doc/src/fix_nvt_sllod.txt +++ b/doc/src/fix_nvt_sllod.txt @@ -63,6 +63,11 @@ implemented in LAMMPS, they are coupled to a Nose/Hoover chain thermostat in a velocity Verlet formulation, closely following the implementation used for the "fix nvt"_fix_nh.html command. +NOTE: A recent (2017) book by "(Daivis and Todd)"_#Daivis-sllod +discusses use of the SLLOD method and non-equilibrium MD (NEMD) +thermostatting generally, for both simple and complex fluids, +e.g. molecular systems. The latter can be tricky to do correctly. + Additional parameters affecting the thermostat are specified by keywords and values documented with the "fix nvt"_fix_nh.html command. See, for example, discussion of the {temp} and {drag} @@ -177,3 +182,7 @@ Same as "fix nvt"_fix_nh.html, except tchain = 1. :link(Daivis) [(Daivis and Todd)] Daivis and Todd, J Chem Phys, 124, 194103 (2006). + +:link(Daivis-sllod) +[(Daivis and Todd)] Daivis and Todd, Nonequilibrium Molecular Dyanmics (book), +Cambridge University Press, https://doi.org/10.1017/9781139017848, (2017). diff --git a/doc/src/fix_poems.txt b/doc/src/fix_poems.txt index 52ab0ca44d7a740113441c0dd9d9e9a55f9b84a3..8fe793ce7f3d77405e4c65de9b9348b6f1ee2130 100644 --- a/doc/src/fix_poems.txt +++ b/doc/src/fix_poems.txt @@ -6,7 +6,7 @@ :line -fix poems :h3 +fix poems command :h3 Syntax: diff --git a/doc/src/fix_property_atom.txt b/doc/src/fix_property_atom.txt index 8a70cd8213ccc223c279e6961bf31b059c2dbf1d..19e3b0ca40773c2bb4e2d2b01fc6bd3173d2946e 100644 --- a/doc/src/fix_property_atom.txt +++ b/doc/src/fix_property_atom.txt @@ -7,6 +7,7 @@ :line fix property/atom command :h3 +fix property/atom/kk command :h3 [Syntax:] @@ -201,6 +202,7 @@ added classes. :line :link(isotopes) + Example for using per-atom masses with TIP4P water to study isotope effects. When setting up simulations with the "TIP4P pair styles"_Howto_tip4p.html for water, you have to provide exactly @@ -238,6 +240,28 @@ set group hwat mass 2.0141018 :pre :line +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +functionally the same as the corresponding style without the suffix. +They have been optimized to run faster, depending on your available +hardware, as discussed on the "Speed packages"_Speed_packages.html doc +page. The accelerated styles take the same arguments and should +produce the same results, except for round-off and precision issues. + +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Build +package"_Build_package.html doc page for more info. + +You can specify the accelerated styles explicitly in your input script +by including their suffix, or you can use the "-suffix command-line +switch"_Run_options.html when you invoke LAMMPS, or you can use the +"suffix"_suffix.html command in your input script. + +See the "Speed packages"_Speed_packages.html doc page for more +instructions on how to use the accelerated styles effectively. + +:line + [Restart, fix_modify, output, run start/stop, minimize info:] This fix writes the per-atom values it stores to "binary restart diff --git a/doc/src/fix_rhok.txt b/doc/src/fix_rhok.txt index a3d1ab702ebd6b28c55215a80d40d548017cc863..f013ebfae1ca4e28fe6b0335237f31fa78d568b4 100644 --- a/doc/src/fix_rhok.txt +++ b/doc/src/fix_rhok.txt @@ -11,7 +11,7 @@ fix rhok command :h3 fix ID group-ID rhok nx ny nz K a :pre ID, group-ID are documented in "fix"_fix.html command -nx, ny, nz = k-vektor of collective density field +nx, ny, nz = k-vector of collective density field K = spring constant of bias potential a = anchor point of bias potential :ul diff --git a/doc/src/fix_rigid.txt b/doc/src/fix_rigid.txt index d489762e8022bdfe7f4d82af51a7642fe8fbd286..5d65856735d4125a6b0e62cebfb5b6980914622c 100644 --- a/doc/src/fix_rigid.txt +++ b/doc/src/fix_rigid.txt @@ -442,11 +442,11 @@ couple none :pre The keyword/value option pairs are used in the following ways. The {reinit} keyword determines, whether the rigid body properties -are reinitialized between run commands. With the option {yes} (the +are re-initialized between run commands. With the option {yes} (the default) this is done, with the option {no} this is not done. Turning -off the reinitialization can be helpful to protect rigid bodies against +off the re-initialization can be helpful to protect rigid bodies against unphysical manipulations between runs or when properties cannot be -easily recomputed (e.g. when read from a file). When using the {infile} +easily re-computed (e.g. when read from a file). When using the {infile} keyword, the {reinit} option is automatically set to {no}. The {langevin} and {temp} and {tparam} keywords perform thermostatting diff --git a/doc/src/fix_shake.txt b/doc/src/fix_shake.txt index 77bb5794f6d8e91852c1eb1857357e25e13337a9..5c11f96b98d6b3dfe1c76e82e08216b7a8748e00 100644 --- a/doc/src/fix_shake.txt +++ b/doc/src/fix_shake.txt @@ -214,8 +214,10 @@ which can lead to poor energy conservation. You can test for this in your system by running a constant NVE simulation with a particular set of SHAKE parameters and monitoring the energy versus time. -SHAKE or RATTLE should not be used to constrain an angle at 180 degrees -(e.g. linear CO2 molecule). This causes numeric difficulties. +SHAKE or RATTLE should not be used to constrain an angle at 180 +degrees (e.g. linear CO2 molecule). This causes numeric difficulties. +You can use "fix rigid or fix rigid/small"_fix_rigid.html instead to +make a linear molecule rigid. [Related commands:] none diff --git a/doc/src/fix_smd.txt b/doc/src/fix_smd.txt index 644c04eadb9efe7e64d6f51f68893e8d9e59a1e7..774842c7cfe83a47faa17aea140313a81e124fdb 100644 --- a/doc/src/fix_smd.txt +++ b/doc/src/fix_smd.txt @@ -77,7 +77,7 @@ normalized. But since it represents the {absolute} displacement of group-ID2 relative to the fix group, (1,1,0) is a different spring than (-1,-1,0). For each vector component, the displacement can be described with the {auto} parameter. In this case the direction is -recomputed in every step, which can be useful for steering a local +re-computed in every step, which can be useful for steering a local process where the whole object undergoes some other change. When the relative positions and distance between the two groups are not in equilibrium, the same spring force described above is applied to atoms diff --git a/doc/src/fix_smd_move_triangulated_surface.txt b/doc/src/fix_smd_move_triangulated_surface.txt index 2a998ba8c6128b86ebd42c9e9f80ad03d07caf50..fca21b78f7e6a65fd5455191f3e53fefd9146346 100644 --- a/doc/src/fix_smd_move_triangulated_surface.txt +++ b/doc/src/fix_smd_move_triangulated_surface.txt @@ -73,7 +73,7 @@ package"_Build_package.html doc page for more info. [Related commands:] -"smd/triangle_mesh_vertices"_compute_smd_triangle_mesh_vertices.html, +"smd/triangle_mesh_vertices"_compute_smd_triangle_vertices.html, "smd/wall_surface"_fix_smd_wall_surface.html [Default:] none diff --git a/doc/src/fix_smd_wall_surface.txt b/doc/src/fix_smd_wall_surface.txt index dc3625e95ed18df89d863785613a5241d80ece76..47527363a2cb93a0c25d243ebbc8af30ed197608 100644 --- a/doc/src/fix_smd_wall_surface.txt +++ b/doc/src/fix_smd_wall_surface.txt @@ -64,7 +64,7 @@ multiple objects in one file. [Related commands:] -"smd/triangle_mesh_vertices"_compute_smd_triangle_mesh_vertices.html, +"smd/triangle_mesh_vertices"_compute_smd_triangle_vertices.html, "smd/move_tri_surf"_fix_smd_move_triangulated_surface.html, "smd/tri_surface"_pair_smd_triangulated_surface.html diff --git a/doc/src/fix_surface_global.txt b/doc/src/fix_surface_global.txt deleted file mode 100644 index ade64d2056e0e23e58e3e762620077d6ada3f1f1..0000000000000000000000000000000000000000 --- a/doc/src/fix_surface_global.txt +++ /dev/null @@ -1,19 +0,0 @@ -"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c - -:link(lws,http://lammps.sandia.gov) -:link(ld,Manual.html) -:link(lc,Commands_all.html) - -:line - -fix wall/surface/globale command :h3 - -[Description:] - -This feature is not yet implemented. - -[Related commands:] - -"dump image"_dump_image.html - - diff --git a/doc/src/fix_wall_gran.txt b/doc/src/fix_wall_gran.txt index 0ea5b194ebefe000653562444ba455793b0a5da4..871ee2e5d16fd3a73858bf45c96edc362c136f89 100644 --- a/doc/src/fix_wall_gran.txt +++ b/doc/src/fix_wall_gran.txt @@ -7,6 +7,7 @@ :line fix wall/gran command :h3 +fix wall/gran/omp command :h3 [Syntax:] @@ -136,6 +137,28 @@ the clockwise direction for {vshear} > 0 or counter-clockwise for {vshear} < 0. In this case, {vshear} is the tangential velocity of the wall at whatever {radius} has been defined. +:line + +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +functionally the same as the corresponding style without the suffix. +They have been optimized to run faster, depending on your available +hardware, as discussed on the "Speed packages"_Speed_packages.html doc +page. The accelerated styles take the same arguments and should +produce the same results, except for round-off and precision issues. + +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Build +package"_Build_package.html doc page for more info. + +You can specify the accelerated styles explicitly in your input script +by including their suffix, or you can use the "-suffix command-line +switch"_Run_options.html when you invoke LAMMPS, or you can use the +"suffix"_suffix.html command in your input script. + +See the "Speed packages"_Speed_packages.html doc page for more +instructions on how to use the accelerated styles effectively. + [Restart, fix_modify, output, run start/stop, minimize info:] This fix writes the shear friction state of atoms interacting with the diff --git a/doc/src/fixes.txt b/doc/src/fixes.txt index 7a45ed8086a14cdc201eea9cce5f28f80b4df00e..66f6633124d06b2d9ce1c648d5bd02c1c834333c 100644 --- a/doc/src/fixes.txt +++ b/doc/src/fixes.txt @@ -26,6 +26,7 @@ Fixes :h1 fix_bond_swap fix_bond_react fix_box_relax + fix_client_md fix_cmap fix_colvars fix_controller @@ -45,6 +46,7 @@ Fixes :h1 fix_eos_table_rx fix_evaporate fix_external + fix_ffl fix_filter_corotate fix_flow_gauss fix_freeze @@ -91,6 +93,7 @@ Fixes :h1 fix_nve fix_nve_asphere fix_nve_asphere_noforce + fix_nve_awpmd fix_nve_body fix_nve_dot fix_nve_dotc_langevin @@ -153,7 +156,6 @@ Fixes :h1 fix_srd fix_store_force fix_store_state - fix_surface_global fix_temp_berendsen fix_temp_csvr fix_temp_rescale diff --git a/doc/src/kspace_modify.txt b/doc/src/kspace_modify.txt index dd7b1e8deadfdd3e6defeddaa0cc85d3e4467370..41973601d7d6f9a6db471304fdbde302c3c6611b 100644 --- a/doc/src/kspace_modify.txt +++ b/doc/src/kspace_modify.txt @@ -13,47 +13,53 @@ kspace_modify command :h3 kspace_modify keyword value ... :pre one or more keyword/value pairs may be listed :ulb,l -keyword = {mesh} or {order} or {order/disp} or {mix/disp} or {overlap} or {minorder} or {force} or {gewald} or {gewald/disp} or {slab} or (nozforce} or {compute} or {cutoff/adjust} or {fftbench} or {collective} or {diff} or {kmax/ewald} or {force/disp/real} or {force/disp/kspace} or {splittol} or {disp/auto}:l +keyword = {collective} or {compute} or {cutoff/adjust} or {diff} or {disp/auto} or {fftbench} or {force/disp/kspace} or {force/disp/real} or {force} or {gewald/disp} or {gewald} or {kmax/ewald} or {mesh} or {minorder} or {mix/disp} or {order/disp} or {order} or {overlap} or {scafacos} or {slab} or {splittol} :l + {collective} value = {yes} or {no} + {compute} value = {yes} or {no} + {cutoff/adjust} value = {yes} or {no} + {diff} value = {ad} or {ik} = 2 or 4 FFTs for PPPM in smoothed or non-smoothed mode + {disp/auto} value = yes or no + {fftbench} value = {yes} or {no} + {force/disp/real} value = accuracy (force units) + {force/disp/kspace} value = accuracy (force units) + {force} value = accuracy (force units) + {gewald} value = rinv (1/distance units) + rinv = G-ewald parameter for Coulombics + {gewald/disp} value = rinv (1/distance units) + rinv = G-ewald parameter for dispersion + {kmax/ewald} value = kx ky kz + kx,ky,kz = number of Ewald sum kspace vectors in each dimension {mesh} value = x y z x,y,z = grid size in each dimension for long-range Coulombics {mesh/disp} value = x y z x,y,z = grid size in each dimension for 1/r^6 dispersion + {minorder} value = M + M = min allowed extent of Gaussian when auto-adjusting to minimize grid communication + {mix/disp} value = {pair} or {geom} or {none} {order} value = N N = extent of Gaussian for PPPM or MSM mapping of charge to grid {order/disp} value = N N = extent of Gaussian for PPPM mapping of dispersion term to grid - {mix/disp} value = {pair} or {geom} or {none} {overlap} = {yes} or {no} = whether the grid stencil for PPPM is allowed to overlap into more than the nearest-neighbor processor - {minorder} value = M - M = min allowed extent of Gaussian when auto-adjusting to minimize grid communication - {force} value = accuracy (force units) - {gewald} value = rinv (1/distance units) - rinv = G-ewald parameter for Coulombics - {gewald/disp} value = rinv (1/distance units) - rinv = G-ewald parameter for dispersion + {pressure/scalar} value = {yes} or {no} + {scafacos} values = option value1 value2 ... + option = {tolerance} + value = {energy} or {energy_rel} or {field} or {field_rel} or {potential} or {potential_rel} + option = {fmm_tuning} + value = {0} or {1} {slab} value = volfactor or {nozforce} volfactor = ratio of the total extended volume used in the 2d approximation compared with the volume of the simulation domain {nozforce} turns off kspace forces in the z direction - {compute} value = {yes} or {no} - {cutoff/adjust} value = {yes} or {no} - {pressure/scalar} value = {yes} or {no} - {fftbench} value = {yes} or {no} - {collective} value = {yes} or {no} - {diff} value = {ad} or {ik} = 2 or 4 FFTs for PPPM in smoothed or non-smoothed mode - {kmax/ewald} value = kx ky kz - kx,ky,kz = number of Ewald sum kspace vectors in each dimension - {force/disp/real} value = accuracy (force units) - {force/disp/kspace} value = accuracy (force units) {splittol} value = tol - tol = relative size of two eigenvalues (see discussion below) - {disp/auto} value = yes or no :pre + tol = relative size of two eigenvalues (see discussion below) :pre :ule [Examples:] kspace_modify mesh 24 24 30 order 6 -kspace_modify slab 3.0 :pre +kspace_modify slab 3.0 +kspace_modify scafacos tolerance energy :pre [Description:] @@ -61,6 +67,132 @@ Set parameters used by the kspace solvers defined by the "kspace_style"_kspace_style.html command. Not all parameters are relevant to all kspace styles. +:line + +The {collective} keyword applies only to PPPM. It is set to {no} by +default, except on IBM BlueGene machines. If this option is set to +{yes}, LAMMPS will use MPI collective operations to remap data for +3d-FFT operations instead of the default point-to-point communication. +This is faster on IBM BlueGene machines, and may also be faster on +other machines if they have an efficient implementation of MPI +collective operations and adequate hardware. + +:line + +The {compute} keyword allows Kspace computations to be turned off, +even though a "kspace_style"_kspace_style.html is defined. This is +not useful for running a real simulation, but can be useful for +debugging purposes or for computing only partial forces that do not +include the Kspace contribution. You can also do this by simply not +defining a "kspace_style"_kspace_style.html, but a Kspace-compatible +"pair_style"_pair_style.html requires a kspace style to be defined. +This keyword gives you that option. + +:line + +The {cutoff/adjust} keyword applies only to MSM. If this option is +turned on, the Coulombic cutoff will be automatically adjusted at the +beginning of the run to give the desired estimated error. Other +cutoffs such as LJ will not be affected. If the grid is not set using +the {mesh} command, this command will also attempt to use the optimal +grid that minimizes cost using an estimate given by +"(Hardy)"_#Hardy1. Note that this cost estimate is not exact, somewhat +experimental, and still may not yield the optimal parameters. + +:line + +The {diff} keyword specifies the differentiation scheme used by the +PPPM method to compute forces on particles given electrostatic +potentials on the PPPM mesh. The {ik} approach is the default for +PPPM and is the original formulation used in "(Hockney)"_#Hockney1. It +performs differentiation in Kspace, and uses 3 FFTs to transfer each +component of the computed fields back to real space for total of 4 +FFTs per timestep. + +The analytic differentiation {ad} approach uses only 1 FFT to transfer +information back to real space for a total of 2 FFTs per timestep. It +then performs analytic differentiation on the single quantity to +generate the 3 components of the electric field at each grid point. +This is sometimes referred to as "smoothed" PPPM. This approach +requires a somewhat larger PPPM mesh to achieve the same accuracy as +the {ik} method. Currently, only the {ik} method (default) can be +used for a triclinic simulation cell with PPPM. The {ad} method is +always used for MSM. + +NOTE: Currently, not all PPPM styles support the {ad} option. Support +for those PPPM variants will be added later. + +:line + +The {disp/auto} option controls whether the pppm/disp is allowed to +generate PPPM parameters automatically. If set to {no}, parameters have +to be specified using the {gewald/disp}, {mesh/disp}, +{force/disp/real} or {force/disp/kspace} keywords, or +the code will stop with an error message. When this option is set to +{yes}, the error message will not appear and the simulation will start. +For a typical application, using the automatic parameter generation +will provide simulations that are either inaccurate or slow. Using this +option is thus not recommended. For guidelines on how to obtain good +parameters, see the "How-To"_Howto_dispersion.html discussion. + +:line + +The {fftbench} keyword applies only to PPPM. It is off by default. If +this option is turned on, LAMMPS will perform a short FFT benchmark +computation and report its timings, and will thus finish a some seconds +later than it would if this option were off. + +:line + +The {force/disp/real} and {force/disp/kspace} keywords set the force +accuracy for the real and space computations for the dispersion part +of pppm/disp. As shown in "(Isele-Holder)"_#Isele-Holder1, optimal +performance and accuracy in the results is obtained when these values +are different. + +:line + +The {force} keyword overrides the relative accuracy parameter set by +the "kspace_style"_kspace_style.html command with an absolute +accuracy. The accuracy determines the RMS error in per-atom forces +calculated by the long-range solver and is thus specified in force +units. A negative value for the accuracy setting means to use the +relative accuracy parameter. The accuracy setting is used in +conjunction with the pairwise cutoff to determine the number of +K-space vectors for style {ewald}, the FFT grid size for style +{pppm}, or the real space grid size for style {msm}. + +:line + +The {gewald} keyword sets the value of the Ewald or PPPM G-ewald +parameter for charge as {rinv} in reciprocal distance units. Without +this setting, LAMMPS chooses the parameter automatically as a function +of cutoff, precision, grid spacing, etc. This means it can vary from +one simulation to the next which may not be desirable for matching a +KSpace solver to a pre-tabulated pairwise potential. This setting can +also be useful if Ewald or PPPM fails to choose a good grid spacing +and G-ewald parameter automatically. If the value is set to 0.0, +LAMMPS will choose the G-ewald parameter automatically. MSM does not +use the {gewald} parameter. + +:line + +The {gewald/disp} keyword sets the value of the Ewald or PPPM G-ewald +parameter for dispersion as {rinv} in reciprocal distance units. It +has the same meaning as the {gewald} setting for Coulombics. + +:line + +The {kmax/ewald} keyword sets the number of kspace vectors in each +dimension for kspace style {ewald}. The three values must be positive +integers, or else (0,0,0), which unsets the option. When this option +is not set, the Ewald sum scheme chooses its own kspace vectors, +consistent with the user-specified accuracy and pairwise cutoff. In +any case, if kspace style {ewald} is invoked, the values used are +printed to the screen and the log file at the start of the run. + +:line + The {mesh} keyword sets the grid size for kspace style {pppm} or {msm}. In the case of PPPM, this is the FFT mesh, and each dimension must be factorizable into powers of 2, 3, and 5. In the case of MSM, @@ -70,6 +202,8 @@ or MSM solver chooses its own grid size, consistent with the user-specified accuracy and pairwise cutoff. Values for x,y,z of 0,0,0 unset the option. +:line + The {mesh/disp} keyword sets the grid size for kspace style {pppm/disp}. This is the FFT mesh for long-range dispersion and ach dimension must be factorizable into powers of 2, 3, and 5. When this @@ -77,6 +211,45 @@ option is not set, the PPPM solver chooses its own grid size, consistent with the user-specified accuracy and pairwise cutoff. Values for x,y,z of 0,0,0 unset the option. +:line + +The {minorder} keyword allows LAMMPS to reduce the {order} setting if +necessary to keep the communication of ghost grid point limited to +exchanges between nearest-neighbor processors. See the discussion of +the {overlap} keyword for details. If the {overlap} keyword is set to +{yes}, which is the default, this is never needed. If it set to {no} +and overlap occurs, then LAMMPS will reduce the order setting, one +step at a time, until the ghost grid overlap only extends to nearest +neighbor processors. The {minorder} keyword limits how small the +{order} setting can become. The minimum allowed value for PPPM is 2, +which is the default. If {minorder} is set to the same value as +{order} then no reduction is allowed, and LAMMPS will generate an +error if the grid communication is non-nearest-neighbor and {overlap} +is set to {no}. The {minorder} keyword is not currently supported in +MSM. + +:line + +The {mix/disp} keyword selects the mixing rule for the dispersion +coefficients. With {pair}, the dispersion coefficients of unlike +types are computed as indicated with "pair_modify"_pair_modify.html. +With {geom}, geometric mixing is enforced on the dispersion +coefficients in the kspace coefficients. When using the arithmetic +mixing rule, this will speed-up the simulations but introduces some +error in the force computations, as shown in "(Wennberg)"_#Wennberg. +With {none}, it is assumed that no mixing rule is +applicable. Splitting of the dispersion coefficients will be performed +as described in "(Isele-Holder)"_#Isele-Holder1. + +This splitting can be influenced with the {splittol} keywords. Only +the eigenvalues that are larger than tol compared to the largest +eigenvalues are included. Using this keywords the original matrix of +dispersion coefficients is approximated. This leads to faster +computations, but the accuracy in the reciprocal space computations of +the dispersion part is decreased. + +:line + The {order} keyword determines how many grid spacings an atom's charge extends when it is mapped to the grid in kspace style {pppm} or {msm}. The default for this parameter is 5 for PPPM and 8 for MSM, which @@ -91,11 +264,23 @@ inherent trade-off involved: a small grid will lower the cost of FFTs or MSM direct sum, but a larger order parameter will increase the cost of interpolating charge/fields to/from the grid. +The PPPM order parameter may be reset by LAMMPS when it sets up the +FFT grid if the implied grid stencil extends beyond the grid cells +owned by neighboring processors. Typically this will only occur when +small problems are run on large numbers of processors. A warning will +be generated indicating the order parameter is being reduced to allow +LAMMPS to run the problem. Automatic adjustment of the order parameter +is not supported in MSM. + +:line + The {order/disp} keyword determines how many grid spacings an atom's dispersion term extends when it is mapped to the grid in kspace style {pppm/disp}. It has the same meaning as the {order} setting for Coulombics. +:line + The {overlap} keyword can be used in conjunction with the {minorder} keyword with the PPPM styles to adjust the amount of communication that occurs when values on the FFT grid are exchanged between @@ -111,53 +296,78 @@ communication will be limited to nearest-neighbor processors and the {minorder} keyword discussion. The {overlap} keyword is always set to {yes} in MSM. -The {minorder} keyword allows LAMMPS to reduce the {order} setting if -necessary to keep the communication of ghost grid point limited to -exchanges between nearest-neighbor processors. See the discussion of -the {overlap} keyword for details. If the {overlap} keyword is set to -{yes}, which is the default, this is never needed. If it set to {no} -and overlap occurs, then LAMMPS will reduce the order setting, one -step at a time, until the ghost grid overlap only extends to nearest -neighbor processors. The {minorder} keyword limits how small the -{order} setting can become. The minimum allowed value for PPPM is 2, -which is the default. If {minorder} is set to the same value as -{order} then no reduction is allowed, and LAMMPS will generate an -error if the grid communication is non-nearest-neighbor and {overlap} -is set to {no}. The {minorder} keyword is not currently supported in -MSM. +:line -The PPPM order parameter may be reset by LAMMPS when it sets up the -FFT grid if the implied grid stencil extends beyond the grid cells -owned by neighboring processors. Typically this will only occur when -small problems are run on large numbers of processors. A warning will -be generated indicating the order parameter is being reduced to allow -LAMMPS to run the problem. Automatic adjustment of the order parameter -is not supported in MSM. +The {pressure/scalar} keyword applies only to MSM. If this option is +turned on, only the scalar pressure (i.e. (Pxx + Pyy + Pzz)/3.0) will +be computed, which can be used, for example, to run an isotropic barostat. +Computing the full pressure tensor with MSM is expensive, and this option +provides a faster alternative. The scalar pressure is computed using a +relationship between the Coulombic energy and pressure "(Hummer)"_#Hummer +instead of using the virial equation. This option cannot be used to access +individual components of the pressure tensor, to compute per-atom virial, +or with suffix kspace/pair styles of MSM, like OMP or GPU. -The {force} keyword overrides the relative accuracy parameter set by -the "kspace_style"_kspace_style.html command with an absolute -accuracy. The accuracy determines the RMS error in per-atom forces -calculated by the long-range solver and is thus specified in force -units. A negative value for the accuracy setting means to use the -relative accuracy parameter. The accuracy setting is used in -conjunction with the pairwise cutoff to determine the number of -K-space vectors for style {ewald}, the FFT grid size for style -{pppm}, or the real space grid size for style {msm}. +:line -The {gewald} keyword sets the value of the Ewald or PPPM G-ewald -parameter for charge as {rinv} in reciprocal distance units. Without -this setting, LAMMPS chooses the parameter automatically as a function -of cutoff, precision, grid spacing, etc. This means it can vary from -one simulation to the next which may not be desirable for matching a -KSpace solver to a pre-tabulated pairwise potential. This setting can -also be useful if Ewald or PPPM fails to choose a good grid spacing -and G-ewald parameter automatically. If the value is set to 0.0, -LAMMPS will choose the G-ewald parameter automatically. MSM does not -use the {gewald} parameter. +The {scafacos} keyword is used for settings that are passed to the +ScaFaCoS library when using "kspace_style scafacos"_kspace_style.html. + +The {tolerance} option affects how the {accuracy} specified with the +"kspace_style"_kspace_style.html command is interpreted by ScaFaCoS. +The following values may be used: + +energy = absolute accuracy in total Coulomic energy +energy_rel = relative accuracy in total Coulomic energy +potential = absolute accuracy in total Coulomic potential +potential_rel = relative accuracy in total Coulomic potential +field = absolute accuracy in electric field +field_rel = relative accuracy in electric field :ul + +The values with suffix _rel indicate the tolerance is a relative +tolerance; the other values impose an absolute tolerance on the given +quantity. Absoulte tolerance in this case means, that for a given +quantity q and a given absolute tolerance of t_a the result should +be between q-t_a and q+t_a. For a relative tolerance t_r the relative +error should not be greater than t_r, i.e. abs(1 - (result/q)) < t_r. +As a consequence of this, the tolerance type should be checked, when +performing computations with a high absolute field / energy. E.g. +if the total energy in the system is 1000000.0 an absolute tolerance +of 1e-3 would mean that the result has to be between 999999.999 and +1000000.001, which would be equivalent to a relative tolerance of +1e-9. + +The energy and energy_rel values, set a tolerance based on the total +Coulomic energy of the system. The potential and potential_rel set a +tolerance based on the per-atom Coulomic energy. The field and +field_rel tolerance types set a tolerance based on the electric field +values computed by ScaFaCoS. Since per-atom forces are derived from +the per-atom electric field, this effectively sets a tolerance on the +forces, simimlar to other LAMMPS KSpace styles, as explained on the +"kspace_style"_kspace_style.html doc page. + +Note that not all ScaFaCoS solvers support all tolerance types. +These are the allowed values for each method: + +fmm = energy and energy_rel +p2nfft = field (1d-,2d-,3d-periodic systems) or potential (0d-periodic) +p3m = field +ewald = field +direct = has no tolerance tuning :ul + +If the tolerance type is not changed, the default values for the +tolerance type are the first values in the above list, e.g. energy +is the default tolerance type for the fmm solver. + +The {fmm_tuning} option is only relevant when using the FMM method. +It activates (value=1) or deactivates (value=0) an internal tuning +mechanism for the FMM solver. The tuning operation runs sequentially +and can be very time-consuming. Usually it is not needed for systems +with a homogenous charge distribution. The default for this option is +therefore {0}. The FMM internal tuning is performed once, when the +solver is set up. -The {gewald/disp} keyword sets the value of the Ewald or PPPM G-ewald -parameter for dispersion as {rinv} in reciprocal distance units. It -has the same meaning as the {gewald} setting for Coulombics. +:line The {slab} keyword allows an Ewald or PPPM solver to be used for a systems that are periodic in x,y but non-periodic in z - a @@ -191,92 +401,7 @@ the "fix efield"_fix_efield.html command, it will not give the correct dielectric constant due to the Yeh/Berkowitz "(Yeh)"_#Yeh correction not being compatible with how "fix efield"_fix_efield.html works. -The {compute} keyword allows Kspace computations to be turned off, -even though a "kspace_style"_kspace_style.html is defined. This is -not useful for running a real simulation, but can be useful for -debugging purposes or for computing only partial forces that do not -include the Kspace contribution. You can also do this by simply not -defining a "kspace_style"_kspace_style.html, but a Kspace-compatible -"pair_style"_pair_style.html requires a kspace style to be defined. -This keyword gives you that option. - -The {cutoff/adjust} keyword applies only to MSM. If this option is -turned on, the Coulombic cutoff will be automatically adjusted at the -beginning of the run to give the desired estimated error. Other -cutoffs such as LJ will not be affected. If the grid is not set using -the {mesh} command, this command will also attempt to use the optimal -grid that minimizes cost using an estimate given by -"(Hardy)"_#Hardy1. Note that this cost estimate is not exact, somewhat -experimental, and still may not yield the optimal parameters. - -The {pressure/scalar} keyword applies only to MSM. If this option is -turned on, only the scalar pressure (i.e. (Pxx + Pyy + Pzz)/3.0) will -be computed, which can be used, for example, to run an isotropic barostat. -Computing the full pressure tensor with MSM is expensive, and this option -provides a faster alternative. The scalar pressure is computed using a -relationship between the Coulombic energy and pressure "(Hummer)"_#Hummer -instead of using the virial equation. This option cannot be used to access -individual components of the pressure tensor, to compute per-atom virial, -or with suffix kspace/pair styles of MSM, like OMP or GPU. - -The {fftbench} keyword applies only to PPPM. It is off by default. If -this option is turned on, LAMMPS will perform a short FFT benchmark -computation and report its timings, and will thus finish a some seconds -later than it would if this option were off. - -The {collective} keyword applies only to PPPM. It is set to {no} by -default, except on IBM BlueGene machines. If this option is set to -{yes}, LAMMPS will use MPI collective operations to remap data for -3d-FFT operations instead of the default point-to-point communication. -This is faster on IBM BlueGene machines, and may also be faster on -other machines if they have an efficient implementation of MPI -collective operations and adequate hardware. - -The {diff} keyword specifies the differentiation scheme used by the -PPPM method to compute forces on particles given electrostatic -potentials on the PPPM mesh. The {ik} approach is the default for -PPPM and is the original formulation used in "(Hockney)"_#Hockney1. It -performs differentiation in Kspace, and uses 3 FFTs to transfer each -component of the computed fields back to real space for total of 4 -FFTs per timestep. - -The analytic differentiation {ad} approach uses only 1 FFT to transfer -information back to real space for a total of 2 FFTs per timestep. It -then performs analytic differentiation on the single quantity to -generate the 3 components of the electric field at each grid point. -This is sometimes referred to as "smoothed" PPPM. This approach -requires a somewhat larger PPPM mesh to achieve the same accuracy as -the {ik} method. Currently, only the {ik} method (default) can be -used for a triclinic simulation cell with PPPM. The {ad} method is -always used for MSM. - -NOTE: Currently, not all PPPM styles support the {ad} option. Support -for those PPPM variants will be added later. - -The {kmax/ewald} keyword sets the number of kspace vectors in each -dimension for kspace style {ewald}. The three values must be positive -integers, or else (0,0,0), which unsets the option. When this option -is not set, the Ewald sum scheme chooses its own kspace vectors, -consistent with the user-specified accuracy and pairwise cutoff. In -any case, if kspace style {ewald} is invoked, the values used are -printed to the screen and the log file at the start of the run. - -With the {mix/disp} keyword one can select the mixing rule for the -dispersion coefficients. With {pair}, the dispersion coefficients of -unlike types are computed as indicated with -"pair_modify"_pair_modify.html. With {geom}, geometric mixing is -enforced on the dispersion coefficients in the kspace -coefficients. When using the arithmetic mixing rule, this will -speed-up the simulations but introduces some error in the force -computations, as shown in "(Wennberg)"_#Wennberg. With {none}, it is -assumed that no mixing rule is applicable. Splitting of the dispersion -coefficients will be performed as described in -"(Isele-Holder)"_#Isele-Holder1. This splitting can be influenced with -the {splittol} keywords. Only the eigenvalues that are larger than tol -compared to the largest eigenvalues are included. Using this keywords -the original matrix of dispersion coefficients is approximated. This -leads to faster computations, but the accuracy in the reciprocal space -computations of the dispersion part is decreased. +:line The {force/disp/real} and {force/disp/kspace} keywords set the force accuracy for the real and space computations for the dispersion part @@ -295,6 +420,8 @@ provide simulations that are either inaccurate or slow. Using this option is thus not recommended. For guidelines on how to obtain good parameters, see the "Howto dispersion"_Howto_dispersion.html doc page. +:line + [Restrictions:] none [Related commands:] @@ -306,10 +433,12 @@ parameters, see the "Howto dispersion"_Howto_dispersion.html doc page. The option defaults are mesh = mesh/disp = 0 0 0, order = order/disp = 5 (PPPM), order = 10 (MSM), minorder = 2, overlap = yes, force = -1.0, gewald = gewald/disp = 0.0, slab = 1.0, compute = yes, cutoff/adjust = -yes (MSM), pressure/scalar = yes (MSM), fftbench = no (PPPM), diff = ik -(PPPM), mix/disp = pair, force/disp/real = -1.0, force/disp/kspace = -1.0, -split = 0, tol = 1.0e-6, and disp/auto = no. For pppm/intel, order = -order/disp = 7. +yes (MSM), pressure/scalar = yes (MSM), fftbench = no (PPPM), diff = +ik (PPPM), mix/disp = pair, force/disp/real = -1.0, force/disp/kspace += -1.0, split = 0, tol = 1.0e-6, and disp/auto = no. For pppm/intel, +order = order/disp = 7. For scafacos settings, the scafacos tolerance +option depends on the method chosen, as documented above. The +scafacos fmm_tuning default = 0. :line diff --git a/doc/src/kspace_style.txt b/doc/src/kspace_style.txt index 7e479c76a64e69a1e8116712457779c0f67b43b6..6d8a2894708477ec6b686c2c1c0a8565c6c030a9 100644 --- a/doc/src/kspace_style.txt +++ b/doc/src/kspace_style.txt @@ -12,7 +12,7 @@ kspace_style command :h3 kspace_style style value :pre -style = {none} or {ewald} or {ewald/disp} or {ewald/omp} or {pppm} or {pppm/cg} or {pppm/disp} or {pppm/tip4p} or {pppm/stagger} or {pppm/disp/tip4p} or {pppm/gpu} or {pppm/kk} or {pppm/omp} or {pppm/cg/omp} or {pppm/tip4p/omp} or {msm} or {msm/cg} or {msm/omp} or {msm/cg/omp} :ulb,l +style = {none} or {ewald} or {ewald/disp} or {ewald/omp} or {pppm} or {pppm/cg} or {pppm/disp} or {pppm/tip4p} or {pppm/stagger} or {pppm/disp/tip4p} or {pppm/gpu} or {pppm/kk} or {pppm/omp} or {pppm/cg/omp} or {pppm/tip4p/omp} or {msm} or {msm/cg} or {msm/omp} or {msm/cg/omp} or {scafacos} :ulb,l {none} value = none {ewald} value = accuracy accuracy = desired relative error in forces @@ -22,7 +22,7 @@ style = {none} or {ewald} or {ewald/disp} or {ewald/omp} or {pppm} or {pppm/cg} accuracy = desired relative error in forces {pppm} value = accuracy accuracy = desired relative error in forces - {pppm/cg} value = accuracy (smallq) + {pppm/cg} values = accuracy (smallq) accuracy = desired relative error in forces smallq = cutoff for charges to be considered (optional) (charge units) {pppm/disp} value = accuracy @@ -56,7 +56,10 @@ style = {none} or {ewald} or {ewald/disp} or {ewald/omp} or {pppm} or {pppm/cg} accuracy = desired relative error in forces {msm/cg/omp} value = accuracy (smallq) accuracy = desired relative error in forces - smallq = cutoff for charges to be considered (optional) (charge units) :pre + smallq = cutoff for charges to be considered (optional) (charge units) + {scafacos} values = method accuracy + method = fmm or p2nfft or ewald or direct + accuracy = desired relative error in forces :pre :ule [Examples:] @@ -64,6 +67,7 @@ style = {none} or {ewald} or {ewald/disp} or {ewald/omp} or {pppm} or {pppm/cg} kspace_style pppm 1.0e-4 kspace_style pppm/cg 1.0e-5 1.0e-6 kspace style msm 1.0e-4 +kspace style scafacos fmm 1.0e-4 kspace_style none :pre [Description:] @@ -211,6 +215,63 @@ pressure simulation with MSM will cause the code to run slower. :line +The {scafacos} style is a wrapper on the "ScaFaCoS Coulomb solver +library"_http://www.scafacos.de which provides a variety of solver +methods which can be used with LAMMPS. The paper by "(Who)"_#Who2012 +gives an overview of ScaFaCoS. + +ScaFaCoS was developed by a consortium of German research facilities +with a BMBF (German Ministry of Science and Education) funded project +in 2009-2012. Participants of the consortium were the Universities of +Bonn, Chemnitz, Stuttgart, and Wuppertal as well as the +Forschungszentrum Juelich. + +The library is available for download at "http://scafacos.de" or can +be cloned from the git-repository +"git://github.com/scafacos/scafacos.git". + +In order to use this KSpace style, you must download and build the +ScaFaCoS library, then build LAMMPS with the USER-SCAFACOS package +installed package which links LAMMPS to the ScaFaCoS library. +See details on "this page"_Section_packages.html#USER-SCAFACOS. + +NOTE: Unlike other KSpace solvers in LAMMPS, ScaFaCoS computes all +Coulombic interactions, both short- and long-range. Thus you should +NOT use a Coulmbic pair style when using kspace_style scafacos. This +also means the total Coulombic energy (short- and long-range) will be +tallied for "thermodynamic output"_thermo_style.html command as part +of the {elong} keyword; the {ecoul} keyword will be zero. + +NOTE: See the current restriction below about use of ScaFaCoS in +LAMMPS with molecular charged systems or the TIP4P water model. + +The specified {method} determines which ScaFaCoS algorithm is used. +These are the ScaFaCoS methods currently available from LAMMPS: + +{fmm} = Fast Multi-Pole method +{p2nfft} = FFT-based Coulomb solver +{ewald} = Ewald summation +{direct} = direct O(N^2) summation +{p3m} = PPPM :ul + +We plan to support additional ScaFaCoS solvers from LAMMPS in the +future. For an overview of the included solvers, refer to +"(Sutmann)"_#Sutmann2013 + +The specified {accuracy} is similar to the accuracy setting for other +LAMMPS KSpace styles, but is passed to ScaFaCoS, which can interpret +it in different ways for different methods it supports. Within the +ScaFaCoS library the {accuracy} is treated as a tolerance level +(either absolute or relative) for the chosen quantity, where the +quantity can be either the Columic field values, the per-atom Columic +energy or the total Columic energy. To select from these options, see +the "kspace_modify scafacos accuracy"_kspace_modify.html doc page. + +The "kspace_modify scafacos"_kspace_modify.html command also explains +other ScaFaCoS options currently exposed to LAMMPS. + +:line + The specified {accuracy} determines the relative RMS error in per-atom forces calculated by the long-range solver. It is set as a dimensionless number, relative to the force that two unit point @@ -321,12 +382,24 @@ dimensions. The only exception is if the slab option is set with "kspace_modify"_kspace_modify.html, in which case the xy dimensions must be periodic and the z dimension must be non-periodic. +The scafacos KSpace style will only be enabled if LAMMPS is built with +the USER-SCAFACOS package. See the "Build package"_Build_package.html +doc page for more info. + +The use of ScaFaCos in LAMMPS does not yet support molecular charged +systems where the short-range Coulombic interactions between atoms in +the same bond/angle/dihedral are weighted by the +"special_bonds"_special_bonds.html command. Likewise it does not +support the "TIP4P water style" where a fictitious charge site is +introduced in each water molecule. + [Related commands:] "kspace_modify"_kspace_modify.html, "pair_style lj/cut/coul/long"_pair_lj.html, "pair_style lj/charmm/coul/long"_pair_charmm.html, "pair_style -lj/long/coul/long"_pair_lj_long.html, "pair_style buck/coul/long"_pair_buck.html +lj/long/coul/long"_pair_lj_long.html, "pair_style +buck/coul/long"_pair_buck.html [Default:] @@ -384,5 +457,12 @@ Evaluation of Forces for the Simulation of Biomolecules, University of Illinois at Urbana-Champaign, (2006). :link(Hardy2009) -[(Hardy2)] Hardy, Stone, Schulten, Parallel Computing 35 (2009) -164-177. +[(Hardy2)] Hardy, Stone, Schulten, Parallel Computing, 35, 164-177 +(2009). + +:link(Sutmann2013) +[(Sutmann)] Sutmann, Arnold, Fahrenberger, et. al., Physical review / E 88(6), 063308 (2013) + +:link(Who2012) +[(Who)] Who, Author2, Author3, J of Long Range Solvers, 35, 164-177 +(2012). diff --git a/doc/src/lammps.book b/doc/src/lammps.book index f1ff39d80b0c0806e1e3e4b6928f95b96abeef27..c006e77d65a0963f96376d0f5a901fb6830bb14b 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -25,6 +25,7 @@ Build_basics.html Build_settings.html Build_package.html Build_extras.html +Build_windows.html Run_head.html Run_basics.html Run_options.html @@ -66,6 +67,7 @@ Howto_multiple.html Howto_replica.html Howto_library.html Howto_couple.html +Howto_client_server.html Howto_output.html Howto_chunk.html Howto_2d.html @@ -166,6 +168,7 @@ label.html lattice.html log.html mass.html +message.html min_modify.html min_style.html minimize.html @@ -193,6 +196,9 @@ reset_timestep.html restart.html run.html run_style.html +server.html +server_mc.html +server_md.html set.html shell.html special_bonds.html @@ -240,6 +246,7 @@ fix_bond_create.html fix_bond_react.html fix_bond_swap.html fix_box_relax.html +fix_client_md.html fix_cmap.html fix_colvars.html fix_controller.html @@ -259,6 +266,7 @@ fix_eos_table.html fix_eos_table_rx.html fix_evaporate.html fix_external.html +fix_ffl.html fix_filter_corotate.html fix_flow_gauss.html fix_freeze.html @@ -304,6 +312,7 @@ fix_npt_sphere.html fix_nve.html fix_nve_asphere.html fix_nve_asphere_noforce.html +fix_nve_awpmd.html fix_nve_body.html fix_nve_dot.html fix_nve_dotc_langevin.html @@ -367,7 +376,6 @@ fix_spring_self.html fix_srd.html fix_store_force.html fix_store_state.html -fix_surface_global.html fix_temp_berendsen.html fix_temp_csvr.html fix_temp_rescale.html @@ -405,6 +413,7 @@ compute_bond.html compute_bond_local.html compute_centro_atom.html compute_chunk_atom.html +compute_chunk_spread_atom.html compute_cluster_atom.html compute_cna_atom.html compute_cnp_atom.html @@ -456,12 +465,15 @@ compute_pe.html compute_pe_atom.html compute_plasticity_atom.html compute_pressure.html +compute_pressure_cylinder.html compute_pressure_uef.html compute_property_atom.html compute_property_chunk.html compute_property_local.html +compute_ptm_atom.html compute_rdf.html compute_reduce.html +compute_reduce_chunk.html compute_rigid_local.html compute_saed.html compute_slice.html @@ -479,7 +491,7 @@ compute_smd_tlsph_shape.html compute_smd_tlsph_strain.html compute_smd_tlsph_strain_rate.html compute_smd_tlsph_stress.html -compute_smd_triangle_mesh_vertices.html +compute_smd_triangle_vertices.html compute_smd_ulsph_num_neighs.html compute_smd_ulsph_strain.html compute_smd_ulsph_strain_rate.html @@ -488,6 +500,7 @@ compute_smd_vol.html compute_sna_atom.html compute_spin.html compute_stress_atom.html +compute_stress_mop.html compute_tally.html compute_tdpd_cc_atom.html compute_temp.html @@ -523,6 +536,7 @@ pair_write.html pair_adp.html pair_agni.html pair_airebo.html +pair_atm.html pair_awpmd.html pair_beck.html pair_body_nparticle.html diff --git a/doc/src/message.txt b/doc/src/message.txt new file mode 100644 index 0000000000000000000000000000000000000000..cca1a5b369fd72d8ffe6eb9db99698c9a39c5e43 --- /dev/null +++ b/doc/src/message.txt @@ -0,0 +1,162 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Command_all.html) + +:line + +message command :h3 + +[Syntax:] + +message which protocol mode arg :pre + +which = {client} or {server} :ulb,l +protocol = {md} or {mc} :l +mode = {file} or {zmq} or {mpi/one} or {mpi/two} :l + {file} arg = filename + filename = file used for message exchanges + {zmq} arg = socket-ID + socket-ID for client = localhost:5555, see description below + socket-ID for server = *:5555, see description below + {mpi/one} arg = none + {mpi/two} arg = filename + filename = file used to establish communication bewteen 2 MPI jobs :pre +:ule + +[Examples:] + +message client md file tmp.couple +message server md file tmp.couple :pre + +message client md zmq localhost:5555 +message server md zmq *:5555 :pre + +message client md mpi/one +message server md mpi/one :pre + +message client md mpi/two tmp.couple +message server md mpi/two tmp.couple :pre + +[Description:] + +Establish a messaging protocol between LAMMPS and another code for the +purpose of client/server coupling. + +The "Howto client/server"_Howto_client_server.html doc page gives an +overview of client/server coupling of LAMMPS with another code where +one code is the "client" and sends request messages to a "server" +code. The server responds to each request with a reply message. This +enables the two codes to work in tandem to perform a simulation. + +:line + +The {which} argument defines LAMMPS to be the client or the server. + +:line + +The {protocol} argument defines the format and content of messages +that will be exchanged between the two codes. The current options +are: + +md = run dynamics with another code +mc = perform Monte Carlo moves with another code :ul + +For protocol {md}, LAMMPS can be either a client or server. See the +"server md"_server_md.html doc page for details on the protocol. + +For protocol {mc}, LAMMPS can be the server. See the "server +mc"_server_mc.html doc page for details on the protocol. + +:line + +The {mode} argument specifies how messages are exchanged between the +client and server codes. Both codes must use the same mode and use +consistent parameters. + +For mode {file}, the 2 codes communicate via binary files. They must +use the same filename, which is actually a file prefix. Several files +with that prefix will be created and deleted as a simulation runs. +The filename can include a path. Both codes must be able to access +the path/file in a common filesystem. + +For mode {zmq}, the 2 codes communicate via a socket on the server +code's machine. Support for socket messaging is provided by the +open-source "ZeroMQ library"_http://zeromq.org, which must be +installed on your system. The client specifies an IP address (IPv4 +format) or the DNS name of the machine the server code is running on, +followed by a 4-digit port ID for the socket, separated by a colon. +E.g. + +localhost:5555 # client and server running on same machine +192.168.1.1:5555 # server is 192.168.1.1 +deptbox.uni.edu:5555 # server is deptbox.uni.edu :pre + +The server specifes "*:5555" where "*" represents all available +interfaces on the server's machine, and the port ID must match +what the client specifies. + +NOTE: What are allowed port IDs? + +NOTE: Additional explanation is needed here about how to use the {zmq} +mode on a parallel machine, e.g. a cluster with many nodes. + +For mode {mpi/one}, the 2 codes communicate via MPI and are launched +by the same mpirun command, e.g. with this syntax for OpenMPI: + +mpirun -np 2 lmp_mpi -mpicolor 0 -in in.client -log log.client : -np 4 othercode args # LAMMPS is client +mpirun -np 2 othercode args : -np 4 lmp_mpi -mpicolor 1 -in in.server # LAMMPS is server :pre + +Note the use of the "-mpicolor color" command-line argument with +LAMMPS. See the "command-line args"_Run_options.html doc page for +further explanation. + +For mode {mpi/two}, the 2 codes communicate via MPI, but are launched +be 2 separate mpirun commands. The specified {filename} argument is a +file the 2 MPI processes will use to exchange info so that an MPI +inter-communicator can be established to enable the 2 codes to send +MPI messages to each other. Both codes must be able to access the +path/file in a common filesystem. + +:line + +Normally, the message command should be used at the top of a LAMMPS +input script. It performs an initial handshake with the other code to +setup messaging and to verify that both codes are using the same +message protocol and mode. Assuming both codes are launched at +(nearly) the same time, the other code should perform the same kind of +initialization. + +If LAMMPS is the client code, it will begin sending messages when a +LAMMPS client command begins its operation. E.g. for the "fix +client/md"_fix_client_md.html command, it is when a "run"_run.html +command is executed. + +If LAMMPS is the server code, it will begin receiving messages when +the "server"_server.html command is invoked. + +A fix client command will terminate its messaging with the server when +LAMMPS ends, or the fix is deleted via the "unfix"_unfix command. The +server command will terminate its messaging with the client when the +client signals it. Then the remainder of the LAMMPS input script will +be processed. + +If both codes do something similar, this means a new round of +client/server messaging can be initiated after termination by re-using +a 2nd message command in your LAMMPS input script, followed by a new +fix client or server command. + +:line + +[Restrictions:] + +This command is part of the MESSAGE package. It is only enabled if +LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"server"_server.html, "fix client/md"_fix_client_md.html + +[Default:] none diff --git a/doc/src/minimize.txt b/doc/src/minimize.txt index 910fc7f821051bee5f28753442d479e85f7f27e7..73858fc24943979921f0e8804f34e138ebb1dc1b 100644 --- a/doc/src/minimize.txt +++ b/doc/src/minimize.txt @@ -216,10 +216,10 @@ The "fix box/relax"_fix_box_relax.html command can be used to apply an external pressure to the simulation box and allow it to shrink/expand during the minimization. -Only a few other fixes (typically those that apply force constraints) -are invoked during minimization. See the doc pages for individual -"fix"_fix.html commands to see which ones are relevant. Current -examples of fixes that can be used include: +Only a few other fixes (typically those that add forces) are invoked +during minimization. See the doc pages for individual "fix"_fix.html +commands to see which ones are relevant. Current examples of fixes +that can be used include: "fix addforce"_fix_addforce.html "fix addtorque"_fix_addtorque.html @@ -242,6 +242,11 @@ you MUST enable the "fix_modify"_fix_modify.html {energy} option for that fix. The doc pages for individual "fix"_fix.html commands specify if this should be done. +NOTE: The minimizers in LAMMPS do not allow for bonds (or angles, etc) +to be held fixed while atom coordinates are being relaxed, e.g. via +"fix shake"_fix_shake.html or "fix rigid"_fix_rigid.html. See more +info in the Restrictions section below. + :line [Restrictions:] diff --git a/doc/src/neb.txt b/doc/src/neb.txt index 57e122fdcd53cec635f42746fd23c475f8fca7fc..75d199e0b4cd91e20e1e5e677ac09da52423c7dc 100644 --- a/doc/src/neb.txt +++ b/doc/src/neb.txt @@ -338,9 +338,9 @@ energy gradient of image i. ReplicaForce is the two-norm of the 3N-length force vector (including nudging forces) for replica i. MaxAtomForce is the maximum force component of any atom in replica i. -When a NEB calculation does not converge properly, the suplementary +When a NEB calculation does not converge properly, the supplementary information can help understanding what is going wrong. For instance -when the path angle becomes accute the definition of tangent used in +when the path angle becomes accute, the definition of tangent used in the NEB calculation is questionable and the NEB cannot may diverge "(Maras)"_#Maras2. diff --git a/doc/src/package.txt b/doc/src/package.txt index 8b0581929ff10cffd2661b5268761e61a276e418..65117ba3c3c15d4ec4e4e2dfd5a27a9fe7115c61 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -363,7 +363,7 @@ specified with the OMP_NUM_THREADS environment variable or the {omp} keyword). The extra thread is dedicated for performing part of the "PPPM solver"_kspace_style.html computations and communications. This can improve parallel performance on processors supporting -Simultaneous Multithreading (SMT) such as Hyperthreading on Intel +Simultaneous Multithreading (SMT) such as Hyper-Threading (HT) on Intel processors. In this mode, one additional thread is generated per MPI process. LAMMPS will generate a warning in the case that more threads are used than available in SMT hardware on a node. If the PPPM solver diff --git a/doc/src/pair_atm.txt b/doc/src/pair_atm.txt new file mode 100644 index 0000000000000000000000000000000000000000..63a450c51a0d63223e7009aec6fd784ad57c3330 --- /dev/null +++ b/doc/src/pair_atm.txt @@ -0,0 +1,164 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +pair_style atm command :h3 + +[Syntax:] + +pair_style atm cutoff cutoff_triple :pre + +cutoff = cutoff for each pair in 3-body interaction (distance units) +cutoff_triple = additional cutoff applied to product of 3 pairwise distances (distance units) :ul + +[Examples:] + +pair_style atm 4.5 2.5 +pair_coeff * * * 0.072 :pre + +pair_style hybrid/overlay lj/cut 6.5 atm 4.5 2.5 +pair_coeff * * lj/cut 1.0 1.0 +pair_coeff 1 1 atm 1 0.064 +pair_coeff 1 1 atm 2 0.080 +pair_coeff 1 2 atm 2 0.100 +pair_coeff 2 2 atm 2 0.125 :pre + +[Description:] + +The {atm} style computes a 3-body "Axilrod-Teller-Muto"_#Axilrod +potential for the energy E of a system of atoms as + +:c,image(Eqs/pair_atm.jpg) + +where nu is the three-body interaction strength. The distances +between pairs of atoms r12, r23, r31 and the angles gamma1, gamma2, +gamma3 are as shown in this diagram: + +:c,image(JPG/pair_atm_dia.jpg) + +Note that for the interaction between a triplet of atoms I,J,K, there +is no "central" atom. The interaction is symmetric with respect to +permutation of the three atoms. Thus the nu value is +the same for all those permutations of the atom types of I,J,K +and needs to be specified only once, as discussed below. + +The {atm} potential is typically used in combination with a two-body +potential using the "pair_style hybrid/overlay"_pair_hybrid.html +command as in the example above. + +The potential for a triplet of atom is calculated only if all 3 +distances r12, r23, r31 between the 3 atoms satisfy rIJ < cutoff. +In addition, the product of the 3 distances r12*r23*r31 < +cutoff_triple^3 is required, which excludes from calculation the +triplets with small contribution to the interaction. + +The following coefficients must be defined for each pair of atoms +types via the "pair_coeff"_pair_coeff.html command as in the examples +above, or in the restart files read by the +"read_restart"_read_restart.html commands: + +K = atom type of the third atom (1 to Ntypes) +nu = prefactor (energy/distance^9 units) :ul + +K can be specified in one of two ways. An explicit numeric value can +be used, as in the 2nd example above. J <= K is required. LAMMPS +sets the coefficients for the other 5 symmetric interactions to the +same values. E.g. if I = 1, J = 2, K = 3, then these 6 values are set +to the specified nu: nu123, nu132, nu213, nu231, nu312, nu321. This +enforces the symmetry discussed above. + +A wildcard asterisk can be used for K to set the coefficients for +multiple triplets of atom types. This takes the form "*" or "*n" or +"n*" or "m*n". If N = the number of atom types, then an asterisk with +no numeric values means all types from 1 to N. A leading asterisk +means all types from 1 to n (inclusive). A trailing asterisk means +all types from n to N (inclusive). A middle asterisk means all types +from m to n (inclusive). Note that only type triplets with J <= K are +considered; if asterisks imply type triplets where K < J, they are +ignored. + +Note that a pair_coeff command can override a previous setting for the +same I,J,K triplet. For example, these commands set nu for all I,J.K +triplets, then overwrite nu for just the I,J,K = 2,3,4 triplet: + +pair_coeff * * * 0.25 +pair_coeff 2 3 4 0.1 :pre + +Note that for a simulation with a single atom type, only a single +entry is required, e.g. + +pair_coeff 1 1 1 0.25 :pre + +For a simulation with two atom types, four pair_coeff commands will +specify all possible nu values: + +pair_coeff 1 1 1 nu1 +pair_coeff 1 1 2 nu2 +pair_coeff 1 2 2 nu3 +pair_coeff 2 2 2 nu4 :pre + +For a simulation with three atom types, ten pair_coeff commands will +specify all possible nu values: + +pair_coeff 1 1 1 nu1 +pair_coeff 1 1 2 nu2 +pair_coeff 1 1 3 nu3 +pair_coeff 1 2 2 nu4 +pair_coeff 1 2 3 nu5 +pair_coeff 1 3 3 nu6 +pair_coeff 2 2 2 nu7 +pair_coeff 2 2 3 nu8 +pair_coeff 2 3 3 nu9 +pair_coeff 3 3 3 nu10 :pre + +By default the nu value for all triplets is set to 0.0. Thus it is +not required to provide pair_coeff commands that enumerate triplet +interactions for all K types. If some I,J,K combination is not +speficied, then there will be no 3-body ATM interactions for that +combination and all its permutations. However, as with all pair +styles, it is required to specify a pair_coeff command for all I,J +combinations, else an error will result. + +:line + +[Mixing, shift, table, tail correction, restart, rRESPA info]: + +This pair styles do not support the "pair_modify"_pair_modify.html +mix, shift, table, and tail options. + +This pair style writes its information to "binary restart +files"_restart.html, so pair_style and pair_coeff commands do not need +to be specified in an input script that reads a restart file. +However, if the {atm} potential is used in combination with other +potentials using the "pair_style hybrid/overlay"_pair_hybrid.html +command then pair_coeff commands need to be re-specified +in the restart input script. + +This pair style can only be used via the {pair} keyword of the +"run_style respa"_run_style.html command. It does not support the +{inner}, {middle}, {outer} keywords. + +:line + +[Restrictions:] + +This pair style is part of the MANYBODY package. It is only enabled +if LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"pair_coeff"_pair_coeff.html + +[Default:] none + +:line + +:link(Axilrod) +[(Axilrod)] +Axilrod and Teller, J Chem Phys, 11, 299 (1943); +Muto, Nippon Sugaku-Buturigakkwaishi 17, 629 (1943). diff --git a/doc/src/pair_body_nparticle.txt b/doc/src/pair_body_nparticle.txt index 158eb68ca8f4c8357167534d0e936db7c4de2cff..7d841119ca55247afc7d2c2ba198f70d11f3a2fc 100644 --- a/doc/src/pair_body_nparticle.txt +++ b/doc/src/pair_body_nparticle.txt @@ -6,7 +6,7 @@ :line -pair_style body command :h3 +pair_style body/nparticle command :h3 [Syntax:] diff --git a/doc/src/pair_born.txt b/doc/src/pair_born.txt index 195d3e666961c321638fe03c1cfc0c67cb2c6c96..9cbfcffea0f8f1445b2c3e234e91cfe818551728 100644 --- a/doc/src/pair_born.txt +++ b/doc/src/pair_born.txt @@ -11,19 +11,14 @@ pair_style born command :h3 pair_style born/omp command :h3 pair_style born/gpu command :h3 pair_style born/coul/long command :h3 -pair_style born/coul/long/cs command :h3 -pair_style born/coul/long/cs/gpu command :h3 pair_style born/coul/long/gpu command :h3 pair_style born/coul/long/omp command :h3 pair_style born/coul/msm command :h3 pair_style born/coul/msm/omp command :h3 pair_style born/coul/wolf command :h3 -pair_style born/coul/wolf/cs command :h3 -pair_style born/coul/wolf/cs/gpu command :h3 pair_style born/coul/wolf/gpu command :h3 pair_style born/coul/wolf/omp command :h3 pair_style born/coul/dsf command :h3 -pair_style born/coul/dsf/cs command :h3 [Syntax:] @@ -55,9 +50,7 @@ pair_coeff * * 6.08 0.317 2.340 24.18 11.51 pair_coeff 1 1 6.08 0.317 2.340 24.18 11.51 :pre pair_style born/coul/long 10.0 -pair_style born/coul/long/cs 10.0 -pair_style born/coul/long 10.0 8.0 -pair_style born/coul/long/cs 10.0 8.0 +pair_style born/coul/long 10.0 8. pair_coeff * * 6.08 0.317 2.340 24.18 11.51 pair_coeff 1 1 6.08 0.317 2.340 24.18 11.51 :pre @@ -68,7 +61,6 @@ pair_coeff 1 1 6.08 0.317 2.340 24.18 11.51 :pre pair_style born/coul/wolf 0.25 10.0 pair_style born/coul/wolf 0.25 10.0 9.0 -pair_style born/coul/wolf/cs 0.25 10.0 9.0 pair_coeff * * 6.08 0.317 2.340 24.18 11.51 pair_coeff 1 1 6.08 0.317 2.340 24.18 11.51 :pre @@ -107,13 +99,6 @@ Wolf potential in the "coul/wolf"_pair_coul.html pair style. The {born/coul/dsf} style computes the Coulomb contribution with the damped shifted force model as in the "coul/dsf"_pair_coul.html style. -Style {born/coul/long/cs} is identical to {born/coul/long} except that -a term is added for the "core/shell model"_Howto_coreshell.html to -allow charges on core and shell particles to be separated by r = 0.0. -The same correction is introduced for the {born/coul/dsf/cs} style -which is identical to {born/coul/dsf}. And likewise for -{born/coul/wolf/cs} style which is identical to {born/coul/wolf}. - Note that these potentials are related to the "Buckingham potential"_pair_buck.html. @@ -174,7 +159,7 @@ for the energy of the exp(), 1/r^6, and 1/r^8 portion of the pair interaction. The {born/coul/long} pair style supports the -"pair_modify"_pair_modify.html table option ti tabulate the +"pair_modify"_pair_modify.html table option to tabulate the short-range portion of the long-range Coulombic interaction. These styles support the pair_modify tail option for adding long-range diff --git a/doc/src/pair_buck.txt b/doc/src/pair_buck.txt index 5b1688e8687345464fb832161360f15700608320..ec83e6b339af4631f1715da351eb98492d1d4871 100644 --- a/doc/src/pair_buck.txt +++ b/doc/src/pair_buck.txt @@ -17,7 +17,6 @@ pair_style buck/coul/cut/intel command :h3 pair_style buck/coul/cut/kk command :h3 pair_style buck/coul/cut/omp command :h3 pair_style buck/coul/long command :h3 -pair_style buck/coul/long/cs command :h3 pair_style buck/coul/long/gpu command :h3 pair_style buck/coul/long/intel command :h3 pair_style buck/coul/long/kk command :h3 @@ -29,14 +28,14 @@ pair_style buck/coul/msm/omp command :h3 pair_style style args :pre -style = {buck} or {buck/coul/cut} or {buck/coul/long} or {buck/coul/long/cs} or {buck/coul/msm} +style = {buck} or {buck/coul/cut} or {buck/coul/long} or {buck/coul/msm} args = list of arguments for a particular style :ul {buck} args = cutoff cutoff = global cutoff for Buckingham interactions (distance units) {buck/coul/cut} args = cutoff (cutoff2) cutoff = global cutoff for Buckingham (and Coulombic if only 1 arg) (distance units) cutoff2 = global cutoff for Coulombic (optional) (distance units) - {buck/coul/long} or {buck/coul/long/cs} args = cutoff (cutoff2) + {buck/coul/long} args = cutoff (cutoff2) cutoff = global cutoff for Buckingham (and Coulombic if only 1 arg) (distance units) cutoff2 = global cutoff for Coulombic (optional) (distance units) {buck/coul/msm} args = cutoff (cutoff2) @@ -56,9 +55,7 @@ pair_coeff 1 1 100.0 1.5 200.0 9.0 pair_coeff 1 1 100.0 1.5 200.0 9.0 8.0 :pre pair_style buck/coul/long 10.0 -pair_style buck/coul/long/cs 10.0 pair_style buck/coul/long 10.0 8.0 -pair_style buck/coul/long/cs 10.0 8.0 pair_coeff * * 100.0 1.5 200.0 pair_coeff 1 1 100.0 1.5 200.0 9.0 :pre @@ -92,10 +89,6 @@ A,C and Coulombic terms. If two cutoffs are specified, the first is used as the cutoff for the A,C terms, and the second is the cutoff for the Coulombic term. -Style {buck/coul/long/cs} is identical to {buck/coul/long} except that -a term is added for the "core/shell model"_Howto_coreshell.html to -allow charges on core and shell particles to be separated by r = 0.0. - Note that these potentials are related to the "Born-Mayer-Huggins potential"_pair_born.html. @@ -184,8 +177,7 @@ respa"_run_style.html command. They do not support the {inner}, [Restrictions:] -The {buck/coul/long} style is part of the KSPACE package. The -{buck/coul/long/cs} style is part of the CORESHELL package. They are +The {buck/coul/long} style is part of the KSPACE package. They are only enabled if LAMMPS was built with that package. See the "Build package"_Build_package.html doc page for more info. diff --git a/doc/src/pair_buck6d_coul_gauss.txt b/doc/src/pair_buck6d_coul_gauss.txt index 4c43978fe5a44eae7d15fc21aecf5e2d2c8f780c..21de3330f45e8b6c55f7bfe02cedfd7f9768b022 100644 --- a/doc/src/pair_buck6d_coul_gauss.txt +++ b/doc/src/pair_buck6d_coul_gauss.txt @@ -6,8 +6,8 @@ :line -pair_style buck6d/coul/gauss/dsf :h3 -pair_style buck6d/coul/gauss/long :h3 +pair_style buck6d/coul/gauss/dsf command :h3 +pair_style buck6d/coul/gauss/long command :h3 [Syntax:] @@ -52,18 +52,18 @@ The latter corrects for artifacts occurring at short distances which become an issue for soft vdW potentials. The {buck6d} styles include a smoothing function which is invoked -according to the global smooting parameter within the specified +according to the global smoothing parameter within the specified cutoff. Hereby a parameter of i.e. 0.9 invokes the smoothing within 90% of the cutoff. No smoothing is applied at a value of 1.0. For the {gauss/dsf} style this smoothing is only applicable for the dispersion damped Buckingham potential. For the {gauss/long} styles the smoothing function can also be invoked for the real -space coulomb interactions which enforce continous energies and +space coulomb interactions which enforce continuous energies and forces at the cutoff. Both styles {buck6d/coul/gauss/dsf} and {buck6d/coul/gauss/long} evaluate a Coulomb potential using spherical Gaussian type charge -distributions which effectively dampen electrostatic ineractions +distributions which effectively dampen electrostatic interactions for high charges at close distances. The electrostatic potential is thus evaluated as: diff --git a/doc/src/pair_charmm.txt b/doc/src/pair_charmm.txt index dfc87e1bcebf2c650867f24436da365ce516a40a..131e289227be7f021e54e7a6985111ea6f9e9136 100644 --- a/doc/src/pair_charmm.txt +++ b/doc/src/pair_charmm.txt @@ -8,12 +8,15 @@ pair_style lj/charmm/coul/charmm command :h3 pair_style lj/charmm/coul/charmm/intel command :h3 +pair_style lj/charmm/coul/charmm/kk command :h3 pair_style lj/charmm/coul/charmm/omp command :h3 pair_style lj/charmm/coul/charmm/implicit command :h3 +pair_style lj/charmm/coul/charmm/implicit/kk command :h3 pair_style lj/charmm/coul/charmm/implicit/omp command :h3 pair_style lj/charmm/coul/long command :h3 pair_style lj/charmm/coul/long/gpu command :h3 pair_style lj/charmm/coul/long/intel command :h3 +pair_style lj/charmm/coul/long/kk command :h3 pair_style lj/charmm/coul/long/opt command :h3 pair_style lj/charmm/coul/long/omp command :h3 pair_style lj/charmm/coul/msm command :h3 diff --git a/doc/src/pair_coeff.txt b/doc/src/pair_coeff.txt index 63f85f23d5e480a77ccc5f0c673cdde81d5a2d16..88f95b5b2cb6f62fc2b2ea903093c21509e46c45 100644 --- a/doc/src/pair_coeff.txt +++ b/doc/src/pair_coeff.txt @@ -128,7 +128,7 @@ There are also additional accelerated pair styles (not listed on the distribution for faster performance on CPUs, GPUs, and KNLs. The individual style names on the "Commands pair"_Commands_pair.html doc page are followed by one or more of (g,i,k,o,t) to indicate which -accerlerated styles exist. +accelerated styles exist. :line diff --git a/doc/src/pair_coul_shield.txt b/doc/src/pair_coul_shield.txt index 62ac157e76cf4b78797dfc2a073d9007c7eee270..df04e76de9d296a28b10723e15ee7b6c005c05ad 100644 --- a/doc/src/pair_coul_shield.txt +++ b/doc/src/pair_coul_shield.txt @@ -38,7 +38,8 @@ charge and molecule ID information is included. Where Tap(r_ij) is the taper function which provides a continuous cutoff (up to third derivative) for inter-atomic separations larger than r_c -"(Maaravi)"_#Maaravi1. Here {lambda} is the shielding parameter that +"(Leven1)"_#Leven3, "(Leven2)"_#Leven4 and "(Maaravi)"_#Maaravi1. +Here {lambda} is the shielding parameter that eliminates the short-range singularity of the classical mono-polar electrostatic interaction expression "(Maaravi)"_#Maaravi1. @@ -82,5 +83,11 @@ package"_Build_package.html doc page for more info. :line +:link(Leven3) +[(Leven1)] I. Leven, I. Azuri, L. Kronik and O. Hod, J. Chem. Phys. 140, 104106 (2014). + +:link(Leven4) +[(Leven2)] I. Leven et al, J. Chem.Theory Comput. 12, 2896-905 (2016). + :link(Maaravi1) [(Maaravi)] T. Maaravi et al, J. Phys. Chem. C 121, 22826-22835 (2017). diff --git a/doc/src/pair_cs.txt b/doc/src/pair_cs.txt index 8bd4abed68bb8bac94116d77c575453eb0c6d717..faaea42f157a2713f129cd9690bed1b6de9c9dec 100644 --- a/doc/src/pair_cs.txt +++ b/doc/src/pair_cs.txt @@ -7,9 +7,11 @@ :line pair_style born/coul/long/cs command :h3 +pair_style born/coul/long/cs/gpu command :h3 pair_style buck/coul/long/cs command :h3 pair_style born/coul/dsf/cs command :h3 pair_style born/coul/wolf/cs command :h3 +pair_style born/coul/wolf/cs/gpu command :h3 [Syntax:] @@ -97,6 +99,38 @@ a long-range solver, thus the only correction is the addition of a minimal distance to avoid the possible r = 0.0 case for a core/shell pair. +:line + +Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are +functionally the same as the corresponding style without the suffix. +They have been optimized to run faster, depending on your available +hardware, as discussed on the "Speed packages"_Speed_packages.html doc +page. The accelerated styles take the same arguments and should +produce the same results, except for round-off and precision issues. + +These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, +USER-OMP and OPT packages, respectively. They are only enabled if +LAMMPS was built with those packages. See the "Build +package"_Build_package.html doc page for more info. + +You can specify the accelerated styles explicitly in your input script +by including their suffix, or you can use the "-suffix command-line +switch"_Run_options.html when you invoke LAMMPS, or you can use the +"suffix"_suffix.html command in your input script. + +See the "Speed packages"_Speed_packages.html doc page for more +instructions on how to use the accelerated styles effectively. + +:line + +[Mixing, shift, table, tail correction, restart, rRESPA info]: + +See the corresponding doc pages for pair styles without the "cs" +suffix to see how mixing, shifting, tabulation, tail correction, +restarting, and rRESPA are handled by theses pair styles. + +:line + [Restrictions:] These pair styles are part of the CORESHELL package. They are only diff --git a/doc/src/pair_dipole.txt b/doc/src/pair_dipole.txt index dcb2448949699655f3021a860ca3112ae398d542..bdf37983b68d8f9325c890ea37657032c241c1a0 100644 --- a/doc/src/pair_dipole.txt +++ b/doc/src/pair_dipole.txt @@ -13,6 +13,7 @@ pair_style lj/sf/dipole/sf command :h3 pair_style lj/sf/dipole/sf/gpu command :h3 pair_style lj/sf/dipole/sf/omp command :h3 pair_style lj/cut/dipole/long command :h3 +pair_style lj/cut/dipole/long/gpu command :h3 pair_style lj/long/dipole/long command :h3 [Syntax:] diff --git a/doc/src/pair_dsmc.txt b/doc/src/pair_dsmc.txt index adaeeb8390e07f080259009962109f909857f56b..8b1ceab85857a0621b8ac6f9ad8b9cbdf8c33e88 100644 --- a/doc/src/pair_dsmc.txt +++ b/doc/src/pair_dsmc.txt @@ -16,7 +16,7 @@ max_cell_size = global maximum cell size for DSMC interactions (distance units) seed = random # seed (positive integer) weighting = macroparticle weighting Tref = reference temperature (temperature units) -Nrecompute = recompute v*sigma_max every this many timesteps (timesteps) +Nrecompute = re-compute v*sigma_max every this many timesteps (timesteps) Nsample = sample this many times in recomputing v*sigma_max :ul [Examples:] diff --git a/doc/src/pair_eam.txt b/doc/src/pair_eam.txt index 6c3793cb61bc2ad74102e02f1f9b73c9dcf2be74..ed1378b6fd887e29307a29f4ec5690274825b747 100644 --- a/doc/src/pair_eam.txt +++ b/doc/src/pair_eam.txt @@ -20,6 +20,8 @@ pair_style eam/alloy/omp command :h3 pair_style eam/alloy/opt command :h3 pair_style eam/cd command :h3 pair_style eam/cd/omp command :h3 +pair_style eam/cd/old command :h3 +pair_style eam/cd/old/omp command :h3 pair_style eam/fs command :h3 pair_style eam/fs/gpu command :h3 pair_style eam/fs/intel command :h3 @@ -31,7 +33,7 @@ pair_style eam/fs/opt command :h3 pair_style style :pre -style = {eam} or {eam/alloy} or {eam/cd} or {eam/fs} :ul +style = {eam} or {eam/alloy} or {eam/cd} or {eam/cd/old} or {eam/fs} :ul [Examples:] @@ -268,7 +270,8 @@ Style {eam/cd} is similar to the {eam/alloy} style, except that it computes alloy pairwise interactions using the concentration-dependent embedded-atom method (CD-EAM). This model can reproduce the enthalpy of mixing of alloys over the full composition range, as described in -"(Stukowski)"_#Stukowski. +"(Stukowski)"_#Stukowski. Style {eam/cd/old} is an older, slightly +different and slower two-site formulation of the model "(Caro)"_#Caro. The pair_coeff command is specified the same as for the {eam/alloy} style. However the DYNAMO {setfl} file must has two @@ -442,3 +445,6 @@ Daw, Baskes, Phys Rev B, 29, 6443 (1984). :link(Stukowski) [(Stukowski)] Stukowski, Sadigh, Erhart, Caro; Modeling Simulation Materials Science & Engineering, 7, 075005 (2009). + +:link(Caro) +[(Caro)] A Caro, DA Crowson, M Caro; Phys Rev Lett, 95, 075702 (2005) diff --git a/doc/src/pair_edip.txt b/doc/src/pair_edip.txt index 053d43b2baeed3cd87cfb17e57aabb60335ca7d8..e0e8fbb27e210075af6e7df07fbf03b900a03e26 100644 --- a/doc/src/pair_edip.txt +++ b/doc/src/pair_edip.txt @@ -7,6 +7,7 @@ :line pair_style edip command :h3 +pair_style edip/omp command :h3 pair_style edip/multi command :h3 [Syntax:] diff --git a/doc/src/pair_gran.txt b/doc/src/pair_gran.txt index bf759a71bc4853e2999616f9c7440183ea0b9cc4..e322f8da15b54e39bf9abe3702a6a3d77e130202 100644 --- a/doc/src/pair_gran.txt +++ b/doc/src/pair_gran.txt @@ -7,7 +7,7 @@ :line pair_style gran/hooke command :h3 -pair_style gran/omp command :h3 +pair_style gran/hooke/omp command :h3 pair_style gran/hooke/history command :h3 pair_style gran/hooke/history/omp command :h3 pair_style gran/hooke/history/kk command :h3 diff --git a/doc/src/pair_gromacs.txt b/doc/src/pair_gromacs.txt index 6a36a036c93b2a8af88ebb62bdfac7f53dc243aa..e50a21588cd341ee32c9c2e074d26d9d4c9e0e05 100644 --- a/doc/src/pair_gromacs.txt +++ b/doc/src/pair_gromacs.txt @@ -8,8 +8,10 @@ pair_style lj/gromacs command :h3 pair_style lj/gromacs/gpu command :h3 +pair_style lj/gromacs/kk command :h3 pair_style lj/gromacs/omp command :h3 pair_style lj/gromacs/coul/gromacs command :h3 +pair_style lj/gromacs/coul/gromacs/kk command :h3 pair_style lj/gromacs/coul/gromacs/omp command :h3 [Syntax:] diff --git a/doc/src/pair_hybrid.txt b/doc/src/pair_hybrid.txt index 6e68e820a883184ac4c1927fd232a3ce05c048a4..97a5972bfba9fac062b0dada1929defdf06309f3 100644 --- a/doc/src/pair_hybrid.txt +++ b/doc/src/pair_hybrid.txt @@ -7,9 +7,8 @@ :line pair_style hybrid command :h3 -pair_style hybrid/omp command :h3 +pair_style hybrid/kk command :h3 pair_style hybrid/overlay command :h3 -pair_style hybrid/overlay/omp command :h3 pair_style hybrid/overlay/kk command :h3 [Syntax:] diff --git a/doc/src/pair_ilp_graphene_hbn.txt b/doc/src/pair_ilp_graphene_hbn.txt index 02d0db7af25e6c86f6ece52e56623bf71825173a..f048b16ccf0dad6828c9f52330e1f790ee694c28 100644 --- a/doc/src/pair_ilp_graphene_hbn.txt +++ b/doc/src/pair_ilp_graphene_hbn.txt @@ -25,14 +25,15 @@ pair_coeff * * rebo CH.airebo NULL NULL C pair_coeff * * tersoff BNC.tersoff B N NULL pair_coeff * * ilp/graphene/hbn BNCH.ILP B N C pair_coeff 1 1 coul/shield 0.70 -pair_coeff 1 2 coul/shield 0.69498201415576216335 +pair_coeff 1 2 coul/shield 0.695 pair_coeff 2 2 coul/shield 0.69 :pre [Description:] The {ilp/graphene/hbn} style computes the registry-dependent interlayer -potential (ILP) potential as described in "(Leven)"_#Leven and -"(Maaravi)"_#Maaravi2. The normals are calculated in the way as described +potential (ILP) potential as described in "(Leven1)"_#Leven1, +"(Leven2)"_#Leven2 and "(Maaravi)"_#Maaravi2. +The normals are calculated in the way as described in "(Kolmogorov)"_#Kolmogorov2. :c,image(Eqs/pair_ilp_graphene_hbn.jpg) @@ -40,7 +41,8 @@ in "(Kolmogorov)"_#Kolmogorov2. Where Tap(r_ij) is the taper function which provides a continuous cutoff (up to third derivative) for interatomic separations larger than r_c "(Maaravi)"_#Maaravi2. The definitons of each parameter in the above -equation can be found in "(Leven)"_#Leven and "(Maaravi)"_#Maaravi2. +equation can be found in "(Leven1)"_#Leven1 and "(Maaravi)"_#Maaravi2. + It is important to include all the pairs to build the neighbor list for calculating the normals. @@ -61,13 +63,15 @@ NOTE: The parameters presented in the parameter file (e.g. BNCH.ILP), are fitted with taper function by setting the cutoff equal to 16.0 Angstrom. Using different cutoff or taper function should be careful. -NOTE: Two new sets of parameters of ILP for two-dimensional hexagonal Materials -are presented in "(Ouyang)"_#Ouyang1. These parameters provide a good description -in both short- and long-range interaction regime, while the old ILP parameters -published in "(Leven)"_#Leven and "(Maaravi)"_#Maaravi2 are only suitable for -long-range interaction regime. This feature is essential for simulations in -high-pressure regime (i.e., the interlayer distance smaller than the equilibrium distance). -The benchmark tests and comparison of these parameters can be found in "(Ouyang)"_#Ouyang1. +NOTE: Two new sets of parameters of ILP for two-dimensional hexagonal +Materials are presented in "(Ouyang)"_#Ouyang. These parameters provide +a good description in both short- and long-range interaction regimes. +While the old ILP parameters published in "(Leven2)"_#Leven2 and +"(Maaravi)"_#Maaravi2 are only suitable for long-range interaction +regime. This feature is essential for simulations in high pressure +regime (i.e., the interlayer distance is smaller than the equilibrium +distance). The benchmark tests and comparison of these parameters can +be found in "(Ouyang)"_#Ouyang. This potential must be used in combination with hybrid/overlay. Other interactions can be set to zero using pair_style {none}. @@ -112,14 +116,17 @@ units, if your simulation does not use {metal} units. :line -:link(Leven) -[(Leven)] I. Leven et al, J. Chem.Theory Comput. 12, 2896-905 (2016) +:link(Leven1) +[(Leven1)] I. Leven, I. Azuri, L. Kronik and O. Hod, J. Chem. Phys. 140, 104106 (2014). + +:link(Leven2) +[(Leven2)] I. Leven et al, J. Chem.Theory Comput. 12, 2896-905 (2016). :link(Maaravi2) [(Maaravi)] T. Maaravi et al, J. Phys. Chem. C 121, 22826-22835 (2017). :link(Kolmogorov2) -[(Kolmogorov)] A. N. Kolmogorov, V. H. Crespi, Phys. Rev. B 71, 235415 (2005) +[(Kolmogorov)] A. N. Kolmogorov, V. H. Crespi, Phys. Rev. B 71, 235415 (2005). -:link(Ouyang1) -[(Ouyang)] W. Ouyang, D. Mandelli, M. Urbakh, O. Hod, arXiv:1806.09555 (2018). +:link(Ouyang) +[(Ouyang)] W. Ouyang, D. Mandelli, M. Urbakh and O. Hod, Nano Lett. 18, 6009-6016 (2018). diff --git a/doc/src/pair_kolmogorov_crespi_full.txt b/doc/src/pair_kolmogorov_crespi_full.txt index 358d2168df277c2ce74e00992dfb87fe403817e5..df9a9696be4108d7ddaccddd5884405a3ce4a338 100644 --- a/doc/src/pair_kolmogorov_crespi_full.txt +++ b/doc/src/pair_kolmogorov_crespi_full.txt @@ -19,11 +19,11 @@ tap_flag = 0/1 to turn off/on the taper function pair_style hybrid/overlay kolmogorov/crespi/full 20.0 0 pair_coeff * * none -pair_coeff * * kolmogorov/crespi/full CC.KC C C :pre +pair_coeff * * kolmogorov/crespi/full CH.KC C C :pre -pair_style hybrid/overlay rebo kolmogorov/crespi/full 16.0 -pair_coeff * * rebo CH.airebo C C -pair_coeff * * kolmogorov/crespi/full CC.KC C C :pre +pair_style hybrid/overlay rebo kolmogorov/crespi/full 16.0 1 +pair_coeff * * rebo CH.airebo C H +pair_coeff * * kolmogorov/crespi/full CH_taper.KC C H :pre [Description:] @@ -38,27 +38,32 @@ forces and to include all the pairs to build the neighbor list for calculating the normals. Energies are shifted so that they go continuously to zero at the cutoff assuming that the exponential part of {Vij} (first term) decays sufficiently fast. This shift is achieved by -the last term in the equation for {Vij} above. +the last term in the equation for {Vij} above. This is essential only +when the tapper function is turned off. The formula of taper function +can be found in pair style "ilp/graphene/hbn"_pair_ilp_graphene_hbn.html. NOTE: This potential is intended for interactions between two different graphene layers. Therefore, to avoid interaction within the same layers, each layer should have a separate molecule id and is recommended to use "full" atom style in the data file. -The parameter file (e.g. CC.KC), is intended for use with {metal} +The parameter file (e.g. CH.KC), is intended for use with {metal} "units"_units.html, with energies in meV. Two additional parameters, {S}, and {rcut} are included in the parameter file. {S} is designed to facilitate scaling of energies. {rcut} is designed to build the neighbor list for calculating the normals for each atom pair. -NOTE: A new set of parameters of KC potential for hydrocarbons (CH.KC) -is presented in "(Ouyang)"_#Ouyang2. The parameters in CH.KC provides -a good description in both short- and long-range interaction regime, -while the original parameters (CC.KC) published in "(Kolmogorov)"_#Kolmogorov1 -are only suitable for long-range interaction regime. -This feature is essential for simulations in high-pressure regime -(i.e., the interlayer distance smaller than the equilibrium distance). -The benchmark tests and comparison of these parameters can be found in "(Ouyang)"_#Ouyang2. +NOTE: Two new sets of parameters of KC potential for hydrocarbons, CH.KC +(without the taper function) and CH_taper.KC (with the taper function) +are presented in "(Ouyang)"_#Ouyang1. The energy for the KC potential +with the taper function goes continuously to zero at the cutoff. The +parameters in both CH.KC and CH_taper.KC provide a good description in +both short- and long-range interaction regimes. While the original +parameters (CC.KC) published in "(Kolmogorov)"_#Kolmogorov1 are only +suitable for long-range interaction regime. This feature is essential +for simulations in high pressure regime (i.e., the interlayer distance +is smaller than the equilibrium distance). The benchmark tests and +comparison of these parameters can be found in "(Ouyang)"_#Ouyang1. This potential must be used in combination with hybrid/overlay. Other interactions can be set to zero using pair_style {none}. @@ -84,7 +89,7 @@ package"_Build_package.html doc page for more info. This pair potential requires the newton setting to be {on} for pair interactions. -The CC.KC potential file provided with LAMMPS (see the potentials +The CH.KC potential file provided with LAMMPS (see the potentials folder) are parameterized for metal units. You can use this potential with any LAMMPS units, but you would need to create your own custom CC.KC potential file with all coefficients converted to the appropriate @@ -105,5 +110,5 @@ units. :link(Kolmogorov1) [(Kolmogorov)] A. N. Kolmogorov, V. H. Crespi, Phys. Rev. B 71, 235415 (2005) -:link(Ouyang2) -[(Ouyang)] W. Ouyang, D. Mandelli, M. Urbakh, O. Hod, arXiv:1806.09555 (2018). +:link(Ouyang1) +[(Ouyang)] W. Ouyang, D. Mandelli, M. Urbakh and O. Hod, Nano Lett. 18, 6009-6016 (2018). diff --git a/doc/src/pair_kolmogorov_crespi_z.txt b/doc/src/pair_kolmogorov_crespi_z.txt index f557e6c731db499de0820bbb39ef9aab1aa0f46a..912fca165750f7f9a63288ef34c8015f23a37a29 100644 --- a/doc/src/pair_kolmogorov_crespi_z.txt +++ b/doc/src/pair_kolmogorov_crespi_z.txt @@ -30,7 +30,7 @@ which is to take all normals along the z-axis. :c,image(Eqs/pair_kolmogorov_crespi_z.jpg) -It is important to have a suffiently large cutoff to ensure smooth forces. +It is important to have a sufficiently large cutoff to ensure smooth forces. Energies are shifted so that they go continously to zero at the cutoff assuming that the exponential part of {Vij} (first term) decays sufficiently fast. This shift is achieved by the last term in the equation for {Vij} above. diff --git a/doc/src/pair_lj.txt b/doc/src/pair_lj.txt index b5a572618228d0b8e514e8157ad0347fc2690481..4939f505bb11af859617a6edf6c6230707dcc83e 100644 --- a/doc/src/pair_lj.txt +++ b/doc/src/pair_lj.txt @@ -14,6 +14,7 @@ pair_style lj/cut/opt command :h3 pair_style lj/cut/omp command :h3 pair_style lj/cut/coul/cut command :h3 pair_style lj/cut/coul/cut/gpu command :h3 +pair_style lj/cut/coul/cut/kk command :h3 pair_style lj/cut/coul/cut/omp command :h3 pair_style lj/cut/coul/debye command :h3 pair_style lj/cut/coul/debye/gpu command :h3 @@ -26,6 +27,7 @@ pair_style lj/cut/coul/dsf/omp command :h3 pair_style lj/cut/coul/long command :h3 pair_style lj/cut/coul/long/cs command :h3 pair_style lj/cut/coul/long/gpu command :h3 +pair_style lj/cut/coul/long/kk command :h3 pair_style lj/cut/coul/long/intel command :h3 pair_style lj/cut/coul/long/opt command :h3 pair_style lj/cut/coul/long/omp command :h3 diff --git a/doc/src/pair_lj_expand.txt b/doc/src/pair_lj_expand.txt index d26c88e4f76f50db857c8510be9e6c23fdd77beb..178ba8d1a88f9439f20d060ac6265160e5cfa0ca 100644 --- a/doc/src/pair_lj_expand.txt +++ b/doc/src/pair_lj_expand.txt @@ -8,7 +8,10 @@ pair_style lj/expand command :h3 pair_style lj/expand/gpu command :h3 +pair_style lj/expand/kk command :h3 pair_style lj/expand/omp command :h3 +pair_style lj/expand/coul/long command :h3 +pair_style lj/expand/coul/long/gpu command :h3 [Syntax:] @@ -22,6 +25,11 @@ pair_style lj/expand 2.5 pair_coeff * * 1.0 1.0 0.5 pair_coeff 1 1 1.0 1.0 -0.2 2.0 :pre +pair_style lj/expand/coul/long 2.5 +pair_style lj/expand/coul/long 2.5 4.0 +pair_coeff * * 1.0 1.0 0.5 +pair_coeff 1 1 1.0 1.0 -0.2 3.0 :pre + [Description:] Style {lj/expand} computes a LJ interaction with a distance shifted by @@ -34,11 +42,12 @@ formula: Rc is the cutoff which does not include the delta distance. I.e. the actual force cutoff is the sum of cutoff + delta. -The following coefficients must be defined for each pair of atoms -types via the "pair_coeff"_pair_coeff.html command as in the examples -above, or in the data file or restart files read by the -"read_data"_read_data.html or "read_restart"_read_restart.html -commands, or by mixing as described below: +For all of the {lj/expand} pair styles, the following coefficients must +be defined for each pair of atoms types via the +"pair_coeff"_pair_coeff.html command as in the examples above, or in +the data file or restart files read by the "read_data"_read_data.html +or "read_restart"_read_restart.html commands, or by mixing as +described below: epsilon (energy units) sigma (distance units) @@ -48,6 +57,11 @@ cutoff (distance units) :ul The delta values can be positive or negative. The last coefficient is optional. If not specified, the global LJ cutoff is used. +For {lj/expand/coul/long} only the LJ cutoff can be specified since a +Coulombic cutoff cannot be specified for an individual I,J type pair. +All type pairs use the same global Coulombic cutoff specified in the +pair_style command. + :line Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are diff --git a/doc/src/pair_lj_long.txt b/doc/src/pair_lj_long.txt index 2bc2b656ac7b95832c60e7304b5ccd254e04953c..47a554ef4f69f6ec8ad6ed69ac73faec9a9d7431 100644 --- a/doc/src/pair_lj_long.txt +++ b/doc/src/pair_lj_long.txt @@ -11,6 +11,7 @@ pair_style lj/long/coul/long/intel command :h3 pair_style lj/long/coul/long/omp command :h3 pair_style lj/long/coul/long/opt command :h3 pair_style lj/long/tip4p/long command :h3 +pair_style lj/long/tip4p/long/omp command :h3 [Syntax:] diff --git a/doc/src/pair_meam_spline.txt b/doc/src/pair_meam_spline.txt index df5db812648a9c4ff87e1e723578118d3b5075db..74adba243291f8d1f8afd86ce795b2e90a4befb5 100644 --- a/doc/src/pair_meam_spline.txt +++ b/doc/src/pair_meam_spline.txt @@ -6,8 +6,8 @@ :line -pair_style meam/spline :h3 -pair_style meam/spline/omp :h3 +pair_style meam/spline command :h3 +pair_style meam/spline/omp command :h3 [Syntax:] diff --git a/doc/src/pair_meam_sw_spline.txt b/doc/src/pair_meam_sw_spline.txt index 2e8c26658aea1de5840ba254fbeb7029640f194a..77322953cf6557665436c304533107114ef7f423 100644 --- a/doc/src/pair_meam_sw_spline.txt +++ b/doc/src/pair_meam_sw_spline.txt @@ -6,8 +6,7 @@ :line -pair_style meam/sw/spline :h3 -pair_style meam/sw/spline/omp :h3 +pair_style meam/sw/spline command :h3 [Syntax:] diff --git a/doc/src/pair_nb3b_harmonic.txt b/doc/src/pair_nb3b_harmonic.txt index 6a119d74e160da95d9a61e522e6c87d75ad1627d..2b2152a873192b36975bf28347b4d8f08f848f8a 100644 --- a/doc/src/pair_nb3b_harmonic.txt +++ b/doc/src/pair_nb3b_harmonic.txt @@ -7,7 +7,6 @@ :line pair_style nb3b/harmonic command :h3 -pair_style nb3b/harmonic/omp command :h3 [Syntax:] @@ -89,28 +88,6 @@ a particular simulation; LAMMPS ignores those entries. :line -Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are -functionally the same as the corresponding style without the suffix. -They have been optimized to run faster, depending on your available -hardware, as discussed on the "Speed packages"_Speed_packages.html doc -page. The accelerated styles take the same arguments and should -produce the same results, except for round-off and precision issues. - -These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, -USER-OMP and OPT packages, respectively. They are only enabled if -LAMMPS was built with those packages. See the "Build -package"_Build_package.html doc page for more info. - -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the "-suffix command-line -switch"_Run_options.html when you invoke LAMMPS, or you can use the -"suffix"_suffix.html command in your input script. - -See the "Speed packages"_Speed_packages.html doc page for more -instructions on how to use the accelerated styles effectively. - -:line - [Restrictions:] This pair style can only be used if LAMMPS was built with the MANYBODY diff --git a/doc/src/pair_python.txt b/doc/src/pair_python.txt index 23da86fc495a6daabdee6048cc4d8dcb72525b6b..e8baf14d2eefb694ff107609d65afad5d8f9b3f4 100644 --- a/doc/src/pair_python.txt +++ b/doc/src/pair_python.txt @@ -29,7 +29,7 @@ The {python} pair style provides a way to define pairwise additive potential functions as python script code that is loaded into LAMMPS from a python file which must contain specific python class definitions. This allows to rapidly evaluate different potential functions without -having to modify and recompile LAMMPS. Due to python being an +having to modify and re-compile LAMMPS. Due to python being an interpreted language, however, the performance of this pair style is going to be significantly slower (often between 20x and 100x) than corresponding compiled code. This penalty can be significantly reduced @@ -98,7 +98,7 @@ verify, that the potential definition in the python class and in the LAMMPS input match. Here is an example for a single type Lennard-Jones potential class -{LJCutMelt} in reducted units, which defines an atom type {lj} for +{LJCutMelt} in reduced units, which defines an atom type {lj} for which the parameters epsilon and sigma are both 1.0: class LJCutMelt(LAMMPSPairPotential): diff --git a/doc/src/pair_sdk.txt b/doc/src/pair_sdk.txt index b977aefe889c25f066e509efacba760ac71842a4..06a0a42d5aafc97aac2ed8a199a5c6b56b8b494c 100644 --- a/doc/src/pair_sdk.txt +++ b/doc/src/pair_sdk.txt @@ -13,6 +13,8 @@ pair_style lj/sdk/omp command :h3 pair_style lj/sdk/coul/long command :h3 pair_style lj/sdk/coul/long/gpu command :h3 pair_style lj/sdk/coul/long/omp command :h3 +pair_style lj/sdk/coul/msm command :h3 +pair_style lj/sdk/coul/msm/omp command :h3 [Syntax:] @@ -35,6 +37,10 @@ pair_style lj/sdk/coul/long 10.0 pair_style lj/sdk/coul/long 10.0 12.0 pair_coeff 1 1 lj9_6 100.0 3.5 12.0 :pre +pair_style lj/sdk/coul/msm 10.0 +pair_style lj/sdk/coul/msm 10.0 12.0 +pair_coeff 1 1 lj9_6 100.0 3.5 12.0 :pre + [Description:] The {lj/sdk} styles compute a 9/6, 12/4, or 12/6 Lennard-Jones potential, @@ -75,10 +81,10 @@ and Coulombic interactions for this type pair. If both coefficients are specified, they are used as the LJ and Coulombic cutoffs for this type pair. -For {lj/sdk/coul/long} only the LJ cutoff can be specified since a -Coulombic cutoff cannot be specified for an individual I,J type pair. -All type pairs use the same global Coulombic cutoff specified in the -pair_style command. +For {lj/sdk/coul/long} and {lj/sdk/coul/msm} only the LJ cutoff can be +specified since a Coulombic cutoff cannot be specified for an +individual I,J type pair. All type pairs use the same global +Coulombic cutoff specified in the pair_style command. :line diff --git a/doc/src/pair_spin_magelec.txt b/doc/src/pair_spin_magelec.txt index f552c56a4bd34b93f68beb5b95f0146785908e3b..360f4407926b6806f8ec8566d9c6df639ae7c092 100644 --- a/doc/src/pair_spin_magelec.txt +++ b/doc/src/pair_spin_magelec.txt @@ -6,11 +6,11 @@ :line -pair_style spin/me command :h3 +pair_style spin/magelec command :h3 [Syntax:] -pair_style spin/me cutoff :pre +pair_style spin/magelec cutoff :pre cutoff = global cutoff pair (distance in metal units) :ulb,l @@ -18,8 +18,8 @@ cutoff = global cutoff pair (distance in metal units) :ulb,l [Examples:] -pair_style spin/me 4.5 -pair_coeff * * me 4.5 0.00109 1.0 1.0 1.0 :pre +pair_style spin/magelec 4.5 +pair_coeff * * magelec 4.5 0.00109 1.0 1.0 1.0 :pre [Description:] diff --git a/doc/src/pair_spin_neel.txt b/doc/src/pair_spin_neel.txt index fe3bb1ad14ea69240f6bd71b4f9bf06fd63278ef..7af71021a08072b8f3ee7a2d15836d7ac638ff79 100644 --- a/doc/src/pair_spin_neel.txt +++ b/doc/src/pair_spin_neel.txt @@ -29,34 +29,36 @@ between pairs of magnetic spins: :c,image(Eqs/pair_spin_neel_interaction.jpg) -where si and sj are two neighboring magnetic spins of two particles, +where si and sj are two neighboring magnetic spins of two particles, rij = ri - rj is the inter-atomic distance between the two particles, -eij = (ri - rj)/|ri-rj| is their normalized separation vector -and g1, q1 and q2 are three functions defining the intensity of the -dipolar and quadrupolar contributions, with: +eij = (ri - rj)/|ri-rj| is their normalized separation vector and g1, +q1 and q2 are three functions defining the intensity of the dipolar +and quadrupolar contributions, with: :c,image(Eqs/pair_spin_neel_functions.jpg) -With the functions g(rij) and q(rij) defined and fitted according to the same -Bethe-Slater function used to fit the exchange interaction: +With the functions g(rij) and q(rij) defined and fitted according to +the same Bethe-Slater function used to fit the exchange interaction: :c,image(Eqs/pair_spin_exchange_function.jpg) -where a, b and d are the three constant coefficients defined in the associated -"pair_coeff" command. +where a, b and d are the three constant coefficients defined in the +associated "pair_coeff" command. -The coefficients a, b, and d need to be fitted so that the function above matches with -the values of the magneto-elastic constant of the materials at stake. +The coefficients a, b, and d need to be fitted so that the function +above matches with the values of the magneto-elastic constant of the +materials at stake. -Examples and more explanations about this function and its parametrization are reported -in "(Tranchida)"_#Tranchida6. More examples of parametrization will be provided in -future work. +Examples and more explanations about this function and its +parametrization are reported in "(Tranchida)"_#Tranchida6. More +examples of parametrization will be provided in future work. -From this DM interaction, each spin i will be submitted to a magnetic torque -omega and its associated atom to a force F (for spin-lattice calculations only). +From this DM interaction, each spin i will be submitted to a magnetic +torque omega and its associated atom to a force F (for spin-lattice +calculations only). -More details about the derivation of these torques/forces are reported in -"(Tranchida)"_#Tranchida6. +More details about the derivation of these torques/forces are reported +in "(Tranchida)"_#Tranchida6. :line diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index b33897c5aa506cd6be92ef275194ec2ceb83ce44..9dfead300ea5cda19aec67f9073a1bc44b1da51d 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -93,7 +93,7 @@ There are also additional accelerated pair styles (not listed here) included in the LAMMPS distribution for faster performance on CPUs, GPUs, and KNLs. The individual style names on the "Commands pair"_Commands_pair.html doc page are followed by one or more of -(g,i,k,o,t) to indicate which accerlerated styles exist. +(g,i,k,o,t) to indicate which accelerated styles exist. "pair_style none"_pair_none.html - turn off pairwise interactions "pair_style hybrid"_pair_hybrid.html - multiple styles of pairwise interactions @@ -103,6 +103,7 @@ pair"_Commands_pair.html doc page are followed by one or more of "pair_style adp"_pair_adp.html - angular dependent potential (ADP) of Mishin "pair_style airebo"_pair_airebo.html - AIREBO potential of Stuart "pair_style airebo/morse"_pair_airebo.html - AIREBO with Morse instead of LJ +"pair_style atm"_pair_atm.html - Axilrod-Teller-Muto potential "pair_style beck"_pair_beck.html - Beck potential "pair_style body/nparticle"_pair_body_nparticle.html - interactions between body particles "pair_style bop"_pair_bop.html - BOP potential of Pettifor diff --git a/doc/src/pair_tersoff.txt b/doc/src/pair_tersoff.txt index 20744bc2a9ae3928a98f3d7dc23e361067d35b73..4b7bb0d93d1fc96f6e38510a45f12c75e5d94d59 100644 --- a/doc/src/pair_tersoff.txt +++ b/doc/src/pair_tersoff.txt @@ -8,10 +8,10 @@ pair_style tersoff command :h3 pair_style tersoff/table command :h3 -pair_style tersoff/gpu :h3 -pair_style tersoff/intel :h3 -pair_style tersoff/kk :h3 -pair_style tersoff/omp :h3 +pair_style tersoff/gpu command :h3 +pair_style tersoff/intel command :h3 +pair_style tersoff/kk command :h3 +pair_style tersoff/omp command :h3 pair_style tersoff/table/omp command :h3 [Syntax:] diff --git a/doc/src/pairs.txt b/doc/src/pairs.txt index 4c3eef2cd11c32ea4801ebb830a6a985cc5a734b..d535798482cf6b748331f7c7bb23e39ed2ec1acb 100644 --- a/doc/src/pairs.txt +++ b/doc/src/pairs.txt @@ -8,6 +8,7 @@ Pair Styles :h1 pair_adp pair_agni pair_airebo + pair_atm pair_awpmd pair_beck pair_body_nparticle diff --git a/doc/src/read_data.txt b/doc/src/read_data.txt index ef899a15b44b153621cc194d317c3a313bd9afac..6aa30d9e634c30f4e0831a431c5e636f5c176bc2 100644 --- a/doc/src/read_data.txt +++ b/doc/src/read_data.txt @@ -124,14 +124,14 @@ bond atoms or bad dynamics. The three choices for the {add} argument affect how the atom IDs and molecule IDs of atoms in the data file are treated. If {append} is specified, atoms in the data file are added to the current system, -with their atom IDs reset so that an atomID = M in the data file -becomes atomID = N+M, where N is the largest atom ID in the current +with their atom IDs reset so that an atom-ID = M in the data file +becomes atom-ID = N+M, where N is the largest atom ID in the current system. This rule is applied to all occurrences of atom IDs in the data file, e.g. in the Velocity or Bonds section. This is also done for molecule IDs, if the atom style does support molecule IDs or they are enabled via fix property/atom. If {IDoffset} is specified, then {IDoffset} is a numeric value is given, e.g. 1000, so that an -atomID = M in the data file becomes atomID = 1000+M. For systems +atom-ID = M in the data file becomes atom-ID = 1000+M. For systems with enabled molecule IDs, another numerical argument {MOLoffset} is required representing the equivalent offset for molecule IDs. If {merge} is specified, the data file atoms @@ -139,7 +139,7 @@ are added to the current system without changing their IDs. They are assumed to merge (without duplication) with the currently defined atoms. It is up to you to insure there are no multiply defined atom IDs, as LAMMPS only performs an incomplete check that this is the case -by insuring the resulting max atomID >= the number of atoms. For +by insuring the resulting max atom-ID >= the number of atoms. For molecule IDs, there is no check done at all. The {offset} and {shift} keywords can only be used if the {add} diff --git a/doc/src/replicate.txt b/doc/src/replicate.txt index 0195dce9114f4a3d0bf30a805a1c0f0e31a70be7..79a481746ec8843b20d567a67b1c71a2a234e797 100644 --- a/doc/src/replicate.txt +++ b/doc/src/replicate.txt @@ -14,7 +14,7 @@ replicate nx ny nz {keyword} :pre nx,ny,nz = replication factors in each dimension :ulb optional {keyword} = {bbox} :l - {bbox} = only check atoms in replicas that overlap with a processor's subdomain :ule + {bbox} = only check atoms in replicas that overlap with a processor's sub-domain :ule [Examples:] @@ -46,7 +46,7 @@ image flags that differ by 1. This will allow the bond to be unwrapped appropriately. The optional keyword {bbox} uses a bounding box to only check atoms -in replicas that overlap with a processor's subdomain when assigning +in replicas that overlap with a processor's sub-domain when assigning atoms to processors, and thus can result in substantial speedups for calculations using a large number of processors. It does require temporarily using more memory. diff --git a/doc/src/reset_ids.txt b/doc/src/reset_ids.txt index 391b51fde99e167d813bef98b3a62f96786ed1de..8b217c7b1cc5f60a566ca858354f9c1fdb84ec56 100644 --- a/doc/src/reset_ids.txt +++ b/doc/src/reset_ids.txt @@ -23,7 +23,7 @@ for bond, angle, dihedral, improper topology data. This will create a set of IDs that are numbered contiguously from 1 to N for a N atoms system. -This can be useful to do after perfoming a "delete_atoms" command for +This can be useful to do after performing a "delete_atoms" command for a molecular system. The delete_atoms compress yes option will not perform this operation due to the existence of bond topology. It can also be useful to do after any simulation which has lost atoms, diff --git a/doc/src/restart.txt b/doc/src/restart.txt index 7c034f36e0c6d002739c35362afca8440f9358a5..e0fae3909dc771ca15459230886ee5667a1715f2 100644 --- a/doc/src/restart.txt +++ b/doc/src/restart.txt @@ -49,7 +49,7 @@ as it writes successive restart files. Note that you can specify the restart command twice, once with a single filename and once with two filenames. This would allow you, for example, to write out archival restart files every 100000 steps -using a single filenname, and more frequent temporary restart files +using a single filename, and more frequent temporary restart files every 1000 steps, using two filenames. Using restart 0 will turn off both modes of output. diff --git a/doc/src/run_style.txt b/doc/src/run_style.txt index 6dd9b56908960bbbe820bcd7f2667a3faf158a73..9defd1314ea9d404ff24aee6e106c2153af9c0dd 100644 --- a/doc/src/run_style.txt +++ b/doc/src/run_style.txt @@ -318,7 +318,7 @@ bond forces = level 1 (innermost loop) angle forces = same level as bond forces dihedral forces = same level as angle forces improper forces = same level as dihedral forces -pair forces = leven N (outermost level) +pair forces = level N (outermost level) kspace forces = same level as pair forces inner, middle, outer forces = no default :ul diff --git a/doc/src/server.txt b/doc/src/server.txt new file mode 100644 index 0000000000000000000000000000000000000000..86fb68d012963be87b30b169c1bf1554c78cfecb --- /dev/null +++ b/doc/src/server.txt @@ -0,0 +1,71 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +server command :h3 + +[Syntax:] + +server protocol :pre + +protocol = {md} or {mc} :ul + +[Examples:] + +server md :pre + +[Description:] + +This command starts LAMMPS running in "server" mode, where it receives +messages from a separate "client" code and responds by sending a reply +message back to the client. The specified {protocol} determines the +format and content of messages LAMMPS expects to receive and how it +responds. + +The "Howto client/server"_Howto_client_server.html doc page gives an +overview of client/server coupling of LAMMPS with another code where +one code is the "client" and sends request messages to a "server" +code. The server responds to each request with a reply message. This +enables the two codes to work in tandem to perform a simulation. + +When this command is invoked, LAMMPS will run in server mode in an +endless loop, waiting for messages from the client code. The client +signals when it is done sending messages to LAMMPS, at which point the +loop will exit, and the remainder of the LAMMPS script will be +processed. + +The {protocol} argument defines the format and content of messages +that will be exchanged between the two codes. The current options +are: + +"md"_server_md.html = run dynamics with another code +"mc"_server_mc.html = perform Monte Carlo moves with another code :ul + +For protocol {md}, LAMMPS can be either a client (via the "fix +client/md"_fix_client_md.html command) or server. See the "server +md"_server_md.html doc page for details on the protocol. + +For protocol {mc}, LAMMPS can be the server. See the "server +mc"_server_mc.html doc page for details on the protocol. + +:line + +[Restrictions:] + +This command is part of the MESSAGE package. It is only enabled if +LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +A script that uses this command must also use the +"message"_message.html command to setup the messaging protocol with +the other client code. + +[Related commands:] + +"message"_message.html, "fix client/md"_fix_client_md.html + +[Default:] none diff --git a/doc/src/server_mc.txt b/doc/src/server_mc.txt new file mode 100644 index 0000000000000000000000000000000000000000..58ca415be3b3c0e9e0be333cba42b7a0df26c49d --- /dev/null +++ b/doc/src/server_mc.txt @@ -0,0 +1,116 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +server mc command :h3 + +[Syntax:] + +server mc :pre + +mc = the protocol argument to the "server"_server.html command + +[Examples:] + +server mc :pre + +[Description:] + +This command starts LAMMPS running in "server" mode, where it will +expect messages from a separate "client" code that match the {mc} +protocol for format and content explained below. For each message +LAMMPS receives it will send a message back to the client. + +The "Howto client/server"_Howto_client_server.html doc page gives an +overview of client/server coupling of LAMMPS with another code where +one code is the "client" and sends request messages to a "server" +code. The server responds to each request with a reply message. This +enables the two codes to work in tandem to perform a simulation. + +When this command is invoked, LAMMPS will run in server mode in an +endless loop, waiting for messages from the client code. The client +signals when it is done sending messages to LAMMPS, at which point the +loop will exit, and the remainder of the LAMMPS script will be +processed. + +The "server"_server.html doc page gives other options for using LAMMPS +See an example of how this command is used in +examples/COUPLE/lammps_mc/in.server. + +:line + +When using this command, LAMMPS (as the server code) receives +instructions from a Monte Carlo (MC) driver to displace random atoms, +compute the energy before and after displacement, and run dynamics to +equilibrate the system. + +The MC driver performs the random displacements on random atoms, +accepts or rejects the move in an MC sense, and orchestrates the MD +runs. + +The format and content of the exchanged messages are explained here in +a conceptual sense. Python-style pseudo code for the library calls to +the CSlib is shown, which performs the actual message exchange between +the two codes. See the "CSlib website"_http://cslib.sandia.gov doc +pages for more details on the actual library syntax. The "cs" object +in this pseudo code is a pointer to an instance of the CSlib. + +See the src/MESSAGE/server_mc.cpp file for details on how LAMMPS uses +these messages. See the examples/COUPLE/lammmps_mc/mc.cpp file for an +example of how an MC driver code can use these messages. + +Define NATOMS=1, EINIT=2, DISPLACE=3, ACCEPT=4, RUN=5. + +[Client sends one of these kinds of message]: + +cs->send(NATOMS,0) # msgID = 1 with no fields :pre + +cs->send(EINIT,0) # msgID = 2 with no fields :pre + +cs->send(DISPLACE,2) # msgID = 3 with 2 fields +cs->pack_int(1,ID) # 1st field = ID of atom to displace +cs->pack(2,3,xnew) # 2nd field = new xyz coords of displaced atom :pre + +cs->send(ACCEPT,1) # msgID = 4 with 1 field +cs->pack_int(1,flag) # 1st field = accept/reject flag :pre + +cs->send(RUN,1) # msgID = 5 with 1 field +cs->pack_int(1,nsteps) # 1st field = # of timesteps to run MD :pre + +[Server replies]: + +cs->send(NATOMS,1) # msgID = 1 with 1 field +cs->pack_int(1,natoms) # 1st field = number of atoms :pre + +cs->send(EINIT,2) # msgID = 2 with 2 fields +cs->pack_double(1,poteng) # 1st field = potential energy of system +cs->pack(2,3*natoms,x) # 2nd field = 3N coords of Natoms :pre + +cs->send(DISPLACE,1) # msgID = 3 with 1 field +cs->pack_double(1,poteng) # 1st field = new potential energy of system :pre + +cs->send(ACCEPT,0) # msgID = 4 with no fields :pre + +cs->send(RUN,0) # msgID = 5 with no fields :pre + +:line + +[Restrictions:] + +This command is part of the MESSAGE package. It is only enabled if +LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +A script that uses this command must also use the +"message"_message.html command to setup the messaging protocol with +the other client code. + +[Related commands:] + +"message"_message.html + +[Default:] none diff --git a/doc/src/server_md.txt b/doc/src/server_md.txt new file mode 100644 index 0000000000000000000000000000000000000000..753542dc75b9cd90db45a55b42f35f862e8f8ede --- /dev/null +++ b/doc/src/server_md.txt @@ -0,0 +1,149 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +server md command :h3 + +[Syntax:] + +server md :pre + +md = the protocol argument to the "server"_server.html command + +[Examples:] + +server md :pre + +[Description:] + +This command starts LAMMPS running in "server" mode, where it will +expect messages from a separate "client" code that match the {md} +protocol for format and content explained below. For each message +LAMMPS receives it will send a message back to the client. + +The "Howto client/server"_Howto_client_server.html doc page gives an +overview of client/server coupling of LAMMPS with another code where +one code is the "client" and sends request messages to a "server" +code. The server responds to each request with a reply message. This +enables the two codes to work in tandem to perform a simulation. + +When this command is invoked, LAMMPS will run in server mode in an +endless loop, waiting for messages from the client code. The client +signals when it is done sending messages to LAMMPS, at which point the +loop will exit, and the remainder of the LAMMPS script will be +processed. + +The "server"_server.html doc page gives other options for using LAMMPS +in server mode. See an example of how this command is used in +examples/message/in.message.server. + +:line + +When using this command, LAMMPS (as the server code) receives the +current coordinates of all particles from the client code each +timestep, computes their interaction, and returns the energy, forces, +and pressure for the interacting particles to the client code, so it +can complete the timestep. This command could also be used with a +client code that performs energy minimization, using the server to +compute forces and energy each iteration of its minimizer. + +When using the "fix client/md"_fix_client_md.html command, LAMMPS (as +the client code) does the timestepping and receives needed energy, +forces, and pressure values from the server code. + +The format and content of the exchanged messages are explained here in +a conceptual sense. Python-style pseudo code for the library calls to +the CSlib is shown, which performs the actual message exchange between +the two codes. See the "CSlib website"_http://cslib.sandia.gov doc +pages for more details on the actual library syntax. The "cs" object +in this pseudo code is a pointer to an instance of the CSlib. + +See the src/MESSAGE/server_md.cpp and src/MESSAGE/fix_client_md.cpp +files for details on how LAMMPS uses these messages. See the +examples/COUPLE/lammps_vasp/vasp_wrapper.py file for an example of how +a quantum code (VASP) can use use these messages. + +The following pseudo-code uses these values, defined as enums. + +Define: + +SETUP=1, STEP=2 +DIM=1, PERIODICITY=2, ORIGIN=3, BOX=4, NATOMS=5, NTYPES=6, TYPES=7, COORDS=8, UNITS-9, CHARGE=10 +FORCES=1, ENERGY=2, PRESSURE=3, ERROR=4 :pre + +[Client sends 2 kinds of messages]: + +# required fields: DIM, PERIODICTY, ORIGIN, BOX, NATOMS, NTYPES, TYPES, COORDS +# optional fields: UNITS, CHARGE :pre + +cs->send(SETUP,nfields) # msgID with nfields :pre + +cs->pack_int(DIM,dim) # dimension (2,3) of simulation +cs->pack(PERIODICITY,3,xyz) # periodicity flags in 3 dims +cs->pack(ORIGIN,3,origin) # lower-left corner of simulation box +cs->pack(BOX,9,box) # 3 edge vectors of simulation box +cs->pack_int(NATOMS,natoms) # total number of atoms +cs->pack_int(NTYPES,ntypes) # number of atom types +cs->pack(TYPES,natoms,type) # vector of per-atom types +cs->pack(COORDS,3*natoms,x) # vector of 3N atom coords +cs->pack_string(UNITS,units) # units = "lj", "real", "metal", etc +cs->pack(CHARGE,natoms,q) # vector of per-atom charge :pre + +# required fields: COORDS +# optional fields: ORIGIN, BOX :pre + +cs->send(STEP,nfields) # msgID with nfields :pre + +cs->pack(COORDS,3*natoms,x) # vector of 3N atom coords +cs->pack(ORIGIN,3,origin) # lower-left corner of simulation box +cs->pack(BOX,9,box) # 3 edge vectors of simulation box :pre + +[Server replies to either kind of message]: + +# required fields: FORCES, ENERGY, PRESSURE +# optional fields: ERROR :pre + +cs->send(msgID,nfields) # msgID with nfields +cs->pack(FORCES,3*Natoms,f) # vector of 3N forces on atoms +cs->pack(ENERGY,1,poteng) # total potential energy of system +cs->pack(PRESSURE,6,press) # global pressure tensor (6-vector) +cs->pack_int(ERROR,flag) # server had an error (e.g. DFT non-convergence) :pre + +:line + +The units for various quantities that are sent and received iva +messages are defined for atomic-scale simulations in the table below. +The client and server codes (including LAMMPS) can use internal units +different than these (e.g. "real units"_units.html in LAMMPS), so long +as they convert to these units for meesaging. + +COORDS, ORIGIN, BOX = Angstroms +CHARGE = multiple of electron charge (1.0 is a proton) +ENERGY = eV +FORCES = eV/Angstrom +PRESSURE = bars :ul + +Note that these are "metal units"_units.html in LAMMPS. + +If you wish to run LAMMPS in another its non-atomic units, e.g. "lj +units"_units.html, then the client and server should exchange a UNITS +message as indicated above, and both the client and server should +agree on the units for the data they exchange. + +:line + +[Restrictions:] + +This command is part of the MESSAGE package. It is only enabled if +LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"message"_message.html, "fix client/md"_fix_client_md.html + +[Default:] none diff --git a/doc/src/special_bonds.txt b/doc/src/special_bonds.txt index a57b61664d56e76b28d3aad9f2059bdbb24a9c31..e90535e65fa105517353af3ce593da6580b823bc 100644 --- a/doc/src/special_bonds.txt +++ b/doc/src/special_bonds.txt @@ -13,7 +13,7 @@ special_bonds command :h3 special_bonds keyword values ... :pre one or more keyword/value pairs may be appended :ulb,l -keyword = {amber} or {charmm} or {dreiding} or {fene} or {lj/coul} or {lj} or {coul} or {angle} or {dihedral} or {extra} :l +keyword = {amber} or {charmm} or {dreiding} or {fene} or {lj/coul} or {lj} or {coul} or {angle} or {dihedral} :l {amber} values = none {charmm} values = none {dreiding} values = none @@ -64,7 +64,7 @@ e.g. when using the "pair_style hybrid"_pair_hybrid.html command. Thus LAMMPS ignores special_bonds settings when manybody potentials are calculated. Please note, that the existence of explicit bonds for atoms that are described by a manybody potential will alter the -neigborlist and thus can render the computation of those interactions +neighbor list and thus can render the computation of those interactions invalid, since those pairs are not only used to determine direct pairwise interactions but also neighbors of neighbors and more. The recommended course of action is to remove such bonds, or - if @@ -110,7 +110,7 @@ simulation. The two exceptions to this rule are (a) if the {angle} or {dihedral} keywords are set to {yes} (see below), or (b) if the "delete_bonds"_delete_bonds.html command is used with the {special} -option that recomputes the 1-2,1-3,1-4 topologies after bonds are +option that re-computes the 1-2,1-3,1-4 topologies after bonds are deleted; see the "delete_bonds"_delete_bonds.html command for more details. @@ -219,7 +219,7 @@ each time the command is issued. [Default:] All 3 Lennard-Jones and 3 Coulombic weighting coefficients = 0.0, -angle = no, dihedral = no, and extra = 0. +angle = no, dihedral = no. :line diff --git a/doc/utils/converters/lammpsdoc/lammps_filters.py b/doc/utils/converters/lammpsdoc/lammps_filters.py index 11460185db56eed8d1b71e71f3b5ec4442c07f09..7b1481ceb9b75da66bbf388fab4d80560b995019 100644 --- a/doc/utils/converters/lammpsdoc/lammps_filters.py +++ b/doc/utils/converters/lammpsdoc/lammps_filters.py @@ -64,7 +64,7 @@ def filter_file_header_until_first_horizontal_line(content): common_links = "\n.. _lws: http://lammps.sandia.gov\n" \ ".. _ld: Manual.html\n" \ - ".. _lc: Section_commands.html#comm\n" + ".. _lc: Commands_all.html\n" if first_hr >= 0: return content[first_hr+len(hr):].lstrip() + common_links diff --git a/doc/utils/converters/tests/test_lammps_filters.py b/doc/utils/converters/tests/test_lammps_filters.py index 6c25c23a793828857f2e41ade334f1af9a75d12b..8d2fa2e57760257a2890fc3be91e49b93c70aa66 100644 --- a/doc/utils/converters/tests/test_lammps_filters.py +++ b/doc/utils/converters/tests/test_lammps_filters.py @@ -47,7 +47,7 @@ class TestStructuralFilters(unittest.TestCase): self.assertEqual("Title\n\n" "\n.. _lws: http://lammps.sandia.gov\n" ".. _ld: Manual.html\n" - ".. _lc: Section_commands.html#comm\n", s) + ".. _lc: Commands_all.html\n", s) def test_filter_multiple_horizontal_rules(self): s = self.txt2rst.convert(":hline\n" diff --git a/doc/utils/sphinx-config/_themes/lammps_theme/breadcrumbs.html b/doc/utils/sphinx-config/_themes/lammps_theme/breadcrumbs.html index 39ee684a0b078edf4f771d3f52e975bbbf047d20..1eb53c70a29b5becf7c6abd236e3d2312bc00b4e 100644 --- a/doc/utils/sphinx-config/_themes/lammps_theme/breadcrumbs.html +++ b/doc/utils/sphinx-config/_themes/lammps_theme/breadcrumbs.html @@ -18,7 +18,7 @@ View page source {% endif %} Website - Commands + Commands {% endif %} diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index fb08e4e97e5b19ad0713819f173a78555d0ff42d..febd5c20a02d74a4d588e697cde72da12e7be840 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -260,6 +260,8 @@ Caro cartesian Cates cbecker +ccache +ccmake CCu cd cdeam @@ -286,6 +288,9 @@ cgs Chalopin Champaign charmm +charmmfsw +charmmfsh +charmm CHARMM checkmark checkqeq @@ -308,6 +313,8 @@ Clebsch Clermont clo Clovertown +cmake +CMake cmap Cmax cmdlist @@ -410,6 +417,7 @@ Cval cvar cvff cwiggle +cygwin Cygwin Cyrot cyrstals @@ -585,6 +593,7 @@ ehanced ehex eHEX Ei +Eigen Eigensolve Eike eim @@ -713,7 +722,10 @@ fhg Fi figshare Fij -filenname +filename +filenames +Filename +Filenames fileper Fincham Finchham @@ -1385,6 +1397,7 @@ Mikami Militzer Minary mincap +mingw minima minimizations minimizer @@ -1456,6 +1469,7 @@ Mtotal Muccioli Mukherjee Mulders +multi multibody Multibody multicenter @@ -2489,6 +2503,7 @@ velocites Verlag verlet Verlet +versa ves vhi vibrational @@ -2566,6 +2581,7 @@ whitespace Wi Wicaksono wih +wildcard Wirnsberger wirtes witin diff --git a/examples/COUPLE/README b/examples/COUPLE/README index 83e7463531de47c29b81883ff74493682139c3eb..0e611befbd3083d0044260695007aa544b6df4db 100644 --- a/examples/COUPLE/README +++ b/examples/COUPLE/README @@ -10,6 +10,7 @@ See these sections of the LAMMPS manaul for details: 2.5 Building LAMMPS as a library (doc/Section_start.html#start_5) 6.10 Coupling LAMMPS to other codes (doc/Section_howto.html#howto_10) +6.29 Using LAMMPS in client/server mode (doc/Section_howto.html#howto_29) In all of the examples included here, LAMMPS must first be built as a library. Basically, in the src dir you type one of @@ -33,9 +34,13 @@ These are the sub-directories included in this directory: simple simple example of driver code calling LAMMPS as a lib multiple example of driver code calling multiple instances of LAMMPS +lammps_mc client/server coupling of Monte Carlo client + with LAMMPS server for energy evaluation lammps_quest MD with quantum forces, coupling to Quest DFT code lammps_spparks grain-growth Monte Carlo with strain via MD, coupling to SPPARKS kinetic MC code +lammps_vasp client/server coupling of LAMMPS client with + VASP quantum DFT as server for quantum forces library collection of useful inter-code communication routines fortran a simple wrapper on the LAMMPS library API that can be called from Fortran diff --git a/examples/COUPLE/lammps_mc/Makefile b/examples/COUPLE/lammps_mc/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..c75bd08c738b6b383edf5deda81f365fa1cd6f7b --- /dev/null +++ b/examples/COUPLE/lammps_mc/Makefile @@ -0,0 +1,33 @@ +# Makefile for MC + +SHELL = /bin/sh + +SRC = mc.cpp random_park.cpp +OBJ = $(SRC:.cpp=.o) + +# change this line for your machine to path for CSlib src dir + +CSLIB = /home/sjplimp/lammps/lib/message/cslib/src + +# compiler/linker settings + +CC = g++ +CCFLAGS = -g -O3 -I$(CSLIB) +LINK = g++ +LINKFLAGS = -g -O -L$(CSLIB) + +# targets + +mc: $(OBJ) +# first line if built the CSlib within lib/message with ZMQ support +# second line if built the CSlib without ZMQ support + $(LINK) $(LINKFLAGS) $(OBJ) -lcsnompi -lzmq -o mc +# $(LINK) $(LINKFLAGS) $(OBJ) -lcsnompi -o mc + +clean: + @rm -f *.o mc + +# rules + +%.o:%.cpp + $(CC) $(CCFLAGS) -c $< diff --git a/examples/COUPLE/lammps_mc/README b/examples/COUPLE/lammps_mc/README new file mode 100644 index 0000000000000000000000000000000000000000..c201a6351cf01278f1b7cfa708c17fcd56df9c04 --- /dev/null +++ b/examples/COUPLE/lammps_mc/README @@ -0,0 +1,128 @@ +Sample Monte Carlo (MC) wrapper on LAMMPS via client/server coupling + +See the MESSAGE package (doc/Section_messages.html#MESSAGE) +and Section_howto.html#howto10 for more details on how +client/server coupling works in LAMMPS. + +In this dir, the mc.cpp/h files are a standalone "client" MC code. It +should be run on a single processor, though it could become a parallel +program at some point. LAMMPS is also run as a standalone executable +as a "server" on as many processors as desired using its "server mc" +command; see it's doc page for details. + +Messages are exchanged between MC and LAMMPS via a client/server +library (CSlib), which is included in the LAMMPS distribution in +lib/message. As explained below you can choose to exchange data +between the two programs either via files or sockets (ZMQ). If the MC +program became parallel, data could also be exchanged via MPI. + +The MC code makes simple MC moves, by displacing a single random atom +by a small random amount. It uses LAMMPS to calculate the energy +change, and to run dynamics between MC moves. + +---------------- + +Build LAMMPS with its MESSAGE package installed: + +See the Build extras doc page and its MESSAGE package +section for details. + +CMake: + +-D PKG_MESSAGE=yes # include the MESSAGE package +-D MESSAGE_ZMQ=value # build with ZeroMQ support, value = no (default) or yes + +Traditional make: + +% cd lammps/lib/message +% python Install.py -m -z # build CSlib with MPI and ZMQ support +% cd lammps/src +% make yes-message +% make mpi + +You can leave off the -z if you do not have ZMQ on your system. + +---------------- + +Build the MC client code + +The source files for the MC code are in this dir. It links with the +CSlib library in lib/message/cslib. + +You must first build the CSlib in serial mode, e.g. + +% cd lammps/lib/message/cslib/src +% make lib # build serial and parallel lib with ZMQ support +% make lib zmq=no # build serial and parallel lib without ZMQ support + +Then edit the Makefile in this dir. The CSLIB variable should be the +path to where the LAMMPS lib/message/cslib/src dir is on your system. +If you built the CSlib without ZMQ support you will also need to +comment/uncomment one line. Then you can just type + +% make + +and you should get an "mc" executable. + +---------------- + +To run in client/server mode: + +Both the client (MC) and server (LAMMPS) must use the same messaging +mode, namely file or zmq. This is an argument to the MC code; it can +be selected by setting the "mode" variable when you run LAMMPS. The +default mode = file. + +Here we assume LAMMPS was built to run in parallel, and the MESSAGE +package was installed with socket (ZMQ) support. This means either of +the messaging modes can be used and LAMMPS can be run in serial or +parallel. The MC code is always run in serial. + +When you run, the server should print out thermodynamic info +for every MD run it performs (between MC moves). The client +will print nothing until the simulation ends, then it will +print stats about the accepted MC moves. + +The examples below are commands you should use in two different +terminal windows. The order of the two commands (client or server +launch) does not matter. You can run them both in the same window if +you append a "&" character to the first one to run it in the +background. + +-------------- + +File mode of messaging: + +% mpirun -np 1 mc in.mc file tmp.couple +% mpirun -np 1 lmp_mpi -v mode file < in.mc.server + +% mpirun -np 1 mc in.mc file tmp.couple +% mpirun -np 4 lmp_mpi -v mode file < in.mc.server + +ZMQ mode of messaging: + +% mpirun -np 1 mc in.mc zmq localhost:5555 +% mpirun -np 1 lmp_mpi -v mode zmq < in.mc.server + +% mpirun -np 1 mc in.mc zmq localhost:5555 +% mpirun -np 4 lmp_mpi -v mode zmq < in.mc.server + +-------------- + +The input script for the MC program is in.mc. You can edit it to run +longer simulations. + +500 nsteps = total # of steps of MD +100 ndynamics = # of MD steps between MC moves +0.1 delta = displacement size of MC move +1.0 temperature = used in MC Boltzman factor +12345 seed = random number seed + +-------------- + +The problem size that LAMMPS is computing the MC energy for and +running dynamics on is set by the x,y,z variables in the LAMMPS +in.mc.server script. The default size is 500 particles. You can +adjust the size as follows: + +lmp_mpi -v x 10 -v y 10 -v z 20 # 8000 particles diff --git a/examples/COUPLE/lammps_mc/in.mc b/examples/COUPLE/lammps_mc/in.mc new file mode 100644 index 0000000000000000000000000000000000000000..85052d09f1bdd0957a5fc4d030cdd4ef3741e08e --- /dev/null +++ b/examples/COUPLE/lammps_mc/in.mc @@ -0,0 +1,7 @@ +# MC params + +500 nsteps +100 ndynamics +0.1 delta +1.0 temperature +12345 seed diff --git a/examples/COUPLE/lammps_mc/in.mc.server b/examples/COUPLE/lammps_mc/in.mc.server new file mode 100644 index 0000000000000000000000000000000000000000..8b10bb0f7be97e3f07c2421c5f2b38bbdef7c0b1 --- /dev/null +++ b/examples/COUPLE/lammps_mc/in.mc.server @@ -0,0 +1,36 @@ +# 3d Lennard-Jones Monte Carlo server script + +variable mode index file + +if "${mode} == file" then & + "message server mc file tmp.couple" & +elif "${mode} == zmq" & + "message server mc zmq *:5555" & + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +region box block 0 $x 0 $y 0 $z +create_box 1 box +create_atoms 1 box +mass 1 1.0 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +velocity all create 1.44 87287 loop geom + +fix 1 all nve + +thermo 50 + +server mc diff --git a/examples/COUPLE/lammps_mc/log.28Aug18.file.g++.1 b/examples/COUPLE/lammps_mc/log.28Aug18.file.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..0d67c89cf191e9216f51ec574658430694371b50 --- /dev/null +++ b/examples/COUPLE/lammps_mc/log.28Aug18.file.g++.1 @@ -0,0 +1,254 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones Monte Carlo server script + +variable mode index file + +if "${mode} == file" then "message server mc file tmp.couple" elif "${mode} == zmq" "message server mc zmq *:5555" +message server mc file tmp.couple +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000649929 secs +mass 1 1.0 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +velocity all create 1.44 87287 loop geom + +fix 1 all nve + +thermo 50 + +server mc +run 0 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6176881 -5.0221006 +Loop time of 2.14577e-06 on 1 procs for 0 steps with 500 atoms + +93.2% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 2.146e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1956 ave 1956 max 1956 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19500 ave 19500 max 19500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19500 +Ave neighs/atom = 39 +Neighbor list builds = 0 +Dangerous builds not checked +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 +Loop time of 2.14577e-06 on 1 procs for 0 steps with 500 atoms + +93.2% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 2.146e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1956 ave 1956 max 1956 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19501 ave 19501 max 19501 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19501 +Ave neighs/atom = 39.002 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 + 50 0.70239211 -5.6763152 0 -4.6248342 0.59544428 + 100 0.7565013 -5.757431 0 -4.6249485 0.21982657 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.7565013 -5.7565768 0 -4.6240944 0.22436405 +Loop time of 1.90735e-06 on 1 procs for 0 steps with 500 atoms + +157.3% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.907e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1939 ave 1939 max 1939 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18757 ave 18757 max 18757 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18757 +Ave neighs/atom = 37.514 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.7565013 -5.757431 0 -4.6249485 0.21982657 + 150 0.76110797 -5.7664315 0 -4.6270529 0.16005254 + 200 0.73505651 -5.7266069 0 -4.6262273 0.34189744 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73505651 -5.7181381 0 -4.6177585 0.37629943 +Loop time of 2.14577e-06 on 1 procs for 0 steps with 500 atoms + +139.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 2.146e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1899 ave 1899 max 1899 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18699 ave 18699 max 18699 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18699 +Ave neighs/atom = 37.398 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73505651 -5.7266069 0 -4.6262273 0.34189744 + 250 0.73052476 -5.7206316 0 -4.627036 0.39287516 + 300 0.76300831 -5.7675007 0 -4.6252773 0.16312925 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76300831 -5.768304 0 -4.6260806 0.15954325 +Loop time of 2.14577e-06 on 1 procs for 0 steps with 500 atoms + +139.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 2.146e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1903 ave 1903 max 1903 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18715 ave 18715 max 18715 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18715 +Ave neighs/atom = 37.43 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76300831 -5.768304 0 -4.6260806 0.15954325 + 350 0.72993309 -5.7193261 0 -4.6266162 0.3358374 + 400 0.72469448 -5.713463 0 -4.6285954 0.44859547 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.72469448 -5.7077332 0 -4.6228655 0.47669832 +Loop time of 1.90735e-06 on 1 procs for 0 steps with 500 atoms + +157.3% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.907e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1899 ave 1899 max 1899 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18683 ave 18683 max 18683 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18683 +Ave neighs/atom = 37.366 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.72469448 -5.713463 0 -4.6285954 0.44859547 + 450 0.75305735 -5.7518283 0 -4.6245015 0.34658587 + 500 0.73092571 -5.7206337 0 -4.6264379 0.43715809 +Total wall time: 0:00:02 diff --git a/examples/COUPLE/lammps_mc/log.28Aug18.file.g++.4 b/examples/COUPLE/lammps_mc/log.28Aug18.file.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..2ae51d246142f346033d126fdf2ffcfef092d0c6 --- /dev/null +++ b/examples/COUPLE/lammps_mc/log.28Aug18.file.g++.4 @@ -0,0 +1,254 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones Monte Carlo server script + +variable mode index file + +if "${mode} == file" then "message server mc file tmp.couple" elif "${mode} == zmq" "message server mc zmq *:5555" +message server mc file tmp.couple +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000592947 secs +mass 1 1.0 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +velocity all create 1.44 87287 loop geom + +fix 1 all nve + +thermo 50 + +server mc +run 0 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6176881 -5.0221006 +Loop time of 3.8147e-06 on 4 procs for 0 steps with 500 atoms + +59.0% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 3.815e-06 | | |100.00 + +Nlocal: 125 ave 125 max 125 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 1099 ave 1099 max 1099 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 4875 ave 4875 max 4875 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19500 +Ave neighs/atom = 39 +Neighbor list builds = 0 +Dangerous builds not checked +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 +Loop time of 3.03984e-06 on 4 procs for 0 steps with 500 atoms + +106.9% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 3.04e-06 | | |100.00 + +Nlocal: 125 ave 125 max 125 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 1099 ave 1099 max 1099 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 4875.25 ave 4885 max 4866 min +Histogram: 1 0 0 0 2 0 0 0 0 1 + +Total # of neighbors = 19501 +Ave neighs/atom = 39.002 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 + 50 0.70210225 -5.6759068 0 -4.6248598 0.59609192 + 100 0.75891559 -5.7611234 0 -4.6250267 0.20841608 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.75891559 -5.7609392 0 -4.6248426 0.20981291 +Loop time of 3.75509e-06 on 4 procs for 0 steps with 500 atoms + +113.2% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 3.755e-06 | | |100.00 + +Nlocal: 125 ave 126 max 124 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 1085.25 ave 1089 max 1079 min +Histogram: 1 0 0 0 0 1 0 0 0 2 +Neighs: 4690.25 ave 4996 max 4401 min +Histogram: 1 0 0 1 0 1 0 0 0 1 + +Total # of neighbors = 18761 +Ave neighs/atom = 37.522 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.75891559 -5.7609392 0 -4.6248426 0.20981291 + 150 0.75437991 -5.7558622 0 -4.6265555 0.20681722 + 200 0.73111257 -5.7193748 0 -4.6248993 0.35230715 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73111257 -5.7143906 0 -4.6199151 0.37126023 +Loop time of 2.563e-06 on 4 procs for 0 steps with 500 atoms + +117.1% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 2.563e-06 | | |100.00 + +Nlocal: 125 ave 126 max 123 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 1068.5 ave 1076 max 1063 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Neighs: 4674.75 ave 4938 max 4419 min +Histogram: 1 0 0 0 1 1 0 0 0 1 + +Total # of neighbors = 18699 +Ave neighs/atom = 37.398 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73111257 -5.7193748 0 -4.6248993 0.35230715 + 250 0.73873144 -5.7312505 0 -4.6253696 0.33061033 + 300 0.76392796 -5.7719207 0 -4.6283206 0.18197874 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76392796 -5.7725589 0 -4.6289588 0.17994628 +Loop time of 3.99351e-06 on 4 procs for 0 steps with 500 atoms + +93.9% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 3.994e-06 | | |100.00 + +Nlocal: 125 ave 128 max 121 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +Nghost: 1069 ave 1080 max 1055 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 4672 ave 4803 max 4600 min +Histogram: 2 0 0 1 0 0 0 0 0 1 + +Total # of neighbors = 18688 +Ave neighs/atom = 37.376 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76392796 -5.7725589 0 -4.6289588 0.17994628 + 350 0.71953041 -5.7041632 0 -4.6270261 0.44866153 + 400 0.7319047 -5.7216051 0 -4.6259438 0.46321355 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.7319047 -5.7158168 0 -4.6201554 0.49192039 +Loop time of 3.57628e-06 on 4 procs for 0 steps with 500 atoms + +111.8% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 3.576e-06 | | |100.00 + +Nlocal: 125 ave 132 max 118 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Nghost: 1057.5 ave 1068 max 1049 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Neighs: 4685.75 ave 5045 max 4229 min +Histogram: 1 0 0 1 0 0 0 0 0 2 + +Total # of neighbors = 18743 +Ave neighs/atom = 37.486 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.7319047 -5.7216051 0 -4.6259438 0.46321355 + 450 0.74503154 -5.7405318 0 -4.6252196 0.33211879 + 500 0.70570501 -5.6824439 0 -4.6260035 0.62020788 +Total wall time: 0:00:02 diff --git a/examples/COUPLE/lammps_mc/log.28Aug18.zmq.g++.1 b/examples/COUPLE/lammps_mc/log.28Aug18.zmq.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..0565487bc6e8bea16240c4dacc3524a15be446e8 --- /dev/null +++ b/examples/COUPLE/lammps_mc/log.28Aug18.zmq.g++.1 @@ -0,0 +1,254 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones Monte Carlo server script + +variable mode index file + +if "${mode} == file" then "message server mc file tmp.couple" elif "${mode} == zmq" "message server mc zmq *:5555" +message server mc zmq *:5555 +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000741005 secs +mass 1 1.0 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +velocity all create 1.44 87287 loop geom + +fix 1 all nve + +thermo 50 + +server mc +run 0 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6176881 -5.0221006 +Loop time of 1.90735e-06 on 1 procs for 0 steps with 500 atoms + +52.4% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.907e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1956 ave 1956 max 1956 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19500 ave 19500 max 19500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19500 +Ave neighs/atom = 39 +Neighbor list builds = 0 +Dangerous builds not checked +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 +Loop time of 1.90735e-06 on 1 procs for 0 steps with 500 atoms + +52.4% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.907e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1956 ave 1956 max 1956 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19501 ave 19501 max 19501 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19501 +Ave neighs/atom = 39.002 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 + 50 0.70239211 -5.6763152 0 -4.6248342 0.59544428 + 100 0.7565013 -5.757431 0 -4.6249485 0.21982657 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.7565013 -5.7565768 0 -4.6240944 0.22436405 +Loop time of 1.19209e-06 on 1 procs for 0 steps with 500 atoms + +83.9% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.192e-06 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1939 ave 1939 max 1939 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18757 ave 18757 max 18757 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18757 +Ave neighs/atom = 37.514 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.7565013 -5.757431 0 -4.6249485 0.21982657 + 150 0.76110797 -5.7664315 0 -4.6270529 0.16005254 + 200 0.73505651 -5.7266069 0 -4.6262273 0.34189744 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73505651 -5.7181381 0 -4.6177585 0.37629943 +Loop time of 9.53674e-07 on 1 procs for 0 steps with 500 atoms + +209.7% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 9.537e-07 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1899 ave 1899 max 1899 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18699 ave 18699 max 18699 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18699 +Ave neighs/atom = 37.398 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73505651 -5.7266069 0 -4.6262273 0.34189744 + 250 0.73052476 -5.7206316 0 -4.627036 0.39287516 + 300 0.76300831 -5.7675007 0 -4.6252773 0.16312925 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76300831 -5.768304 0 -4.6260806 0.15954325 +Loop time of 9.53674e-07 on 1 procs for 0 steps with 500 atoms + +104.9% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 9.537e-07 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1903 ave 1903 max 1903 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18715 ave 18715 max 18715 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18715 +Ave neighs/atom = 37.43 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76300831 -5.768304 0 -4.6260806 0.15954325 + 350 0.72993309 -5.7193261 0 -4.6266162 0.3358374 + 400 0.72469448 -5.713463 0 -4.6285954 0.44859547 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.72469448 -5.7077332 0 -4.6228655 0.47669832 +Loop time of 9.53674e-07 on 1 procs for 0 steps with 500 atoms + +209.7% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 9.537e-07 | | |100.00 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1899 ave 1899 max 1899 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18683 ave 18683 max 18683 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18683 +Ave neighs/atom = 37.366 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.658 | 2.658 | 2.658 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.72469448 -5.713463 0 -4.6285954 0.44859547 + 450 0.75305735 -5.7518283 0 -4.6245015 0.34658587 + 500 0.73092571 -5.7206337 0 -4.6264379 0.43715809 +Total wall time: 0:00:00 diff --git a/examples/COUPLE/lammps_mc/log.28Aug18.zmq.g++.4 b/examples/COUPLE/lammps_mc/log.28Aug18.zmq.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..e74d03235dacc4574db8178724a45e25fa4bd2d4 --- /dev/null +++ b/examples/COUPLE/lammps_mc/log.28Aug18.zmq.g++.4 @@ -0,0 +1,254 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones Monte Carlo server script + +variable mode index file + +if "${mode} == file" then "message server mc file tmp.couple" elif "${mode} == zmq" "message server mc zmq *:5555" +message server mc zmq *:5555 +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000576019 secs +mass 1 1.0 + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +velocity all create 1.44 87287 loop geom + +fix 1 all nve + +thermo 50 + +server mc +run 0 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6176881 -5.0221006 +Loop time of 4.76837e-06 on 4 procs for 0 steps with 500 atoms + +89.1% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 4.768e-06 | | |100.00 + +Nlocal: 125 ave 125 max 125 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 1099 ave 1099 max 1099 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 4875 ave 4875 max 4875 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19500 +Ave neighs/atom = 39 +Neighbor list builds = 0 +Dangerous builds not checked +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 +Loop time of 3.45707e-06 on 4 procs for 0 steps with 500 atoms + +94.0% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 3.457e-06 | | |100.00 + +Nlocal: 125 ave 125 max 125 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 1099 ave 1099 max 1099 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 4875.25 ave 4885 max 4866 min +Histogram: 1 0 0 0 2 0 0 0 0 1 + +Total # of neighbors = 19501 +Ave neighs/atom = 39.002 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7723127 0 -4.6166327 -5.015531 + 50 0.70210225 -5.6759068 0 -4.6248598 0.59609192 + 100 0.75891559 -5.7611234 0 -4.6250267 0.20841608 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.75891559 -5.7609392 0 -4.6248426 0.20981291 +Loop time of 3.03984e-06 on 4 procs for 0 steps with 500 atoms + +115.1% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 3.04e-06 | | |100.00 + +Nlocal: 125 ave 126 max 124 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Nghost: 1085.25 ave 1089 max 1079 min +Histogram: 1 0 0 0 0 1 0 0 0 2 +Neighs: 4690.25 ave 4996 max 4401 min +Histogram: 1 0 0 1 0 1 0 0 0 1 + +Total # of neighbors = 18761 +Ave neighs/atom = 37.522 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0.75891559 -5.7609392 0 -4.6248426 0.20981291 + 150 0.75437991 -5.7558622 0 -4.6265555 0.20681722 + 200 0.73111257 -5.7193748 0 -4.6248993 0.35230715 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73111257 -5.7143906 0 -4.6199151 0.37126023 +Loop time of 2.38419e-06 on 4 procs for 0 steps with 500 atoms + +125.8% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 2.384e-06 | | |100.00 + +Nlocal: 125 ave 126 max 123 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 1068.5 ave 1076 max 1063 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Neighs: 4674.75 ave 4938 max 4419 min +Histogram: 1 0 0 0 1 1 0 0 0 1 + +Total # of neighbors = 18699 +Ave neighs/atom = 37.398 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 200 0.73111257 -5.7193748 0 -4.6248993 0.35230715 + 250 0.73873144 -5.7312505 0 -4.6253696 0.33061033 + 300 0.76392796 -5.7719207 0 -4.6283206 0.18197874 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76392796 -5.7725589 0 -4.6289588 0.17994628 +Loop time of 2.44379e-06 on 4 procs for 0 steps with 500 atoms + +112.5% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 2.444e-06 | | |100.00 + +Nlocal: 125 ave 128 max 121 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +Nghost: 1069 ave 1080 max 1055 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 4672 ave 4803 max 4600 min +Histogram: 2 0 0 1 0 0 0 0 0 1 + +Total # of neighbors = 18688 +Ave neighs/atom = 37.376 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 300 0.76392796 -5.7725589 0 -4.6289588 0.17994628 + 350 0.71953041 -5.7041632 0 -4.6270261 0.44866153 + 400 0.7319047 -5.7216051 0 -4.6259438 0.46321355 +run 0 +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.7319047 -5.7158168 0 -4.6201554 0.49192039 +Loop time of 2.14577e-06 on 4 procs for 0 steps with 500 atoms + +139.8% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 2.146e-06 | | |100.00 + +Nlocal: 125 ave 132 max 118 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Nghost: 1057.5 ave 1068 max 1049 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Neighs: 4685.75 ave 5045 max 4229 min +Histogram: 1 0 0 1 0 0 0 0 0 2 + +Total # of neighbors = 18743 +Ave neighs/atom = 37.486 +Neighbor list builds = 0 +Dangerous builds not checked +Per MPI rank memory allocation (min/avg/max) = 2.619 | 2.619 | 2.619 Mbytes +Step Temp E_pair E_mol TotEng Press + 400 0.7319047 -5.7216051 0 -4.6259438 0.46321355 + 450 0.74503154 -5.7405318 0 -4.6252196 0.33211879 + 500 0.70570501 -5.6824439 0 -4.6260035 0.62020788 +Total wall time: 0:00:00 diff --git a/examples/COUPLE/lammps_mc/mc.cpp b/examples/COUPLE/lammps_mc/mc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7c2e2ce0391a4305c8e07ee3940bdbdc58f4abcd --- /dev/null +++ b/examples/COUPLE/lammps_mc/mc.cpp @@ -0,0 +1,263 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov +------------------------------------------------------------------------- */ + +// MC code used with LAMMPS in client/server mode +// MC is the client, LAMMPS is the server + +// Syntax: mc infile mode modearg +// mode = file, zmq +// modearg = filename for file, localhost:5555 for zmq + +#include +#include +#include +#include +#include "mc.h" +#include "random_park.h" + +#include "cslib.h" +using namespace CSLIB_NS; + +void error(const char *); +CSlib *cs_create(char *, char *); + +#define MAXLINE 256 + +/* ---------------------------------------------------------------------- */ + +// main program + +int main(int narg, char **arg) +{ + if (narg != 4) { + error("Syntax: mc infile mode modearg"); + exit(1); + } + + // initialize CSlib + + CSlib *cs = cs_create(arg[2],arg[3]); + + // create MC class and perform run + + MC *mc = new MC(arg[1],cs); + mc->run(); + + // final MC stats + + int naccept = mc->naccept; + int nattempt = mc->nattempt; + + printf("------ MC stats ------\n"); + printf("MC attempts = %d\n",nattempt); + printf("MC accepts = %d\n",naccept); + printf("Acceptance ratio = %g\n",1.0*naccept/nattempt); + + // clean up + + delete cs; + delete mc; +} + +/* ---------------------------------------------------------------------- */ + +void error(const char *str) +{ + printf("ERROR: %s\n",str); + exit(1); +} + +/* ---------------------------------------------------------------------- */ + +CSlib *cs_create(char *mode, char *arg) +{ + CSlib *cs = new CSlib(0,mode,arg,NULL); + + // initial handshake to agree on protocol + + cs->send(0,1); + cs->pack_string(1,(char *) "mc"); + + int msgID,nfield; + int *fieldID,*fieldtype,*fieldlen; + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + + return cs; +} + +// ---------------------------------------------------------------------- +// MC class +// ---------------------------------------------------------------------- + +MC::MC(char *mcfile, void *cs_caller) +//MC::MC(char *mcfile, CSlib *cs_caller) +{ + cs_void = cs_caller; + + // setup MC params + + options(mcfile); + + // random # generator + + random = new RanPark(seed); +} + +/* ---------------------------------------------------------------------- */ + +MC::~MC() +{ + free(x); + delete random; +} + +/* ---------------------------------------------------------------------- */ + +void MC::run() +{ + int iatom,accept,msgID,nfield; + double pe_initial,pe_final,edelta; + double dx,dy,dz; + double xold[3],xnew[3]; + int *fieldID,*fieldtype,*fieldlen; + + enum{NATOMS=1,EINIT,DISPLACE,ACCEPT,RUN}; + + CSlib *cs = (CSlib *) cs_void; + + // one-time request for atom count from MD + // allocate 1d coord buffer + + cs->send(NATOMS,0); + + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + natoms = cs->unpack_int(1); + + x = (double *) malloc(3*natoms*sizeof(double)); + + // loop over MC moves + + naccept = nattempt = 0; + + for (int iloop = 0; iloop < nloop; iloop++) { + + // request current energy from MD + // recv energy, coords from MD + + cs->send(EINIT,0); + + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + pe_initial = cs->unpack_double(1); + double *x = (double *) cs->unpack(2); + + // perform simple MC event + // displace a single atom by random amount + + iatom = (int) natoms*random->uniform(); + xold[0] = x[3*iatom+0]; + xold[1] = x[3*iatom+1]; + xold[2] = x[3*iatom+2]; + + dx = 2.0*delta*random->uniform() - delta; + dy = 2.0*delta*random->uniform() - delta; + dz = 2.0*delta*random->uniform() - delta; + + xnew[0] = xold[0] + dx; + xnew[1] = xold[1] + dx; + xnew[2] = xold[2] + dx; + + // send atom ID and its new coords to MD + // recv new energy + + cs->send(DISPLACE,2); + cs->pack_int(1,iatom+1); + cs->pack(2,4,3,xnew); + + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + pe_final = cs->unpack_double(1); + + // decide whether to accept/reject MC event + + if (pe_final <= pe_initial) accept = 1; + else if (temperature == 0.0) accept = 0; + else if (random->uniform() > + exp(natoms*(pe_initial-pe_final)/temperature)) accept = 0; + else accept = 1; + + nattempt++; + if (accept) naccept++; + + // send accept (1) or reject (0) flag to MD + + cs->send(ACCEPT,1); + cs->pack_int(1,accept); + + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + + // send dynamics timesteps + + cs->send(RUN,1); + cs->pack_int(1,ndynamics); + + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + } + + // send exit message to MD + + cs->send(-1,0); + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); +} + +/* ---------------------------------------------------------------------- */ + +void MC::options(char *filename) +{ + // default params + + nsteps = 0; + ndynamics = 100; + delta = 0.1; + temperature = 1.0; + seed = 12345; + + // read and parse file + + FILE *fp = fopen(filename,"r"); + if (fp == NULL) error("Could not open MC file"); + + char line[MAXLINE]; + char *keyword,*value; + char *eof = fgets(line,MAXLINE,fp); + + while (eof) { + if (line[0] == '#') { // comment line + eof = fgets(line,MAXLINE,fp); + continue; + } + + value = strtok(line," \t\n\r\f"); + if (value == NULL) { // blank line + eof = fgets(line,MAXLINE,fp); + continue; + } + + keyword = strtok(NULL," \t\n\r\f"); + if (keyword == NULL) error("Missing keyword in MC file"); + + if (strcmp(keyword,"nsteps") == 0) nsteps = atoi(value); + else if (strcmp(keyword,"ndynamics") == 0) ndynamics = atoi(value); + else if (strcmp(keyword,"delta") == 0) delta = atof(value); + else if (strcmp(keyword,"temperature") == 0) temperature = atof(value); + else if (strcmp(keyword,"seed") == 0) seed = atoi(value); + else error("Unknown param in MC file"); + + eof = fgets(line,MAXLINE,fp); + } + + // derived params + + nloop = nsteps/ndynamics; +} diff --git a/examples/COUPLE/lammps_mc/mc.h b/examples/COUPLE/lammps_mc/mc.h new file mode 100644 index 0000000000000000000000000000000000000000..e9d88523fcaec0a0d64c90735e9158d0a18ff031 --- /dev/null +++ b/examples/COUPLE/lammps_mc/mc.h @@ -0,0 +1,40 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov +------------------------------------------------------------------------- */ + +#ifndef MC_H +#define MC_H + +/* ---------------------------------------------------------------------- */ + +class MC { + public: + int naccept; // # of accepted MC events + int nattempt; // # of attempted MC events + + MC(char *, void *); + ~MC(); + void run(); + + private: + int nsteps; // total # of MD steps + int ndynamics; // steps in one short dynamics run + int nloop; // nsteps/ndynamics + int natoms; // # of MD atoms + + double delta; // MC displacement distance + double temperature; // MC temperature for Boltzmann criterion + double *x; // atom coords as 3N 1d vector + double energy; // global potential energy + + int seed; // RNG seed + class RanPark *random; + + void *cs_void; // messaging library + + void options(char *); +}; + +#endif diff --git a/examples/COUPLE/lammps_mc/random_park.cpp b/examples/COUPLE/lammps_mc/random_park.cpp new file mode 100644 index 0000000000000000000000000000000000000000..61ac18c6c00ac2984a692c8d13aca0303b48d5c3 --- /dev/null +++ b/examples/COUPLE/lammps_mc/random_park.cpp @@ -0,0 +1,72 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +// Park/Miller RNG + +#include +#include "random_park.h" +//#include "error.h" + +#define IA 16807 +#define IM 2147483647 +#define AM (1.0/IM) +#define IQ 127773 +#define IR 2836 + +/* ---------------------------------------------------------------------- */ + +RanPark::RanPark(int seed_init) +{ + //if (seed_init <= 0) + // error->one(FLERR,"Invalid seed for Park random # generator"); + seed = seed_init; + save = 0; +} + +/* ---------------------------------------------------------------------- + uniform RN +------------------------------------------------------------------------- */ + +double RanPark::uniform() +{ + int k = seed/IQ; + seed = IA*(seed-k*IQ) - IR*k; + if (seed < 0) seed += IM; + double ans = AM*seed; + return ans; +} + +/* ---------------------------------------------------------------------- + gaussian RN +------------------------------------------------------------------------- */ + +double RanPark::gaussian() +{ + double first,v1,v2,rsq,fac; + + if (!save) { + do { + v1 = 2.0*uniform()-1.0; + v2 = 2.0*uniform()-1.0; + rsq = v1*v1 + v2*v2; + } while ((rsq >= 1.0) || (rsq == 0.0)); + fac = sqrt(-2.0*log(rsq)/rsq); + second = v1*fac; + first = v2*fac; + save = 1; + } else { + first = second; + save = 0; + } + return first; +} diff --git a/examples/COUPLE/lammps_mc/random_park.h b/examples/COUPLE/lammps_mc/random_park.h new file mode 100644 index 0000000000000000000000000000000000000000..0dc208176877708f1e6d19b20993da9c55a74f72 --- /dev/null +++ b/examples/COUPLE/lammps_mc/random_park.h @@ -0,0 +1,28 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef RANPARK_H +#define RANPARK_H + +class RanPark { + public: + RanPark(int); + double uniform(); + double gaussian(); + + private: + int seed,save; + double second; +}; + +#endif diff --git a/examples/COUPLE/lammps_vasp/INCAR b/examples/COUPLE/lammps_vasp/INCAR new file mode 100644 index 0000000000000000000000000000000000000000..ac2358e5fbdbfbd2c2f7ebe0d3b693c8376b8799 --- /dev/null +++ b/examples/COUPLE/lammps_vasp/INCAR @@ -0,0 +1,53 @@ +# Startparameter for this run: + NWRITE = 2 write-flag & timer + PREC = normal normal or accurate (medium, high low for compatibility) + ISTART = 0 job : 0-new 1-cont 2-samecut + ICHARG = 2 charge: 1-file 2-atom 10-const + ISPIN = 1 spin polarized calculation? + LSORBIT = F spin-orbit coupling + INIWAV = 1 electr: 0-lowe 1-rand 2-diag + +# Electronic Relaxation 1 + ENCUT = 600.0 eV #Plane wave energy cutoff + ENINI = 600.0 initial cutoff + NELM = 100; NELMIN= 2; NELMDL= -5 # of ELM steps + EDIFF = 0.1E-05 stopping-criterion for ELM +# Ionic relaxation + EDIFFG = 0.1E-02 stopping-criterion for IOM + NSW = 0 number of steps for IOM + NBLOCK = 1; KBLOCK = 1 inner block; outer block + IBRION = -1 ionic relax: 0-MD 1-quasi-New 2-CG #No ion relaxation with -1 + NFREE = 0 steps in history (QN), initial steepest desc. (CG) + ISIF = 2 stress and relaxation # 2: F-yes Sts-yes RlxIon-yes cellshape-no cellvol-no + IWAVPR = 10 prediction: 0-non 1-charg 2-wave 3-comb # 10: TMPCAR stored in memory rather than file + + POTIM = 0.5000 time-step for ionic-motion + TEBEG = 3500.0; TEEND = 3500.0 temperature during run # Finite Temperature variables if AI-MD is on + SMASS = -3.00 Nose mass-parameter (am) + estimated Nose-frequenzy (Omega) = 0.10E-29 period in steps =****** mass= -0.366E-27a.u. + PSTRESS= 0.0 pullay stress + +# DOS related values: + EMIN = 10.00; EMAX =-10.00 energy-range for DOS + EFERMI = 0.00 + ISMEAR = 0; SIGMA = 0.10 broadening in eV -4-tet -1-fermi 0-gaus + +# Electronic relaxation 2 (details) + IALGO = 48 algorithm + +# Write flags + LWAVE = T write WAVECAR + LCHARG = T write CHGCAR + LVTOT = F write LOCPOT, total local potential + LVHAR = F write LOCPOT, Hartree potential only + LELF = F write electronic localiz. function (ELF) + +# Dipole corrections + LMONO = F monopole corrections only (constant potential shift) + LDIPOL = F correct potential (dipole corrections) + IDIPOL = 0 1-x, 2-y, 3-z, 4-all directions + EPSILON= 1.0000000 bulk dielectric constant + +# Exchange correlation treatment: + GGA = -- GGA type + diff --git a/examples/COUPLE/lammps_vasp/KPOINTS b/examples/COUPLE/lammps_vasp/KPOINTS new file mode 100644 index 0000000000000000000000000000000000000000..322509da300a773443eebe1019cc034df3eee02e --- /dev/null +++ b/examples/COUPLE/lammps_vasp/KPOINTS @@ -0,0 +1,6 @@ +K-Points + 0 +Monkhorst Pack + 15 15 15 + 0 0 0 + diff --git a/examples/COUPLE/lammps_vasp/POSCAR_W b/examples/COUPLE/lammps_vasp/POSCAR_W new file mode 100644 index 0000000000000000000000000000000000000000..aba5df54a02c631b807ece6f5f31f24992809025 --- /dev/null +++ b/examples/COUPLE/lammps_vasp/POSCAR_W @@ -0,0 +1,11 @@ +W unit cell +1.0 +3.16 0.00000000 0.00000000 +0.00000000 3.16 0.00000000 +0.00000000 0.00000000 3.16 +W +2 +Direct + 0.00000000 0.00000000 0.00000000 + 0.50000000 0.50000000 0.50000000 + diff --git a/examples/COUPLE/lammps_vasp/README b/examples/COUPLE/lammps_vasp/README new file mode 100644 index 0000000000000000000000000000000000000000..e942d52535d040a39f0b3076de64e7d47788ff65 --- /dev/null +++ b/examples/COUPLE/lammps_vasp/README @@ -0,0 +1,149 @@ +Sample LAMMPS MD wrapper on VASP quantum DFT via client/server +coupling + +See the MESSAGE package (doc/Section_messages.html#MESSAGE) and +Section_howto.html#howto10 for more details on how client/server +coupling works in LAMMPS. + +In this dir, the vasp_wrap.py is a wrapper on the VASP quantum DFT +code so it can work as a "server" code which LAMMPS drives as a +"client" code to perform ab initio MD. LAMMPS performs the MD +timestepping, sends VASP a current set of coordinates each timestep, +VASP computes forces and energy and virial and returns that info to +LAMMPS. + +Messages are exchanged between MC and LAMMPS via a client/server +library (CSlib), which is included in the LAMMPS distribution in +lib/message. As explained below you can choose to exchange data +between the two programs either via files or sockets (ZMQ). If the +vasp_wrap.py program became parallel, or the CSlib library calls were +integrated into VASP directly, then data could also be exchanged via +MPI. + +---------------- + +Build LAMMPS with its MESSAGE package installed: + +See the Build extras doc page and its MESSAGE package +section for details. + +CMake: + +-D PKG_MESSAGE=yes # include the MESSAGE package +-D MESSAGE_ZMQ=value # build with ZeroMQ support, value = no (default) or yes + +Traditional make: + +cd lammps/lib/message +python Install.py -m -z # build CSlib with MPI and ZMQ support +cd lammps/src +make yes-message +make mpi + +You can leave off the -z if you do not have ZMQ on your system. + +---------------- + +Build the CSlib in a form usable by the vasp_wrapper.py script: + +% cd lammps/lib/message/cslib/src +% make shlib # build serial and parallel shared lib with ZMQ support +% make shlib zmq=no # build serial and parallel shared lib w/out ZMQ support + +This will make a shared library versions of the CSlib, which Python +requires. Python must be able to find both the cslib.py script and +the libcsnompi.so library in your lammps/lib/message/cslib/src +directory. If it is not able to do this, you will get an error when +you run vasp_wrapper.py. + +You can do this by augmenting two environment variables, either +from the command line, or in your shell start-up script. +Here is the sample syntax for the csh or tcsh shells: + +setenv PYTHONPATH ${PYTHONPATH}:/home/sjplimp/lammps/lib/message/cslib/src +setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/lib/message/cslib/src + +---------------- + +Prepare to use VASP and the vasp_wrapper.py script + +You can run the vasp_wrap.py script as-is to test that the coupling +between it and LAMMPS is functional. This will use the included +vasprun.xml file output by a previous VASP run. + +But note that the as-is version of vasp_wrap.py will not attempt to +run VASP. + +To do this, you must edit the 1st vaspcmd line at the top of +vasp_wrapper.py to be the launch command needed to run VASP on your +system. It can be a command to run VASP in serial or in parallel, +e.g. an mpirun command. Then comment out the 2nd vaspcmd line +immediately following it. + +Insure you have the necessary VASP input files in this +directory, suitable for the VASP calculation you want to perform: + +INCAR +KPOINTS +POSCAR_template +POTCAR + +Examples of all but the POTCAR file are provided. As explained below, +POSCAR_W is an input file for a 2-atom unit cell of tungsten and can +be used to test the LAMMPS/VASP coupling. The POTCAR file is a +proprietary VASP file, so use one from your VASP installation. + +Note that the POSCAR_template file should be matched to the LAMMPS +input script (# of atoms and atom types, box size, etc). The provided +POSCAR_W matches in.client.W. + +Once you run VASP yourself, the vasprun.xml file will be overwritten. + +---------------- + +To run in client/server mode: + +NOTE: The vasp_wrap.py script must be run with Python version 2, not +3. This is because it used the CSlib python wrapper, which only +supports version 2. We plan to upgrade CSlib to support Python 3. + +Both the client (LAMMPS) and server (vasp_wrap.py) must use the same +messaging mode, namely file or zmq. This is an argument to the +vasp_wrap.py code; it can be selected by setting the "mode" variable +when you run LAMMPS. The default mode = file. + +Here we assume LAMMPS was built to run in parallel, and the MESSAGE +package was installed with socket (ZMQ) support. This means either of +the messaging modes can be used and LAMMPS can be run in serial or +parallel. The vasp_wrap.py code is always run in serial, but it +launches VASP from Python via an mpirun command which can run VASP +itself in parallel. + +When you run, the server should print out thermodynamic info every +timestep which corresponds to the forces and virial computed by VASP. +VASP will also generate output files each timestep. The vasp_wrapper.py +script could be generalized to archive these. + +The examples below are commands you should use in two different +terminal windows. The order of the two commands (client or server +launch) does not matter. You can run them both in the same window if +you append a "&" character to the first one to run it in the +background. + +-------------- + +File mode of messaging: + +% mpirun -np 1 lmp_mpi -v mode file < in.client.W +% python vasp_wrap.py file POSCAR_W + +% mpirun -np 2 lmp_mpi -v mode file < in.client.W +% python vasp_wrap.py file POSCAR_W + +ZMQ mode of messaging: + +% mpirun -np 1 lmp_mpi -v mode zmq < in.client.W +% python vasp_wrap.py zmq POSCAR_W + +% mpirun -np 2 lmp_mpi -v mode zmq < in.client.W +% python vasp_wrap.py zmq POSCAR_W diff --git a/examples/COUPLE/lammps_vasp/data.W b/examples/COUPLE/lammps_vasp/data.W new file mode 100644 index 0000000000000000000000000000000000000000..8accd9ca790422646d4fb9a671ef18387ee5457d --- /dev/null +++ b/examples/COUPLE/lammps_vasp/data.W @@ -0,0 +1,15 @@ +LAMMPS W data file + +2 atoms + +1 atom types + +0.0 3.16 xlo xhi +0.0 3.16 ylo yhi +0.0 3.16 zlo zhi + +Atoms + +1 1 0.000 0.000 0.000 +2 1 1.58 1.58 1.58 + diff --git a/examples/COUPLE/lammps_vasp/in.client.W b/examples/COUPLE/lammps_vasp/in.client.W new file mode 100644 index 0000000000000000000000000000000000000000..3eaf99dcbb121a342eea20b7a98f06c28c76f8a0 --- /dev/null +++ b/examples/COUPLE/lammps_vasp/in.client.W @@ -0,0 +1,34 @@ +# small W unit cell for use with VASP + +variable mode index file + +if "${mode} == file" then & + "message client md file tmp.couple" & +elif "${mode} == zmq" & + "message client md zmq localhost:5555" & + +variable x index 1 +variable y index 1 +variable z index 1 + +units metal +atom_style atomic +atom_modify sort 0 0.0 map yes + +read_data data.W +mass 1 183.85 + +replicate $x $y $z + +velocity all create 300.0 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 10 check no + +fix 1 all nve +fix 2 all client/md +fix_modify 2 energy yes + +thermo 1 +run 3 + diff --git a/examples/COUPLE/lammps_vasp/log.client.output b/examples/COUPLE/lammps_vasp/log.client.output new file mode 100644 index 0000000000000000000000000000000000000000..fa8f4f920ae90b5c72be06275bb4a76fcb028d1b --- /dev/null +++ b/examples/COUPLE/lammps_vasp/log.client.output @@ -0,0 +1,76 @@ +LAMMPS (22 Aug 2018) +# small W unit cell for use with VASP + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" +message client md zmq localhost:5555 +variable x index 1 +variable y index 1 +variable z index 1 + +units metal +atom_style atomic +atom_modify sort 0 0.0 map yes + +read_data data.W + orthogonal box = (0 0 0) to (3.16 3.16 3.16) + 1 by 1 by 2 MPI processor grid + reading atoms ... + 2 atoms +mass 1 183.85 + +replicate $x $y $z +replicate 1 $y $z +replicate 1 1 $z +replicate 1 1 1 + orthogonal box = (0 0 0) to (3.16 3.16 3.16) + 1 by 1 by 2 MPI processor grid + 2 atoms + Time spent = 0.000148058 secs + +velocity all create 300.0 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 10 check no + +fix 1 all nve +fix 2 all client/md +fix_modify 2 energy yes + +thermo 1 +run 3 +Per MPI rank memory allocation (min/avg/max) = 1.8 | 1.8 | 1.8 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 0 0 -48.030793 -78159.503 + 1 298.24318 0 0 -48.03102 -78167.19 + 2 296.85584 0 0 -48.031199 -78173.26 + 3 295.83795 0 0 -48.031331 -78177.714 +Loop time of 0.457491 on 2 procs for 3 steps with 2 atoms + +Performance: 0.567 ns/day, 42.360 hours/ns, 6.558 timesteps/s +50.1% CPU use with 2 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 1.3828e-05 | 2.9922e-05 | 4.6015e-05 | 0.0 | 0.01 +Output | 7.5817e-05 | 9.3937e-05 | 0.00011206 | 0.0 | 0.02 +Modify | 0.45735 | 0.45736 | 0.45736 | 0.0 | 99.97 +Other | | 1.204e-05 | | | 0.00 + +Nlocal: 1 ave 1 max 1 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 4 ave 4 max 4 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds not checked + +Total wall time: 0:01:21 diff --git a/examples/COUPLE/lammps_vasp/vasp_wrap.py b/examples/COUPLE/lammps_vasp/vasp_wrap.py new file mode 100644 index 0000000000000000000000000000000000000000..1e2c52aa46d6d20d52ec656c3ab8889fd75aec05 --- /dev/null +++ b/examples/COUPLE/lammps_vasp/vasp_wrap.py @@ -0,0 +1,300 @@ +#!/usr/bin/env python + +# ---------------------------------------------------------------------- +# LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator +# http://lammps.sandia.gov, Sandia National Laboratories +# Steve Plimpton, sjplimp@sandia.gov +# ---------------------------------------------------------------------- + +# Syntax: vasp_wrap.py file/zmq POSCARfile + +# wrapper on VASP to act as server program using CSlib +# receives message with list of coords from client +# creates VASP inputs +# invokes VASP to calculate self-consistent energy of that config +# reads VASP outputs +# sends message with energy, forces, pressure to client + +# NOTES: +# check to insure basic VASP input files are in place? +# could archive VASP input/output in special filenames or dirs? +# need to check that POTCAR file is consistent with atom ordering? +# could make syntax for launching VASP more flexible +# e.g. command-line arg for # of procs +# detect if VASP had an error and return ERROR field, e.g. non-convergence ?? + +from __future__ import print_function +import sys + +version = sys.version_info[0] +if version == 3: + sys.exit("The CSlib python wrapper does not yet support python 3") + +import subprocess +import xml.etree.ElementTree as ET +from cslib import CSlib + +# comment out 2nd line once 1st line is correct for your system + +vaspcmd = "srun -N 1 --ntasks-per-node=4 " + \ + "-n 4 /projects/vasp/2017-build/cts1/vasp5.4.4/vasp_tfermi/bin/vasp_std" +vaspcmd = "touch tmp" + +# enums matching FixClientMD class in LAMMPS + +SETUP,STEP = range(1,2+1) +DIM,PERIODICITY,ORIGIN,BOX,NATOMS,NTYPES,TYPES,COORDS,UNITS,CHARGE = range(1,10+1) +FORCES,ENERGY,VIRIAL,ERROR = range(1,4+1) + +# ------------------------------------- +# functions + +# error message and exit + +def error(txt): + print("ERROR:",txt) + sys.exit(1) + +# ------------------------------------- +# read initial VASP POSCAR file to setup problem +# return natoms,ntypes,box + +def vasp_setup(poscar): + + ps = open(poscar,'r').readlines() + + # box size + + words = ps[2].split() + xbox = float(words[0]) + words = ps[3].split() + ybox = float(words[1]) + words = ps[4].split() + zbox = float(words[2]) + box = [xbox,ybox,zbox] + + ntypes = 0 + natoms = 0 + words = ps[6].split() + for word in words: + if word == '#': break + ntypes += 1 + natoms += int(word) + + return natoms,ntypes,box + +# ------------------------------------- +# write a new POSCAR file for VASP + +def poscar_write(poscar,natoms,ntypes,types,coords,box): + + psold = open(poscar,'r').readlines() + psnew = open("POSCAR",'w') + + # header, including box size + + psnew.write(psold[0]) + psnew.write(psold[1]) + psnew.write("%g %g %g\n" % (box[0],box[1],box[2])) + psnew.write("%g %g %g\n" % (box[3],box[4],box[5])) + psnew.write("%g %g %g\n" % (box[6],box[7],box[8])) + psnew.write(psold[5]) + psnew.write(psold[6]) + + # per-atom coords + # grouped by types + + psnew.write("Cartesian\n") + + for itype in range(1,ntypes+1): + for i in range(natoms): + if types[i] != itype: continue + x = coords[3*i+0] + y = coords[3*i+1] + z = coords[3*i+2] + aline = " %g %g %g\n" % (x,y,z) + psnew.write(aline) + + psnew.close() + +# ------------------------------------- +# read a VASP output vasprun.xml file +# uses ElementTree module +# see https://docs.python.org/2/library/xml.etree.elementtree.html + +def vasprun_read(): + tree = ET.parse('vasprun.xml') + root = tree.getroot() + + #fp = open("vasprun.xml","r") + #root = ET.parse(fp) + + scsteps = root.findall('calculation/scstep') + energy = scsteps[-1].find('energy') + for child in energy: + if child.attrib["name"] == "e_0_energy": + eout = float(child.text) + + fout = [] + sout = [] + + varrays = root.findall('calculation/varray') + for varray in varrays: + if varray.attrib["name"] == "forces": + forces = varray.findall("v") + for line in forces: + fxyz = line.text.split() + fxyz = [float(value) for value in fxyz] + fout += fxyz + if varray.attrib["name"] == "stress": + tensor = varray.findall("v") + stensor = [] + for line in tensor: + sxyz = line.text.split() + sxyz = [float(value) for value in sxyz] + stensor.append(sxyz) + sxx = stensor[0][0] + syy = stensor[1][1] + szz = stensor[2][2] + # symmetrize off-diagonal components + sxy = 0.5 * (stensor[0][1] + stensor[1][0]) + sxz = 0.5 * (stensor[0][2] + stensor[2][0]) + syz = 0.5 * (stensor[1][2] + stensor[2][1]) + sout = [sxx,syy,szz,sxy,sxz,syz] + + #fp.close() + + return eout,fout,sout + +# ------------------------------------- +# main program + +# command-line args + +if len(sys.argv) != 3: + print("Syntax: python vasp_wrap.py file/zmq POSCARfile") + sys.exit(1) + +mode = sys.argv[1] +poscar_template = sys.argv[2] + +if mode == "file": cs = CSlib(1,mode,"tmp.couple",None) +elif mode == "zmq": cs = CSlib(1,mode,"*:5555",None) +else: + print("Syntax: python vasp_wrap.py file/zmq POSCARfile") + sys.exit(1) + +natoms,ntypes,box = vasp_setup(poscar_template) + +# initial message for MD protocol + +msgID,nfield,fieldID,fieldtype,fieldlen = cs.recv() +if msgID != 0: error("Bad initial client/server handshake") +protocol = cs.unpack_string(1) +if protocol != "md": error("Mismatch in client/server protocol") +cs.send(0,0) + +# endless server loop + +while 1: + + # recv message from client + # msgID = 0 = all-done message + + msgID,nfield,fieldID,fieldtype,fieldlen = cs.recv() + if msgID < 0: break + + # SETUP receive at beginning of each run + # required fields: DIM, PERIODICTY, ORIGIN, BOX, + # NATOMS, NTYPES, TYPES, COORDS + # optional fields: others in enum above, but VASP ignores them + + if msgID == SETUP: + + origin = [] + box = [] + natoms_recv = ntypes_recv = 0 + types = [] + coords = [] + + for field in fieldID: + if field == DIM: + dim = cs.unpack_int(DIM) + if dim != 3: error("VASP only performs 3d simulations") + elif field == PERIODICITY: + periodicity = cs.unpack(PERIODICITY,1) + if not periodicity[0] or not periodicity[1] or not periodicity[2]: + error("VASP wrapper only currently supports fully periodic systems") + elif field == ORIGIN: + origin = cs.unpack(ORIGIN,1) + elif field == BOX: + box = cs.unpack(BOX,1) + elif field == NATOMS: + natoms_recv = cs.unpack_int(NATOMS) + if natoms != natoms_recv: + error("VASP wrapper mis-match in number of atoms") + elif field == NTYPES: + ntypes_recv = cs.unpack_int(NTYPES) + if ntypes != ntypes_recv: + error("VASP wrapper mis-match in number of atom types") + elif field == TYPES: + types = cs.unpack(TYPES,1) + elif field == COORDS: + coords = cs.unpack(COORDS,1) + + if not origin or not box or not natoms or not ntypes or \ + not types or not coords: + error("Required VASP wrapper setup field not received"); + + # STEP receive at each timestep of run or minimization + # required fields: COORDS + # optional fields: ORIGIN, BOX + + elif msgID == STEP: + + coords = [] + + for field in fieldID: + if field == COORDS: + coords = cs.unpack(COORDS,1) + elif field == ORIGIN: + origin = cs.unpack(ORIGIN,1) + elif field == BOX: + box = cs.unpack(BOX,1) + + if not coords: error("Required VASP wrapper step field not received"); + + else: error("VASP wrapper received unrecognized message") + + # create POSCAR file + + poscar_write(poscar_template,natoms,ntypes,types,coords,box) + + # invoke VASP + + print("\nLaunching VASP ...") + print(vaspcmd) + subprocess.check_output(vaspcmd,stderr=subprocess.STDOUT,shell=True) + + # process VASP output + + energy,forces,virial = vasprun_read() + + # convert VASP kilobars to bars + + for i,value in enumerate(virial): virial[i] *= 1000.0 + + # return forces, energy, pressure to client + + cs.send(msgID,3); + cs.pack(FORCES,4,3*natoms,forces) + cs.pack_double(ENERGY,energy) + cs.pack(VIRIAL,4,6,virial) + +# final reply to client + +cs.send(0,0) + +# clean-up + +del cs diff --git a/examples/COUPLE/lammps_vasp/vasprun.xml b/examples/COUPLE/lammps_vasp/vasprun.xml new file mode 100644 index 0000000000000000000000000000000000000000..0f15c871b4136496c82e3a03700d33b8939492d5 --- /dev/null +++ b/examples/COUPLE/lammps_vasp/vasprun.xml @@ -0,0 +1,12329 @@ + + + + vasp + 5.4.4.18Apr17-6-g9f103f2a35 + (build Aug 01 2017 10:32:50) complex parallel + LinuxIFC + 2017 12 19 + 15:22:45 + + + 0 + normal normal or accurate (medium, h + 48 + F + 1 + 2 + 1 + 100 + -5 + 2 + -1 + 0 + 0.00000100 + 0.00100000 + 0 + 2 + 10 + 1 + 1 + 600.00000000 + 600.00000000 + 0.50000000 + 3500.00000000 + 3500.00000000 + -3.00000000 + 10.00000000 + -10.00000000 + 0.00000000 + 0 + 0.10000000 + 2 + 0.00000000 + T + T + F + F + F + -1 0 0 0 + 100 + -- GGA type + F + F + 0 + 1.00000000 + + + + + 3.66961100 0.00000000 0.00000000 + 0.00000000 3.55744000 0.00000000 + 0.00000000 0.00000000 3.17678100 + + 41.47103646 + + 0.27250845 0.00000000 0.00000000 + 0.00000000 0.28110102 0.00000000 + 0.00000000 0.00000000 0.31478405 + + + + 0.00000000 0.00000000 0.00000000 + 0.00000000 -0.50000000 -0.50000000 + -0.50000000 0.00000000 -0.50000000 + -0.50000000 -0.50000000 0.00000000 + + + + 1 + 2 + 3 + 4 + + + + 15 15 15 + 0.00000000 0.00000000 0.00000000 + 0.06666667 0.00000000 0.00000000 + 0.00000000 0.06666667 0.00000000 + 0.00000000 0.00000000 0.06666667 + 0.00000000 0.00000000 0.00000000 + + + 0.00000000 0.00000000 0.00000000 + 0.06666667 0.00000000 0.00000000 + 0.13333333 0.00000000 0.00000000 + 0.20000000 0.00000000 0.00000000 + 0.26666667 0.00000000 0.00000000 + 0.33333333 0.00000000 0.00000000 + 0.40000000 0.00000000 0.00000000 + 0.46666667 0.00000000 0.00000000 + 0.00000000 0.06666667 0.00000000 + 0.06666667 0.06666667 0.00000000 + 0.13333333 0.06666667 0.00000000 + 0.20000000 0.06666667 0.00000000 + 0.26666667 0.06666667 0.00000000 + 0.33333333 0.06666667 0.00000000 + 0.40000000 0.06666667 0.00000000 + 0.46666667 0.06666667 0.00000000 + 0.00000000 0.13333333 0.00000000 + 0.06666667 0.13333333 0.00000000 + 0.13333333 0.13333333 0.00000000 + 0.20000000 0.13333333 0.00000000 + 0.26666667 0.13333333 0.00000000 + 0.33333333 0.13333333 0.00000000 + 0.40000000 0.13333333 0.00000000 + 0.46666667 0.13333333 0.00000000 + 0.00000000 0.20000000 0.00000000 + 0.06666667 0.20000000 0.00000000 + 0.13333333 0.20000000 0.00000000 + 0.20000000 0.20000000 0.00000000 + 0.26666667 0.20000000 0.00000000 + 0.33333333 0.20000000 0.00000000 + 0.40000000 0.20000000 0.00000000 + 0.46666667 0.20000000 0.00000000 + 0.00000000 0.26666667 0.00000000 + 0.06666667 0.26666667 0.00000000 + 0.13333333 0.26666667 0.00000000 + 0.20000000 0.26666667 0.00000000 + 0.26666667 0.26666667 0.00000000 + 0.33333333 0.26666667 0.00000000 + 0.40000000 0.26666667 0.00000000 + 0.46666667 0.26666667 0.00000000 + 0.00000000 0.33333333 0.00000000 + 0.06666667 0.33333333 0.00000000 + 0.13333333 0.33333333 0.00000000 + 0.20000000 0.33333333 0.00000000 + 0.26666667 0.33333333 0.00000000 + 0.33333333 0.33333333 0.00000000 + 0.40000000 0.33333333 0.00000000 + 0.46666667 0.33333333 0.00000000 + 0.00000000 0.40000000 0.00000000 + 0.06666667 0.40000000 0.00000000 + 0.13333333 0.40000000 0.00000000 + 0.20000000 0.40000000 0.00000000 + 0.26666667 0.40000000 0.00000000 + 0.33333333 0.40000000 0.00000000 + 0.40000000 0.40000000 0.00000000 + 0.46666667 0.40000000 0.00000000 + 0.00000000 0.46666667 0.00000000 + 0.06666667 0.46666667 0.00000000 + 0.13333333 0.46666667 0.00000000 + 0.20000000 0.46666667 0.00000000 + 0.26666667 0.46666667 0.00000000 + 0.33333333 0.46666667 0.00000000 + 0.40000000 0.46666667 0.00000000 + 0.46666667 0.46666667 0.00000000 + 0.00000000 0.00000000 0.06666667 + 0.06666667 0.00000000 0.06666667 + 0.13333333 0.00000000 0.06666667 + 0.20000000 0.00000000 0.06666667 + 0.26666667 0.00000000 0.06666667 + 0.33333333 0.00000000 0.06666667 + 0.40000000 0.00000000 0.06666667 + 0.46666667 0.00000000 0.06666667 + 0.00000000 0.06666667 0.06666667 + 0.06666667 0.06666667 0.06666667 + 0.13333333 0.06666667 0.06666667 + 0.20000000 0.06666667 0.06666667 + 0.26666667 0.06666667 0.06666667 + 0.33333333 0.06666667 0.06666667 + 0.40000000 0.06666667 0.06666667 + 0.46666667 0.06666667 0.06666667 + 0.00000000 0.13333333 0.06666667 + 0.06666667 0.13333333 0.06666667 + 0.13333333 0.13333333 0.06666667 + 0.20000000 0.13333333 0.06666667 + 0.26666667 0.13333333 0.06666667 + 0.33333333 0.13333333 0.06666667 + 0.40000000 0.13333333 0.06666667 + 0.46666667 0.13333333 0.06666667 + 0.00000000 0.20000000 0.06666667 + 0.06666667 0.20000000 0.06666667 + 0.13333333 0.20000000 0.06666667 + 0.20000000 0.20000000 0.06666667 + 0.26666667 0.20000000 0.06666667 + 0.33333333 0.20000000 0.06666667 + 0.40000000 0.20000000 0.06666667 + 0.46666667 0.20000000 0.06666667 + 0.00000000 0.26666667 0.06666667 + 0.06666667 0.26666667 0.06666667 + 0.13333333 0.26666667 0.06666667 + 0.20000000 0.26666667 0.06666667 + 0.26666667 0.26666667 0.06666667 + 0.33333333 0.26666667 0.06666667 + 0.40000000 0.26666667 0.06666667 + 0.46666667 0.26666667 0.06666667 + 0.00000000 0.33333333 0.06666667 + 0.06666667 0.33333333 0.06666667 + 0.13333333 0.33333333 0.06666667 + 0.20000000 0.33333333 0.06666667 + 0.26666667 0.33333333 0.06666667 + 0.33333333 0.33333333 0.06666667 + 0.40000000 0.33333333 0.06666667 + 0.46666667 0.33333333 0.06666667 + 0.00000000 0.40000000 0.06666667 + 0.06666667 0.40000000 0.06666667 + 0.13333333 0.40000000 0.06666667 + 0.20000000 0.40000000 0.06666667 + 0.26666667 0.40000000 0.06666667 + 0.33333333 0.40000000 0.06666667 + 0.40000000 0.40000000 0.06666667 + 0.46666667 0.40000000 0.06666667 + 0.00000000 0.46666667 0.06666667 + 0.06666667 0.46666667 0.06666667 + 0.13333333 0.46666667 0.06666667 + 0.20000000 0.46666667 0.06666667 + 0.26666667 0.46666667 0.06666667 + 0.33333333 0.46666667 0.06666667 + 0.40000000 0.46666667 0.06666667 + 0.46666667 0.46666667 0.06666667 + 0.00000000 0.00000000 0.13333333 + 0.06666667 0.00000000 0.13333333 + 0.13333333 0.00000000 0.13333333 + 0.20000000 0.00000000 0.13333333 + 0.26666667 0.00000000 0.13333333 + 0.33333333 0.00000000 0.13333333 + 0.40000000 0.00000000 0.13333333 + 0.46666667 0.00000000 0.13333333 + 0.00000000 0.06666667 0.13333333 + 0.06666667 0.06666667 0.13333333 + 0.13333333 0.06666667 0.13333333 + 0.20000000 0.06666667 0.13333333 + 0.26666667 0.06666667 0.13333333 + 0.33333333 0.06666667 0.13333333 + 0.40000000 0.06666667 0.13333333 + 0.46666667 0.06666667 0.13333333 + 0.00000000 0.13333333 0.13333333 + 0.06666667 0.13333333 0.13333333 + 0.13333333 0.13333333 0.13333333 + 0.20000000 0.13333333 0.13333333 + 0.26666667 0.13333333 0.13333333 + 0.33333333 0.13333333 0.13333333 + 0.40000000 0.13333333 0.13333333 + 0.46666667 0.13333333 0.13333333 + 0.00000000 0.20000000 0.13333333 + 0.06666667 0.20000000 0.13333333 + 0.13333333 0.20000000 0.13333333 + 0.20000000 0.20000000 0.13333333 + 0.26666667 0.20000000 0.13333333 + 0.33333333 0.20000000 0.13333333 + 0.40000000 0.20000000 0.13333333 + 0.46666667 0.20000000 0.13333333 + 0.00000000 0.26666667 0.13333333 + 0.06666667 0.26666667 0.13333333 + 0.13333333 0.26666667 0.13333333 + 0.20000000 0.26666667 0.13333333 + 0.26666667 0.26666667 0.13333333 + 0.33333333 0.26666667 0.13333333 + 0.40000000 0.26666667 0.13333333 + 0.46666667 0.26666667 0.13333333 + 0.00000000 0.33333333 0.13333333 + 0.06666667 0.33333333 0.13333333 + 0.13333333 0.33333333 0.13333333 + 0.20000000 0.33333333 0.13333333 + 0.26666667 0.33333333 0.13333333 + 0.33333333 0.33333333 0.13333333 + 0.40000000 0.33333333 0.13333333 + 0.46666667 0.33333333 0.13333333 + 0.00000000 0.40000000 0.13333333 + 0.06666667 0.40000000 0.13333333 + 0.13333333 0.40000000 0.13333333 + 0.20000000 0.40000000 0.13333333 + 0.26666667 0.40000000 0.13333333 + 0.33333333 0.40000000 0.13333333 + 0.40000000 0.40000000 0.13333333 + 0.46666667 0.40000000 0.13333333 + 0.00000000 0.46666667 0.13333333 + 0.06666667 0.46666667 0.13333333 + 0.13333333 0.46666667 0.13333333 + 0.20000000 0.46666667 0.13333333 + 0.26666667 0.46666667 0.13333333 + 0.33333333 0.46666667 0.13333333 + 0.40000000 0.46666667 0.13333333 + 0.46666667 0.46666667 0.13333333 + 0.00000000 0.00000000 0.20000000 + 0.06666667 0.00000000 0.20000000 + 0.13333333 0.00000000 0.20000000 + 0.20000000 0.00000000 0.20000000 + 0.26666667 0.00000000 0.20000000 + 0.33333333 0.00000000 0.20000000 + 0.40000000 0.00000000 0.20000000 + 0.46666667 0.00000000 0.20000000 + 0.00000000 0.06666667 0.20000000 + 0.06666667 0.06666667 0.20000000 + 0.13333333 0.06666667 0.20000000 + 0.20000000 0.06666667 0.20000000 + 0.26666667 0.06666667 0.20000000 + 0.33333333 0.06666667 0.20000000 + 0.40000000 0.06666667 0.20000000 + 0.46666667 0.06666667 0.20000000 + 0.00000000 0.13333333 0.20000000 + 0.06666667 0.13333333 0.20000000 + 0.13333333 0.13333333 0.20000000 + 0.20000000 0.13333333 0.20000000 + 0.26666667 0.13333333 0.20000000 + 0.33333333 0.13333333 0.20000000 + 0.40000000 0.13333333 0.20000000 + 0.46666667 0.13333333 0.20000000 + 0.00000000 0.20000000 0.20000000 + 0.06666667 0.20000000 0.20000000 + 0.13333333 0.20000000 0.20000000 + 0.20000000 0.20000000 0.20000000 + 0.26666667 0.20000000 0.20000000 + 0.33333333 0.20000000 0.20000000 + 0.40000000 0.20000000 0.20000000 + 0.46666667 0.20000000 0.20000000 + 0.00000000 0.26666667 0.20000000 + 0.06666667 0.26666667 0.20000000 + 0.13333333 0.26666667 0.20000000 + 0.20000000 0.26666667 0.20000000 + 0.26666667 0.26666667 0.20000000 + 0.33333333 0.26666667 0.20000000 + 0.40000000 0.26666667 0.20000000 + 0.46666667 0.26666667 0.20000000 + 0.00000000 0.33333333 0.20000000 + 0.06666667 0.33333333 0.20000000 + 0.13333333 0.33333333 0.20000000 + 0.20000000 0.33333333 0.20000000 + 0.26666667 0.33333333 0.20000000 + 0.33333333 0.33333333 0.20000000 + 0.40000000 0.33333333 0.20000000 + 0.46666667 0.33333333 0.20000000 + 0.00000000 0.40000000 0.20000000 + 0.06666667 0.40000000 0.20000000 + 0.13333333 0.40000000 0.20000000 + 0.20000000 0.40000000 0.20000000 + 0.26666667 0.40000000 0.20000000 + 0.33333333 0.40000000 0.20000000 + 0.40000000 0.40000000 0.20000000 + 0.46666667 0.40000000 0.20000000 + 0.00000000 0.46666667 0.20000000 + 0.06666667 0.46666667 0.20000000 + 0.13333333 0.46666667 0.20000000 + 0.20000000 0.46666667 0.20000000 + 0.26666667 0.46666667 0.20000000 + 0.33333333 0.46666667 0.20000000 + 0.40000000 0.46666667 0.20000000 + 0.46666667 0.46666667 0.20000000 + 0.00000000 0.00000000 0.26666667 + 0.06666667 0.00000000 0.26666667 + 0.13333333 0.00000000 0.26666667 + 0.20000000 0.00000000 0.26666667 + 0.26666667 0.00000000 0.26666667 + 0.33333333 0.00000000 0.26666667 + 0.40000000 0.00000000 0.26666667 + 0.46666667 0.00000000 0.26666667 + 0.00000000 0.06666667 0.26666667 + 0.06666667 0.06666667 0.26666667 + 0.13333333 0.06666667 0.26666667 + 0.20000000 0.06666667 0.26666667 + 0.26666667 0.06666667 0.26666667 + 0.33333333 0.06666667 0.26666667 + 0.40000000 0.06666667 0.26666667 + 0.46666667 0.06666667 0.26666667 + 0.00000000 0.13333333 0.26666667 + 0.06666667 0.13333333 0.26666667 + 0.13333333 0.13333333 0.26666667 + 0.20000000 0.13333333 0.26666667 + 0.26666667 0.13333333 0.26666667 + 0.33333333 0.13333333 0.26666667 + 0.40000000 0.13333333 0.26666667 + 0.46666667 0.13333333 0.26666667 + 0.00000000 0.20000000 0.26666667 + 0.06666667 0.20000000 0.26666667 + 0.13333333 0.20000000 0.26666667 + 0.20000000 0.20000000 0.26666667 + 0.26666667 0.20000000 0.26666667 + 0.33333333 0.20000000 0.26666667 + 0.40000000 0.20000000 0.26666667 + 0.46666667 0.20000000 0.26666667 + 0.00000000 0.26666667 0.26666667 + 0.06666667 0.26666667 0.26666667 + 0.13333333 0.26666667 0.26666667 + 0.20000000 0.26666667 0.26666667 + 0.26666667 0.26666667 0.26666667 + 0.33333333 0.26666667 0.26666667 + 0.40000000 0.26666667 0.26666667 + 0.46666667 0.26666667 0.26666667 + 0.00000000 0.33333333 0.26666667 + 0.06666667 0.33333333 0.26666667 + 0.13333333 0.33333333 0.26666667 + 0.20000000 0.33333333 0.26666667 + 0.26666667 0.33333333 0.26666667 + 0.33333333 0.33333333 0.26666667 + 0.40000000 0.33333333 0.26666667 + 0.46666667 0.33333333 0.26666667 + 0.00000000 0.40000000 0.26666667 + 0.06666667 0.40000000 0.26666667 + 0.13333333 0.40000000 0.26666667 + 0.20000000 0.40000000 0.26666667 + 0.26666667 0.40000000 0.26666667 + 0.33333333 0.40000000 0.26666667 + 0.40000000 0.40000000 0.26666667 + 0.46666667 0.40000000 0.26666667 + 0.00000000 0.46666667 0.26666667 + 0.06666667 0.46666667 0.26666667 + 0.13333333 0.46666667 0.26666667 + 0.20000000 0.46666667 0.26666667 + 0.26666667 0.46666667 0.26666667 + 0.33333333 0.46666667 0.26666667 + 0.40000000 0.46666667 0.26666667 + 0.46666667 0.46666667 0.26666667 + 0.00000000 0.00000000 0.33333333 + 0.06666667 0.00000000 0.33333333 + 0.13333333 0.00000000 0.33333333 + 0.20000000 0.00000000 0.33333333 + 0.26666667 0.00000000 0.33333333 + 0.33333333 0.00000000 0.33333333 + 0.40000000 0.00000000 0.33333333 + 0.46666667 0.00000000 0.33333333 + 0.00000000 0.06666667 0.33333333 + 0.06666667 0.06666667 0.33333333 + 0.13333333 0.06666667 0.33333333 + 0.20000000 0.06666667 0.33333333 + 0.26666667 0.06666667 0.33333333 + 0.33333333 0.06666667 0.33333333 + 0.40000000 0.06666667 0.33333333 + 0.46666667 0.06666667 0.33333333 + 0.00000000 0.13333333 0.33333333 + 0.06666667 0.13333333 0.33333333 + 0.13333333 0.13333333 0.33333333 + 0.20000000 0.13333333 0.33333333 + 0.26666667 0.13333333 0.33333333 + 0.33333333 0.13333333 0.33333333 + 0.40000000 0.13333333 0.33333333 + 0.46666667 0.13333333 0.33333333 + 0.00000000 0.20000000 0.33333333 + 0.06666667 0.20000000 0.33333333 + 0.13333333 0.20000000 0.33333333 + 0.20000000 0.20000000 0.33333333 + 0.26666667 0.20000000 0.33333333 + 0.33333333 0.20000000 0.33333333 + 0.40000000 0.20000000 0.33333333 + 0.46666667 0.20000000 0.33333333 + 0.00000000 0.26666667 0.33333333 + 0.06666667 0.26666667 0.33333333 + 0.13333333 0.26666667 0.33333333 + 0.20000000 0.26666667 0.33333333 + 0.26666667 0.26666667 0.33333333 + 0.33333333 0.26666667 0.33333333 + 0.40000000 0.26666667 0.33333333 + 0.46666667 0.26666667 0.33333333 + 0.00000000 0.33333333 0.33333333 + 0.06666667 0.33333333 0.33333333 + 0.13333333 0.33333333 0.33333333 + 0.20000000 0.33333333 0.33333333 + 0.26666667 0.33333333 0.33333333 + 0.33333333 0.33333333 0.33333333 + 0.40000000 0.33333333 0.33333333 + 0.46666667 0.33333333 0.33333333 + 0.00000000 0.40000000 0.33333333 + 0.06666667 0.40000000 0.33333333 + 0.13333333 0.40000000 0.33333333 + 0.20000000 0.40000000 0.33333333 + 0.26666667 0.40000000 0.33333333 + 0.33333333 0.40000000 0.33333333 + 0.40000000 0.40000000 0.33333333 + 0.46666667 0.40000000 0.33333333 + 0.00000000 0.46666667 0.33333333 + 0.06666667 0.46666667 0.33333333 + 0.13333333 0.46666667 0.33333333 + 0.20000000 0.46666667 0.33333333 + 0.26666667 0.46666667 0.33333333 + 0.33333333 0.46666667 0.33333333 + 0.40000000 0.46666667 0.33333333 + 0.46666667 0.46666667 0.33333333 + 0.00000000 0.00000000 0.40000000 + 0.06666667 0.00000000 0.40000000 + 0.13333333 0.00000000 0.40000000 + 0.20000000 0.00000000 0.40000000 + 0.26666667 0.00000000 0.40000000 + 0.33333333 0.00000000 0.40000000 + 0.40000000 0.00000000 0.40000000 + 0.46666667 0.00000000 0.40000000 + 0.00000000 0.06666667 0.40000000 + 0.06666667 0.06666667 0.40000000 + 0.13333333 0.06666667 0.40000000 + 0.20000000 0.06666667 0.40000000 + 0.26666667 0.06666667 0.40000000 + 0.33333333 0.06666667 0.40000000 + 0.40000000 0.06666667 0.40000000 + 0.46666667 0.06666667 0.40000000 + 0.00000000 0.13333333 0.40000000 + 0.06666667 0.13333333 0.40000000 + 0.13333333 0.13333333 0.40000000 + 0.20000000 0.13333333 0.40000000 + 0.26666667 0.13333333 0.40000000 + 0.33333333 0.13333333 0.40000000 + 0.40000000 0.13333333 0.40000000 + 0.46666667 0.13333333 0.40000000 + 0.00000000 0.20000000 0.40000000 + 0.06666667 0.20000000 0.40000000 + 0.13333333 0.20000000 0.40000000 + 0.20000000 0.20000000 0.40000000 + 0.26666667 0.20000000 0.40000000 + 0.33333333 0.20000000 0.40000000 + 0.40000000 0.20000000 0.40000000 + 0.46666667 0.20000000 0.40000000 + 0.00000000 0.26666667 0.40000000 + 0.06666667 0.26666667 0.40000000 + 0.13333333 0.26666667 0.40000000 + 0.20000000 0.26666667 0.40000000 + 0.26666667 0.26666667 0.40000000 + 0.33333333 0.26666667 0.40000000 + 0.40000000 0.26666667 0.40000000 + 0.46666667 0.26666667 0.40000000 + 0.00000000 0.33333333 0.40000000 + 0.06666667 0.33333333 0.40000000 + 0.13333333 0.33333333 0.40000000 + 0.20000000 0.33333333 0.40000000 + 0.26666667 0.33333333 0.40000000 + 0.33333333 0.33333333 0.40000000 + 0.40000000 0.33333333 0.40000000 + 0.46666667 0.33333333 0.40000000 + 0.00000000 0.40000000 0.40000000 + 0.06666667 0.40000000 0.40000000 + 0.13333333 0.40000000 0.40000000 + 0.20000000 0.40000000 0.40000000 + 0.26666667 0.40000000 0.40000000 + 0.33333333 0.40000000 0.40000000 + 0.40000000 0.40000000 0.40000000 + 0.46666667 0.40000000 0.40000000 + 0.00000000 0.46666667 0.40000000 + 0.06666667 0.46666667 0.40000000 + 0.13333333 0.46666667 0.40000000 + 0.20000000 0.46666667 0.40000000 + 0.26666667 0.46666667 0.40000000 + 0.33333333 0.46666667 0.40000000 + 0.40000000 0.46666667 0.40000000 + 0.46666667 0.46666667 0.40000000 + 0.00000000 0.00000000 0.46666667 + 0.06666667 0.00000000 0.46666667 + 0.13333333 0.00000000 0.46666667 + 0.20000000 0.00000000 0.46666667 + 0.26666667 0.00000000 0.46666667 + 0.33333333 0.00000000 0.46666667 + 0.40000000 0.00000000 0.46666667 + 0.46666667 0.00000000 0.46666667 + 0.00000000 0.06666667 0.46666667 + 0.06666667 0.06666667 0.46666667 + 0.13333333 0.06666667 0.46666667 + 0.20000000 0.06666667 0.46666667 + 0.26666667 0.06666667 0.46666667 + 0.33333333 0.06666667 0.46666667 + 0.40000000 0.06666667 0.46666667 + 0.46666667 0.06666667 0.46666667 + 0.00000000 0.13333333 0.46666667 + 0.06666667 0.13333333 0.46666667 + 0.13333333 0.13333333 0.46666667 + 0.20000000 0.13333333 0.46666667 + 0.26666667 0.13333333 0.46666667 + 0.33333333 0.13333333 0.46666667 + 0.40000000 0.13333333 0.46666667 + 0.46666667 0.13333333 0.46666667 + 0.00000000 0.20000000 0.46666667 + 0.06666667 0.20000000 0.46666667 + 0.13333333 0.20000000 0.46666667 + 0.20000000 0.20000000 0.46666667 + 0.26666667 0.20000000 0.46666667 + 0.33333333 0.20000000 0.46666667 + 0.40000000 0.20000000 0.46666667 + 0.46666667 0.20000000 0.46666667 + 0.00000000 0.26666667 0.46666667 + 0.06666667 0.26666667 0.46666667 + 0.13333333 0.26666667 0.46666667 + 0.20000000 0.26666667 0.46666667 + 0.26666667 0.26666667 0.46666667 + 0.33333333 0.26666667 0.46666667 + 0.40000000 0.26666667 0.46666667 + 0.46666667 0.26666667 0.46666667 + 0.00000000 0.33333333 0.46666667 + 0.06666667 0.33333333 0.46666667 + 0.13333333 0.33333333 0.46666667 + 0.20000000 0.33333333 0.46666667 + 0.26666667 0.33333333 0.46666667 + 0.33333333 0.33333333 0.46666667 + 0.40000000 0.33333333 0.46666667 + 0.46666667 0.33333333 0.46666667 + 0.00000000 0.40000000 0.46666667 + 0.06666667 0.40000000 0.46666667 + 0.13333333 0.40000000 0.46666667 + 0.20000000 0.40000000 0.46666667 + 0.26666667 0.40000000 0.46666667 + 0.33333333 0.40000000 0.46666667 + 0.40000000 0.40000000 0.46666667 + 0.46666667 0.40000000 0.46666667 + 0.00000000 0.46666667 0.46666667 + 0.06666667 0.46666667 0.46666667 + 0.13333333 0.46666667 0.46666667 + 0.20000000 0.46666667 0.46666667 + 0.26666667 0.46666667 0.46666667 + 0.33333333 0.46666667 0.46666667 + 0.40000000 0.46666667 0.46666667 + 0.46666667 0.46666667 0.46666667 + + + 0.00029630 + 0.00059259 + 0.00059259 + 0.00059259 + 0.00059259 + 0.00059259 + 0.00059259 + 0.00059259 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00059259 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00118519 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + 0.00237037 + + + + + unknown system + F + + + normal + 600.00000000 + 1293.44900000 + 0.00000100 + 48 + 10 + 18 + 26.00000000 + 0 + 0 + 0 + 0 + 0.00000000 + + 0 + 0.10000000 + 0.50000000 + T + + + F + 0.00000000 0.00000000 + -100 + 2 + F + + + 0 + 2 + 1 + + + 1 + F + 1.00000000 1.00000000 1.00000000 1.00000000 + -1.00000000 + F + 0.00000000 0.00000000 1.00000000 + F + 0.00000000 0.00000000 0.00000000 + F + + + F + F + + + 100 + -5 + 2 + 600.00000000 + + T + F + 0.00000000 + 0.00000001 + 0.30000000 + 4 + 0.40000000 + + + + 0.40000000 + 1.00000000 + 0.10000000 + 1.60000000 + 1.00000000 + + 4 + F + -45 + 100.00000000 + 1 + 1 + 5 + + + + F + F + 0 + 1.00000000 + -100.00000000 -100.00000000 -100.00000000 + 0.00000000 + + + + 24 + 24 + 20 + 48 + 48 + 40 + F + + + 0 + -1 + 0 + 2 + 0.00000000 + 0.00100000 + 0 + 0.50000000 + -3.00000000 + 1.00000000 + + + 3500.00000000 + 3500.00000000 + 1 + 1 + 256 + 16.00000000 + + + 2 + 0.00001000 + + + 0 + -1.00000000 -1.00000000 + 301 + 10.00000000 + -10.00000000 + 0.00000000 + + + 2 + T + F + T + F + F + F + F + F + 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 + + + 9 + 4 + -1 + T + T + F + F + F + F + + + 3 + 0 + F + 183.85000000 9.01300000 + 0.00000000 0.00000000 + 1.00000000 1.00000000 + T + + T + F + 0 + F + 0 + + -- + 0 + F + + F + F + F + F + F + -1.00000000 + 0 + 0 + 0.00000000 + 0.00000000 + 0.00000000 + 1.00000000 + 1.00000000 + 1.00000000 + 1.00000000 + 1 + 1 + 1 + F + F + F + 0 + 0 + F + 0.00000000 + 0.00000000 + 0 + + + F + -0.84910000 + 0.12340000 + 1.00000000 + 0.00000000 + + + 0 + 6.22065547 + 1.00000000 + + + F + F + F + F + 0 + 0.10000000 + -1.00000000 + 0.00200000 + -0.10000000 + 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 + + + F + 0.00000000 0.00000000 0.00000000 + T + F + F + F + T + 0 + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.00000000 0.00000000 + + + F + F + F + T + 0 + -1 0 0 0 + F + F + F + F + F + 2 + F + F + F + -2.00000000 + -2.00000000 + -1.00000000 + -1 + 0.00000000 + 0 + 0 + -1 + -1 + -1 + 100 + 1 + 3 + 0 + -30.00000000 + -30.00000000 + -200.00000000 + 140 + -0.10000000 + F + F + F + F + F + F + F + 1 + 1 + 1 + 2800 + 0 + 1 + -1 + 1.00000000 + + + 0.00000000 + 0.00000000 0.00000000 0.00000000 + 0.00000000 + 0.00000000 + 0.00000000 + + + + 4 + 2 + + ion + element + atomtype + + W 1 + Be 2 + Be 2 + Be 2 + + + + type + atomspertype + element + mass + valence + pseudopotential + + 1W 183.85000000 14.00000000 PAW_PBE W_sv_GW 23Mar2010 + 3Be 9.01300000 4.00000000 PAW_PBE Be_sv_GW 31Mar2010 + + + + + + + 3.66961100 0.00000000 0.00000000 + 0.00000000 3.55744000 0.00000000 + 0.00000000 0.00000000 3.17678100 + + 41.47103646 + + 0.27250845 0.00000000 0.00000000 + 0.00000000 0.28110102 0.00000000 + 0.00000000 0.00000000 0.31478405 + + + + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.50000000 0.50000000 + 0.50000000 0.00000000 0.50000000 + 0.50000000 0.50000000 0.00000000 + + + + + + + + + + 131.43308500 + -1959.85115532 + -527.41646070 + 35.33916255 + 1941.62980019 + -1939.43826086 + -0.00530052 + -1293.52360327 + 3036.59145287 + -575.24128006 + -575.23597954 + -575.23862980 + + + + + + + + + 102.38566418 + 102.39047960 + 102.38807189 + + + + + + + + + -28.97782713 + -28.97098459 + -28.97440586 + + + + + + + + + -49.69418359 + -49.68840810 + -49.69129585 + + + + + + + + + -51.91588940 + -51.91302415 + -51.91445678 + + + + + + + + + -48.35881744 + -48.35566410 + -48.35724077 + + + + + + + + + -48.54575148 + -48.54295784 + -48.54435466 + + + + + + + + + -48.07609882 + -48.07342458 + -48.07476170 + + + + + + + + + -48.12313644 + -48.12026988 + -48.12170316 + + + + + + + + + -48.09347519 + -48.09050147 + -48.09198833 + + + + + + + + + -48.07191482 + -48.06891772 + -48.07041627 + + + + + + + + + -48.07102791 + -48.06801376 + -48.06952083 + + + + + + + + + -48.07113736 + -48.06809293 + -48.06961515 + + + + + + + + + -48.07118539 + -48.06814100 + -48.06966319 + + + + + + + + + -48.07110546 + -48.06805494 + -48.06958020 + + + + + + + + + -48.07109869 + -48.06804980 + -48.06957425 + + + + + + + + + -48.07109883 + -48.06804872 + -48.06957377 + + + + + + + + + -48.07109628 + -48.06804655 + -48.06957141 + + + + + + + + + 131.43308500 + -1959.85115532 + -480.61520692 + 33.47431066 + 3204.45646866 + -3203.57677692 + -0.00304986 + -809.98022412 + 3036.59145287 + -48.07109596 + -48.06804610 + -48.06957103 + + + + + + 3.66961100 0.00000000 0.00000000 + 0.00000000 3.55744000 0.00000000 + 0.00000000 0.00000000 3.17678100 + + 41.47103646 + + 0.27250845 0.00000000 0.00000000 + 0.00000000 0.28110102 0.00000000 + 0.00000000 0.00000000 0.31478405 + + + + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.50000000 0.50000000 + 0.50000000 0.00000000 0.50000000 + 0.50000000 0.50000000 0.00000000 + + + + 0.1 -0.2 -0.3 + 0.4 -0.5 -0.6 + + + -214.84833704 0.00000000 0.00000000 + 0.00000000 -123.75352996 0.00000000 + 0.00000000 -0.00000000 100.18545515 + + + -48.07109596 + -48.06957103 + -0.00304986 + + + + + band + kpoint + spin + eigene + occ + + + + -91.8804 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7478 1.0000 + -30.0216 1.0000 + -29.9884 1.0000 + -29.8113 1.0000 + -2.0041 1.0000 + 4.4237 1.0000 + 4.8277 1.0000 + 6.4981 1.0000 + 6.9617 1.0000 + 8.1586 0.0000 + 8.8821 0.0000 + 8.9648 0.0000 + 9.0855 0.0000 + 13.1593 0.0000 + 14.6689 0.0000 + + + -91.8808 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7478 1.0000 + -30.0237 1.0000 + -29.9882 1.0000 + -29.8111 1.0000 + -1.9535 1.0000 + 4.3336 1.0000 + 4.8001 1.0000 + 6.5232 1.0000 + 6.7555 1.0000 + 8.3862 0.0000 + 8.4025 0.0000 + 8.9705 0.0000 + 9.5855 0.0000 + 13.3605 0.0000 + 14.6572 0.0000 + + + -91.8814 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7477 1.0000 + -30.0297 1.0000 + -29.9877 1.0000 + -29.8105 1.0000 + -1.8058 1.0000 + 4.0326 1.0000 + 4.7589 1.0000 + 6.3613 1.0000 + 6.6323 1.0000 + 7.8755 0.5410 + 8.8446 0.0000 + 8.9868 0.0000 + 10.1754 0.0000 + 14.0117 0.0000 + 14.7252 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7475 1.0000 + -30.0383 1.0000 + -29.9868 1.0000 + -29.8096 1.0000 + -1.5620 1.0000 + 3.5407 1.0000 + 4.7314 1.0000 + 5.9618 1.0000 + 6.8672 1.0000 + 7.4063 1.0000 + 9.0110 0.0000 + 9.3490 0.0000 + 10.7563 0.0000 + 14.0913 0.0000 + 15.1642 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7473 1.0000 + -30.0481 1.0000 + -29.9858 1.0000 + -29.8086 1.0000 + -1.2340 1.0000 + 2.9354 1.0000 + 4.7102 1.0000 + 5.6128 1.0000 + 7.0130 1.0000 + 7.2261 1.0000 + 9.0390 0.0000 + 9.8394 0.0000 + 11.3191 0.0000 + 14.0352 0.0000 + 15.4144 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7471 1.0000 + -30.0576 1.0000 + -29.9848 1.0000 + -29.8076 1.0000 + -0.8326 1.0000 + 2.2914 1.0000 + 4.6917 1.0000 + 5.3376 1.0000 + 6.7081 1.0000 + 7.6717 0.9986 + 9.0662 0.0000 + 10.2804 0.0000 + 11.8535 0.0000 + 13.4527 0.0000 + 14.9300 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7470 1.0000 + -30.0651 1.0000 + -29.9841 1.0000 + -29.8068 1.0000 + -0.3829 1.0000 + 1.6674 1.0000 + 4.6772 1.0000 + 5.1483 1.0000 + 6.5003 1.0000 + 8.1260 0.0003 + 9.0876 0.0000 + 10.6305 0.0000 + 12.3305 0.0000 + 12.9072 0.0000 + 15.1709 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7470 1.0000 + -30.0692 1.0000 + -29.9837 1.0000 + -29.8064 1.0000 + 0.0259 1.0000 + 1.1640 1.0000 + 4.6691 1.0000 + 5.0521 1.0000 + 6.3951 1.0000 + 8.4419 0.0000 + 9.0994 0.0000 + 10.8329 0.0000 + 12.5866 0.0000 + 12.7497 0.0000 + 15.0542 0.0000 + + + -91.8808 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7478 1.0000 + -30.0213 1.0000 + -29.9915 1.0000 + -29.8110 1.0000 + -1.9529 1.0000 + 4.3901 1.0000 + 4.7755 1.0000 + 6.3415 1.0000 + 6.9388 1.0000 + 8.3265 0.0000 + 8.4311 0.0000 + 8.8898 0.0000 + 9.6264 0.0000 + 13.5937 0.0000 + 14.7192 0.0000 + + + -91.8807 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7477 1.0000 + -30.0234 1.0000 + -29.9912 1.0000 + -29.8108 1.0000 + -1.9023 1.0000 + 4.3246 1.0000 + 4.7293 1.0000 + 6.2087 1.0000 + 6.9819 1.0000 + 8.2546 0.0000 + 8.4565 0.0000 + 8.8007 0.0000 + 9.9214 0.0000 + 13.6485 0.0000 + 14.6504 0.0000 + + + -91.8811 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7476 1.0000 + -30.0294 1.0000 + -29.9906 1.0000 + -29.8102 1.0000 + -1.7528 1.0000 + 4.0516 1.0000 + 4.6663 1.0000 + 5.9785 1.0000 + 7.0276 1.0000 + 7.8427 0.7144 + 8.7719 0.0000 + 8.8056 0.0000 + 10.4508 0.0000 + 14.3989 0.0000 + 15.1127 0.0000 + + + -91.8807 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7474 1.0000 + -30.0379 1.0000 + -29.9898 1.0000 + -29.8093 1.0000 + -1.5097 1.0000 + 3.5587 1.0000 + 4.6450 1.0000 + 5.7408 1.0000 + 7.1387 1.0000 + 7.4085 1.0000 + 8.7921 0.0000 + 9.2640 0.0000 + 11.0130 0.0000 + 14.0760 0.0000 + 15.2142 0.0000 + + + -91.8804 1.0000 + -91.4252 1.0000 + -91.2903 1.0000 + -65.7472 1.0000 + -30.0478 1.0000 + -29.9888 1.0000 + -29.8083 1.0000 + -1.1815 1.0000 + 2.9494 1.0000 + 4.6412 1.0000 + 5.4944 1.0000 + 7.0285 1.0000 + 7.3926 1.0000 + 8.8271 0.0000 + 9.7408 0.0000 + 11.5692 0.0000 + 13.8620 0.0000 + 14.8771 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7471 1.0000 + -30.0573 1.0000 + -29.9878 1.0000 + -29.8073 1.0000 + -0.7815 1.0000 + 2.3062 1.0000 + 4.6436 1.0000 + 5.2669 1.0000 + 6.7293 1.0000 + 7.7653 0.9516 + 8.8638 0.0000 + 10.1806 0.0000 + 12.1051 0.0000 + 13.3952 0.0000 + 14.8765 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7470 1.0000 + -30.0648 1.0000 + -29.9871 1.0000 + -29.8065 1.0000 + -0.3310 1.0000 + 1.6815 1.0000 + 4.6514 1.0000 + 5.0908 1.0000 + 6.5240 1.0000 + 8.1695 0.0000 + 8.8934 0.0000 + 10.5364 0.0000 + 12.5997 0.0000 + 12.8998 0.0000 + 15.5154 0.0000 + + + -91.8813 1.0000 + -91.4263 1.0000 + -91.2913 1.0000 + -65.7469 1.0000 + -30.0689 1.0000 + -29.9867 1.0000 + -29.8062 1.0000 + 0.0847 1.0000 + 1.1741 1.0000 + 4.6613 1.0000 + 4.9916 1.0000 + 6.4197 1.0000 + 8.4555 0.0000 + 8.9099 0.0000 + 10.7473 0.0000 + 12.4480 0.0000 + 12.9600 0.0000 + 14.8774 0.0000 + + + -91.8810 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7476 1.0000 + -30.0204 1.0000 + -29.9998 1.0000 + -29.8102 1.0000 + -1.7946 1.0000 + 4.2094 1.0000 + 4.6772 1.0000 + 5.9995 1.0000 + 6.9517 1.0000 + 7.8739 0.5498 + 8.7041 0.0000 + 8.9110 0.0000 + 10.2112 0.0000 + 14.2659 0.0000 + 14.8795 0.0000 + + + -91.8814 1.0000 + -91.4263 1.0000 + -91.2912 1.0000 + -65.7476 1.0000 + -30.0226 1.0000 + -29.9996 1.0000 + -29.8099 1.0000 + -1.7450 1.0000 + 4.2129 1.0000 + 4.5661 1.0000 + 5.8355 1.0000 + 7.1501 1.0000 + 7.8382 0.7357 + 8.7026 0.0000 + 8.7336 0.0000 + 10.4623 0.0000 + 13.8631 0.0000 + 14.8598 0.0000 + + + -91.8810 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7475 1.0000 + -30.0285 1.0000 + -29.9991 1.0000 + -29.8093 1.0000 + -1.5968 1.0000 + 4.0989 1.0000 + 4.3522 1.0000 + 5.6129 1.0000 + 7.4328 1.0000 + 7.6870 0.9972 + 8.4839 0.0000 + 8.7940 0.0000 + 10.9754 0.0000 + 14.1029 0.0000 + 15.2039 0.0000 + + + -91.8810 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7473 1.0000 + -30.0371 1.0000 + -29.9982 1.0000 + -29.8084 1.0000 + -1.3533 1.0000 + 3.5980 1.0000 + 4.3620 1.0000 + 5.4512 1.0000 + 7.3952 1.0000 + 7.5979 1.0000 + 8.3845 0.0000 + 9.0910 0.0000 + 11.5502 0.0000 + 14.7238 0.0000 + 15.9954 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7471 1.0000 + -30.0470 1.0000 + -29.9972 1.0000 + -29.8074 1.0000 + -1.0273 1.0000 + 2.9802 1.0000 + 4.4181 1.0000 + 5.2968 1.0000 + 7.0683 1.0000 + 7.7534 0.9663 + 8.3858 0.0000 + 9.5100 0.0000 + 12.1157 0.0000 + 13.7017 0.0000 + 16.0755 0.0000 + + + -91.8811 1.0000 + -91.4260 1.0000 + -91.2911 1.0000 + -65.7470 1.0000 + -30.0566 1.0000 + -29.9963 1.0000 + -29.8065 1.0000 + -0.6301 1.0000 + 2.3392 1.0000 + 4.4826 1.0000 + 5.1281 1.0000 + 6.7895 1.0000 + 7.9927 0.0600 + 8.4203 0.0000 + 9.9342 0.0000 + 12.6686 0.0000 + 14.6904 0.0000 + 16.3415 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7468 1.0000 + -30.0640 1.0000 + -29.9955 1.0000 + -29.8057 1.0000 + -0.1783 1.0000 + 1.7219 1.0000 + 4.5543 1.0000 + 4.9634 1.0000 + 6.5924 1.0000 + 8.2811 0.0000 + 8.4564 0.0000 + 10.2930 0.0000 + 12.6655 0.0000 + 13.2024 0.0000 + 15.4432 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7467 1.0000 + -30.0681 1.0000 + -29.9951 1.0000 + -29.8053 1.0000 + 0.2566 1.0000 + 1.2033 1.0000 + 4.6272 1.0000 + 4.8360 1.0000 + 6.4912 1.0000 + 8.4783 0.0000 + 8.4935 0.0000 + 10.5194 0.0000 + 12.2814 0.0000 + 13.6544 0.0000 + 14.8524 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7473 1.0000 + -30.0191 1.0000 + -30.0121 1.0000 + -29.8089 1.0000 + -1.5376 1.0000 + 3.7788 1.0000 + 4.6305 1.0000 + 5.6232 1.0000 + 7.1210 1.0000 + 7.3732 1.0000 + 8.9428 0.0000 + 9.1443 0.0000 + 10.7771 0.0000 + 14.0933 0.0000 + 15.6423 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7473 1.0000 + -30.0213 1.0000 + -30.0119 1.0000 + -29.8086 1.0000 + -1.4880 1.0000 + 3.7961 1.0000 + 4.5072 1.0000 + 5.5227 1.0000 + 7.3126 1.0000 + 7.3745 1.0000 + 8.7532 0.0000 + 9.0824 0.0000 + 11.0146 0.0000 + 13.9004 0.0000 + 15.4021 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7472 1.0000 + -30.0271 1.0000 + -30.0113 1.0000 + -29.8080 1.0000 + -1.3394 1.0000 + 3.8230 1.0000 + 4.1696 1.0000 + 5.3756 1.0000 + 7.3639 1.0000 + 7.6935 0.9963 + 8.3844 0.0000 + 8.9738 0.0000 + 11.5333 0.0000 + 14.0395 0.0000 + 15.4431 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7470 1.0000 + -30.0358 1.0000 + -30.0105 1.0000 + -29.8072 1.0000 + -1.1004 1.0000 + 3.5412 1.0000 + 4.0159 1.0000 + 5.2627 1.0000 + 7.2896 1.0000 + 7.9988 0.0504 + 8.0788 0.0028 + 9.0073 0.0000 + 12.1244 0.0000 + 13.7520 0.0000 + 16.7152 0.0000 + + + -91.8807 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7468 1.0000 + -30.0459 1.0000 + -30.0096 1.0000 + -29.8061 1.0000 + -0.7790 1.0000 + 2.9721 1.0000 + 4.1076 1.0000 + 5.1462 1.0000 + 7.1030 1.0000 + 7.9500 0.1708 + 8.1422 0.0001 + 9.2822 0.0000 + 12.7110 0.0000 + 13.3886 0.0000 + 15.6710 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7467 1.0000 + -30.0554 1.0000 + -30.0087 1.0000 + -29.8053 1.0000 + -0.3863 1.0000 + 2.3710 1.0000 + 4.2299 1.0000 + 5.0035 1.0000 + 6.8764 1.0000 + 7.9435 0.1954 + 8.2650 0.0000 + 9.6513 0.0000 + 12.8907 0.0000 + 13.2663 0.0000 + 15.5200 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7465 1.0000 + -30.0629 1.0000 + -30.0079 1.0000 + -29.8045 1.0000 + 0.0623 1.0000 + 1.7821 1.0000 + 4.3653 1.0000 + 4.8399 1.0000 + 6.6971 1.0000 + 7.9722 0.1031 + 8.4241 0.0000 + 9.9878 0.0000 + 12.3795 0.0000 + 13.7744 0.0000 + 15.4918 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7464 1.0000 + -30.0669 1.0000 + -30.0075 1.0000 + -29.8040 1.0000 + 0.5200 1.0000 + 1.2543 1.0000 + 4.5122 1.0000 + 4.6723 1.0000 + 6.6015 1.0000 + 7.9946 0.0570 + 8.5494 0.0000 + 10.2089 0.0000 + 12.0275 0.0000 + 14.4133 0.0000 + 15.6167 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2908 1.0000 + -65.7470 1.0000 + -30.0263 1.0000 + -30.0177 1.0000 + -29.8073 1.0000 + -1.1910 1.0000 + 3.1811 1.0000 + 4.6122 1.0000 + 5.2814 1.0000 + 6.9503 1.0000 + 7.4746 1.0000 + 8.9798 0.0000 + 9.5814 0.0000 + 11.3283 0.0000 + 13.6460 0.0000 + 15.5948 0.0000 + + + -91.8811 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7470 1.0000 + -30.0261 1.0000 + -30.0198 1.0000 + -29.8072 1.0000 + -1.1414 1.0000 + 3.1889 1.0000 + 4.5083 1.0000 + 5.2434 1.0000 + 6.9639 1.0000 + 7.6097 0.9999 + 8.7962 0.0000 + 9.4992 0.0000 + 11.5568 0.0000 + 13.6608 0.0000 + 15.2250 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7469 1.0000 + -30.0257 1.0000 + -30.0255 1.0000 + -29.8066 1.0000 + -0.9957 1.0000 + 3.1942 1.0000 + 4.2418 1.0000 + 5.1757 1.0000 + 7.0004 1.0000 + 7.9287 0.2579 + 8.4011 0.0000 + 9.3080 0.0000 + 12.0788 0.0000 + 13.5578 0.0000 + 15.2519 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7467 1.0000 + -30.0345 1.0000 + -30.0247 1.0000 + -29.8057 1.0000 + -0.7602 1.0000 + 3.1062 1.0000 + 3.9790 1.0000 + 5.1030 1.0000 + 7.0431 1.0000 + 7.9901 0.0646 + 8.2728 0.0000 + 9.1426 0.0000 + 12.6730 0.0000 + 13.3289 0.0000 + 15.7896 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7465 1.0000 + -30.0445 1.0000 + -30.0237 1.0000 + -29.8047 1.0000 + -0.4475 1.0000 + 2.8028 1.0000 + 3.9098 1.0000 + 5.0079 1.0000 + 7.0489 1.0000 + 7.6784 0.9981 + 8.4720 0.0000 + 9.1821 0.0000 + 12.9563 0.0000 + 13.5965 0.0000 + 17.2388 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7463 1.0000 + -30.0541 1.0000 + -30.0228 1.0000 + -29.8038 1.0000 + -0.0679 1.0000 + 2.3493 1.0000 + 3.9944 1.0000 + 4.8777 1.0000 + 6.9573 1.0000 + 7.5462 1.0000 + 8.5230 0.0000 + 9.4304 0.0000 + 12.4873 0.0000 + 13.6262 0.0000 + 16.0306 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2897 1.0000 + -65.7461 1.0000 + -30.0615 1.0000 + -30.0221 1.0000 + -29.8030 1.0000 + 0.3633 1.0000 + 1.8487 1.0000 + 4.1415 1.0000 + 4.7166 1.0000 + 6.8214 1.0000 + 7.5399 1.0000 + 8.5695 0.0000 + 9.7014 0.0000 + 12.0422 0.0000 + 13.9068 0.0000 + 16.1837 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7461 1.0000 + -30.0656 1.0000 + -30.0217 1.0000 + -29.8026 1.0000 + 0.8283 1.0000 + 1.3477 1.0000 + 4.3004 1.0000 + 4.5506 1.0000 + 6.7365 1.0000 + 7.5567 1.0000 + 8.6157 0.0000 + 9.8832 0.0000 + 11.7458 0.0000 + 14.0429 0.0000 + 16.0539 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7468 1.0000 + -30.0398 1.0000 + -30.0163 1.0000 + -29.8059 1.0000 + -0.7675 1.0000 + 2.5196 1.0000 + 4.5999 1.0000 + 5.0061 1.0000 + 6.6208 1.0000 + 7.9708 0.1066 + 9.0157 0.0000 + 9.9775 0.0000 + 11.8614 0.0000 + 13.1993 0.0000 + 15.3650 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7467 1.0000 + -30.0395 1.0000 + -30.0184 1.0000 + -29.8057 1.0000 + -0.7188 1.0000 + 2.5262 1.0000 + 4.5193 1.0000 + 4.9986 1.0000 + 6.6392 1.0000 + 8.0523 0.0083 + 8.8426 0.0000 + 9.8894 0.0000 + 12.0868 0.0000 + 13.1663 0.0000 + 16.1220 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7466 1.0000 + -30.0390 1.0000 + -30.0243 1.0000 + -29.8052 1.0000 + -0.5758 1.0000 + 2.5363 1.0000 + 4.3168 1.0000 + 4.9744 1.0000 + 6.6919 1.0000 + 8.2598 0.0000 + 8.4520 0.0000 + 9.6694 0.0000 + 12.6304 0.0000 + 13.0732 0.0000 + 15.6443 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7465 1.0000 + -30.0382 1.0000 + -30.0332 1.0000 + -29.8043 1.0000 + -0.3483 1.0000 + 2.5183 1.0000 + 4.0832 1.0000 + 4.9265 1.0000 + 6.7709 1.0000 + 8.0186 0.0274 + 8.5126 0.0000 + 9.4183 0.0000 + 12.8043 0.0000 + 13.1910 0.0000 + 15.7181 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7462 1.0000 + -30.0432 1.0000 + -30.0373 1.0000 + -29.8034 1.0000 + -0.0478 1.0000 + 2.4216 1.0000 + 3.9190 1.0000 + 4.8440 1.0000 + 6.8610 1.0000 + 7.6333 0.9998 + 8.7054 0.0000 + 9.2656 0.0000 + 12.4562 0.0000 + 13.6001 0.0000 + 16.2032 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7460 1.0000 + -30.0528 1.0000 + -30.0364 1.0000 + -29.8024 1.0000 + 0.3045 1.0000 + 2.2066 1.0000 + 3.8869 1.0000 + 4.7195 1.0000 + 6.9324 1.0000 + 7.3479 1.0000 + 8.7335 0.0000 + 9.3281 0.0000 + 12.0629 0.0000 + 13.7569 0.0000 + 16.5710 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7459 1.0000 + -30.0602 1.0000 + -30.0357 1.0000 + -29.8017 1.0000 + 0.6908 1.0000 + 1.8937 1.0000 + 3.9664 1.0000 + 4.5594 1.0000 + 6.9277 1.0000 + 7.2186 1.0000 + 8.6985 0.0000 + 9.4867 0.0000 + 11.7099 0.0000 + 13.7542 0.0000 + 16.7032 0.0000 + + + -91.8786 1.0000 + -91.4236 1.0000 + -91.2886 1.0000 + -65.7457 1.0000 + -30.0642 1.0000 + -30.0352 1.0000 + -29.8012 1.0000 + 1.0768 1.0000 + 1.5402 1.0000 + 4.0958 1.0000 + 4.3989 1.0000 + 6.8746 1.0000 + 7.2086 1.0000 + 8.6828 0.0000 + 9.6000 0.0000 + 11.4903 0.0000 + 13.7171 0.0000 + 16.6030 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7465 1.0000 + -30.0502 1.0000 + -30.0152 1.0000 + -29.8048 1.0000 + -0.2969 1.0000 + 1.8722 1.0000 + 4.5904 1.0000 + 4.8147 1.0000 + 6.3956 1.0000 + 8.5207 0.0000 + 9.0442 0.0000 + 10.2923 0.0000 + 12.3631 0.0000 + 12.6799 0.0000 + 15.4633 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7465 1.0000 + -30.0501 1.0000 + -30.0173 1.0000 + -29.8046 1.0000 + -0.2476 1.0000 + 1.8793 1.0000 + 4.5376 1.0000 + 4.8080 1.0000 + 6.4159 1.0000 + 8.5593 0.0000 + 8.8804 0.0000 + 10.2052 0.0000 + 12.5854 0.0000 + 12.5895 0.0000 + 14.7751 0.0000 + + + -91.8814 1.0000 + -91.4264 1.0000 + -91.2914 1.0000 + -65.7464 1.0000 + -30.0496 1.0000 + -30.0233 1.0000 + -29.8041 1.0000 + -0.1045 1.0000 + 1.8964 1.0000 + 4.3983 1.0000 + 4.7846 1.0000 + 6.4746 1.0000 + 8.5014 0.0000 + 8.6596 0.0000 + 9.9796 0.0000 + 12.4726 0.0000 + 13.1496 0.0000 + 15.1815 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7462 1.0000 + -30.0487 1.0000 + -30.0321 1.0000 + -29.8032 1.0000 + 0.1204 1.0000 + 1.9197 1.0000 + 4.2177 1.0000 + 4.7361 1.0000 + 6.5646 1.0000 + 8.0702 0.0040 + 8.7844 0.0000 + 9.6958 0.0000 + 12.2586 0.0000 + 13.7021 0.0000 + 15.4427 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7460 1.0000 + -30.0478 1.0000 + -30.0422 1.0000 + -29.8023 1.0000 + 0.4035 1.0000 + 1.9363 1.0000 + 4.0468 1.0000 + 4.6515 1.0000 + 6.6739 1.0000 + 7.6760 0.9983 + 8.8822 0.0000 + 9.4477 0.0000 + 11.9748 0.0000 + 13.8742 0.0000 + 16.0112 0.0000 + + + -91.8797 1.0000 + -91.4248 1.0000 + -91.2897 1.0000 + -65.7458 1.0000 + -30.0517 1.0000 + -30.0469 1.0000 + -29.8013 1.0000 + 0.7108 1.0000 + 1.9297 1.0000 + 3.9336 1.0000 + 4.5238 1.0000 + 6.7857 1.0000 + 7.3592 1.0000 + 8.8793 0.0000 + 9.3398 0.0000 + 11.6821 0.0000 + 13.7440 0.0000 + 16.5307 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7456 1.0000 + -30.0593 1.0000 + -30.0463 1.0000 + -29.8006 1.0000 + 0.9965 1.0000 + 1.8877 1.0000 + 3.9039 1.0000 + 4.3616 1.0000 + 6.8809 1.0000 + 7.1374 1.0000 + 8.7963 0.0000 + 9.3615 0.0000 + 11.4387 0.0000 + 13.5583 0.0000 + 16.9470 0.0000 + + + -91.8787 1.0000 + -91.4238 1.0000 + -91.2887 1.0000 + -65.7455 1.0000 + -30.0632 1.0000 + -30.0459 1.0000 + -29.8002 1.0000 + 1.1916 1.0000 + 1.8308 1.0000 + 3.9520 1.0000 + 4.2094 1.0000 + 6.9473 1.0000 + 7.0123 1.0000 + 8.7381 0.0000 + 9.3978 0.0000 + 11.2989 0.0000 + 13.4437 0.0000 + 16.5925 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7463 1.0000 + -30.0559 1.0000 + -30.0145 1.0000 + -29.8042 1.0000 + 0.1293 1.0000 + 1.3542 1.0000 + 4.5849 1.0000 + 4.7168 1.0000 + 6.2814 1.0000 + 8.9385 0.0000 + 9.0598 0.0000 + 10.4726 0.0000 + 12.1850 0.0000 + 12.8255 0.0000 + 15.1774 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7463 1.0000 + -30.0557 1.0000 + -30.0167 1.0000 + -29.8040 1.0000 + 0.1836 1.0000 + 1.3565 1.0000 + 4.5671 1.0000 + 4.6874 1.0000 + 6.3024 1.0000 + 8.9015 0.0000 + 8.9469 0.0000 + 10.3933 0.0000 + 12.1353 0.0000 + 13.0125 0.0000 + 15.3429 0.0000 + + + -91.8806 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7462 1.0000 + -30.0552 1.0000 + -30.0227 1.0000 + -29.8035 1.0000 + 0.3435 1.0000 + 1.3655 1.0000 + 4.4967 1.0000 + 4.6242 1.0000 + 6.3631 1.0000 + 8.5307 0.0000 + 8.9685 0.0000 + 10.1791 0.0000 + 12.0342 0.0000 + 13.5893 0.0000 + 16.0045 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7460 1.0000 + -30.0544 1.0000 + -30.0315 1.0000 + -29.8026 1.0000 + 0.5914 1.0000 + 1.3832 1.0000 + 4.3674 1.0000 + 4.5524 1.0000 + 6.4562 1.0000 + 8.1044 0.0009 + 8.9932 0.0000 + 9.8884 0.0000 + 11.8622 0.0000 + 14.2861 0.0000 + 15.0487 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7459 1.0000 + -30.0535 1.0000 + -30.0416 1.0000 + -29.8017 1.0000 + 0.8833 1.0000 + 1.4308 1.0000 + 4.2192 1.0000 + 4.4522 1.0000 + 6.5696 1.0000 + 7.7127 0.9919 + 9.0016 0.0000 + 9.5963 0.0000 + 11.6488 0.0000 + 14.0297 0.0000 + 15.9577 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7457 1.0000 + -30.0528 1.0000 + -30.0512 1.0000 + -29.8008 1.0000 + 1.1157 1.0000 + 1.5761 1.0000 + 4.0844 1.0000 + 4.3103 1.0000 + 6.6854 1.0000 + 7.3974 1.0000 + 8.9559 0.0000 + 9.3894 0.0000 + 11.4424 0.0000 + 13.7001 0.0000 + 16.5151 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7455 1.0000 + -30.0587 1.0000 + -30.0521 1.0000 + -29.8000 1.0000 + 1.2081 1.0000 + 1.8399 1.0000 + 3.9754 1.0000 + 4.1492 1.0000 + 6.7823 1.0000 + 7.1786 1.0000 + 8.8498 0.0000 + 9.3109 0.0000 + 11.2830 0.0000 + 13.4354 0.0000 + 16.6304 0.0000 + + + -91.8793 1.0000 + -91.4243 1.0000 + -91.2893 1.0000 + -65.7454 1.0000 + -30.0627 1.0000 + -30.0518 1.0000 + -29.7996 1.0000 + 1.2328 1.0000 + 2.0507 1.0000 + 3.8985 1.0000 + 4.0417 1.0000 + 6.8389 1.0000 + 7.0660 1.0000 + 8.7690 0.0000 + 9.2970 0.0000 + 11.2437 0.0000 + 14.1131 0.0000 + 18.0681 0.0000 + + + -91.8804 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7474 1.0000 + -30.0205 1.0000 + -29.9874 1.0000 + -29.8211 1.0000 + -1.9380 1.0000 + 4.4295 1.0000 + 4.8508 1.0000 + 6.3792 1.0000 + 6.8138 1.0000 + 8.1771 0.0000 + 8.8386 0.0000 + 8.9434 0.0000 + 9.0466 0.0000 + 13.4689 0.0000 + 14.8465 0.0000 + + + -91.8802 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7474 1.0000 + -30.0226 1.0000 + -29.9872 1.0000 + -29.8209 1.0000 + -1.8859 1.0000 + 4.3438 1.0000 + 4.8274 1.0000 + 6.3656 1.0000 + 6.6651 1.0000 + 8.2366 0.0000 + 8.4561 0.0000 + 9.1702 0.0000 + 9.3749 0.0000 + 14.6979 0.0000 + 15.1035 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7473 1.0000 + -30.0286 1.0000 + -29.9866 1.0000 + -29.8203 1.0000 + -1.7375 1.0000 + 4.0528 1.0000 + 4.7878 1.0000 + 6.3364 1.0000 + 6.3830 1.0000 + 8.0619 0.0057 + 8.3336 0.0000 + 9.5014 0.0000 + 9.9115 0.0000 + 14.1815 0.0000 + 14.9183 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7471 1.0000 + -30.0372 1.0000 + -29.9857 1.0000 + -29.8195 1.0000 + -1.4939 1.0000 + 3.5647 1.0000 + 4.7595 1.0000 + 5.9723 1.0000 + 6.4743 1.0000 + 7.7497 0.9700 + 8.4147 0.0000 + 9.9423 0.0000 + 10.4794 0.0000 + 14.3282 0.0000 + 15.0758 0.0000 + + + -91.8796 1.0000 + -91.4244 1.0000 + -91.2894 1.0000 + -65.7469 1.0000 + -30.0470 1.0000 + -29.9846 1.0000 + -29.8185 1.0000 + -1.1660 1.0000 + 2.9634 1.0000 + 4.7389 1.0000 + 5.6413 1.0000 + 6.5416 1.0000 + 7.6483 0.9995 + 8.4831 0.0000 + 10.4090 0.0000 + 11.0447 0.0000 + 15.0305 0.0000 + 15.6832 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7468 1.0000 + -30.0566 1.0000 + -29.9837 1.0000 + -29.8176 1.0000 + -0.7654 1.0000 + 2.3210 1.0000 + 4.7218 1.0000 + 5.3752 1.0000 + 6.4754 1.0000 + 7.8474 0.6915 + 8.5405 0.0000 + 10.8486 0.0000 + 11.5771 0.0000 + 13.5613 0.0000 + 15.1290 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7467 1.0000 + -30.0642 1.0000 + -29.9830 1.0000 + -29.8168 1.0000 + -0.3160 1.0000 + 1.6951 1.0000 + 4.7092 1.0000 + 5.1905 1.0000 + 6.3590 1.0000 + 8.1987 0.0000 + 8.5831 0.0000 + 11.2134 0.0000 + 12.0304 0.0000 + 12.9684 0.0000 + 14.5851 0.0000 + + + -91.8817 1.0000 + -91.4266 1.0000 + -91.2917 1.0000 + -65.7467 1.0000 + -30.0683 1.0000 + -29.9826 1.0000 + -29.8165 1.0000 + 0.1015 1.0000 + 1.1853 1.0000 + 4.7026 1.0000 + 5.0962 1.0000 + 6.2848 1.0000 + 8.4738 0.0000 + 8.6059 0.0000 + 11.4369 0.0000 + 12.3087 0.0000 + 12.6173 0.0000 + 14.4394 0.0000 + + + -91.8803 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7474 1.0000 + -30.0202 1.0000 + -29.9904 1.0000 + -29.8208 1.0000 + -1.8853 1.0000 + 4.3956 1.0000 + 4.8088 1.0000 + 6.2602 1.0000 + 6.7341 1.0000 + 8.1965 0.0000 + 8.5252 0.0000 + 9.0697 0.0000 + 9.4119 0.0000 + 13.8616 0.0000 + 15.2576 0.0000 + + + -91.8804 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7473 1.0000 + -30.0223 1.0000 + -29.9901 1.0000 + -29.8206 1.0000 + -1.8347 1.0000 + 4.3325 1.0000 + 4.7685 1.0000 + 6.1044 1.0000 + 6.8162 1.0000 + 7.9710 0.1061 + 8.7574 0.0000 + 8.9151 0.0000 + 9.6966 0.0000 + 13.8495 0.0000 + 14.8611 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7473 1.0000 + -30.0283 1.0000 + -29.9896 1.0000 + -29.8200 1.0000 + -1.6854 1.0000 + 4.0715 1.0000 + 4.7055 1.0000 + 5.8924 1.0000 + 6.8149 1.0000 + 7.7859 0.9146 + 8.5439 0.0000 + 9.2979 0.0000 + 10.1790 0.0000 + 14.4429 0.0000 + 14.9450 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7471 1.0000 + -30.0369 1.0000 + -29.9887 1.0000 + -29.8192 1.0000 + -1.4415 1.0000 + 3.5859 1.0000 + 4.6793 1.0000 + 5.7131 1.0000 + 6.7163 1.0000 + 7.7038 0.9943 + 8.3889 0.0000 + 9.7722 0.0000 + 10.7211 0.0000 + 14.3964 0.0000 + 15.0087 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7469 1.0000 + -30.0468 1.0000 + -29.9877 1.0000 + -29.8182 1.0000 + -1.1142 1.0000 + 2.9798 1.0000 + 4.6736 1.0000 + 5.5108 1.0000 + 6.6199 1.0000 + 7.7221 0.9885 + 8.3636 0.0000 + 10.2499 0.0000 + 11.2691 0.0000 + 14.1095 0.0000 + 16.1309 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7467 1.0000 + -30.0564 1.0000 + -29.9867 1.0000 + -29.8173 1.0000 + -0.7140 1.0000 + 2.3366 1.0000 + 4.6761 1.0000 + 5.3013 1.0000 + 6.5008 1.0000 + 7.9230 0.2850 + 8.3953 0.0000 + 10.6940 0.0000 + 11.7823 0.0000 + 13.5487 0.0000 + 15.0697 0.0000 + + + -91.8810 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7466 1.0000 + -30.0639 1.0000 + -29.9860 1.0000 + -29.8166 1.0000 + -0.2628 1.0000 + 1.7117 1.0000 + 4.6852 1.0000 + 5.1307 1.0000 + 6.3817 1.0000 + 8.2332 0.0000 + 8.4366 0.0000 + 11.0609 0.0000 + 12.1858 0.0000 + 13.0336 0.0000 + 14.9369 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2912 1.0000 + -65.7466 1.0000 + -30.0680 1.0000 + -29.9856 1.0000 + -29.8162 1.0000 + 0.1614 1.0000 + 1.1971 1.0000 + 4.6963 1.0000 + 5.0329 1.0000 + 6.3108 1.0000 + 8.4305 0.0000 + 8.5088 0.0000 + 11.2905 0.0000 + 12.2531 0.0000 + 13.6523 0.0000 + 15.0165 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7472 1.0000 + -30.0193 1.0000 + -29.9987 1.0000 + -29.8199 1.0000 + -1.7259 1.0000 + 4.2208 1.0000 + 4.7206 1.0000 + 5.9736 1.0000 + 6.6199 1.0000 + 8.1432 0.0001 + 8.2436 0.0000 + 9.3875 0.0000 + 9.9330 0.0000 + 14.2783 0.0000 + 14.9326 0.0000 + + + -91.8805 1.0000 + -91.4253 1.0000 + -91.2904 1.0000 + -65.7472 1.0000 + -30.0214 1.0000 + -29.9985 1.0000 + -29.8197 1.0000 + -1.6767 1.0000 + 4.2223 1.0000 + 4.6204 1.0000 + 5.7734 1.0000 + 6.8479 1.0000 + 7.7918 0.9010 + 8.5549 0.0000 + 9.2077 0.0000 + 10.1836 0.0000 + 14.6923 0.0000 + 15.0199 0.0000 + + + -91.8807 1.0000 + -91.4255 1.0000 + -91.2906 1.0000 + -65.7471 1.0000 + -30.0274 1.0000 + -29.9980 1.0000 + -29.8192 1.0000 + -1.5287 1.0000 + 4.1177 1.0000 + 4.4062 1.0000 + 5.5506 1.0000 + 7.1483 1.0000 + 7.4218 1.0000 + 8.7268 0.0000 + 9.0973 0.0000 + 10.6622 0.0000 + 14.4498 0.0000 + 15.1810 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7469 1.0000 + -30.0361 1.0000 + -29.9971 1.0000 + -29.8183 1.0000 + -1.2856 1.0000 + 3.6350 1.0000 + 4.3984 1.0000 + 5.4250 1.0000 + 6.9924 1.0000 + 7.5022 1.0000 + 8.4908 0.0000 + 9.4686 0.0000 + 11.2024 0.0000 + 14.4000 0.0000 + 15.1855 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7467 1.0000 + -30.0460 1.0000 + -29.9962 1.0000 + -29.8174 1.0000 + -0.9603 1.0000 + 3.0182 1.0000 + 4.4522 1.0000 + 5.3087 1.0000 + 6.7413 1.0000 + 7.7217 0.9886 + 8.3005 0.0000 + 9.9206 0.0000 + 11.7328 0.0000 + 13.9753 0.0000 + 15.3830 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7465 1.0000 + -30.0556 1.0000 + -29.9952 1.0000 + -29.8164 1.0000 + -0.5617 1.0000 + 2.3790 1.0000 + 4.5170 1.0000 + 5.1603 1.0000 + 6.5656 1.0000 + 7.9200 0.2994 + 8.2560 0.0000 + 10.3547 0.0000 + 12.1577 0.0000 + 13.5549 0.0000 + 17.9977 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7464 1.0000 + -30.0631 1.0000 + -29.9945 1.0000 + -29.8157 1.0000 + -0.1093 1.0000 + 1.7590 1.0000 + 4.5897 1.0000 + 5.0004 1.0000 + 6.4473 1.0000 + 8.0381 0.0140 + 8.3802 0.0000 + 10.7217 0.0000 + 12.2601 0.0000 + 13.3666 0.0000 + 15.0205 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7464 1.0000 + -30.0672 1.0000 + -29.9941 1.0000 + -29.8153 1.0000 + 0.3334 1.0000 + 1.2318 1.0000 + 4.6652 1.0000 + 4.8709 1.0000 + 6.3846 1.0000 + 8.0775 0.0029 + 8.5356 0.0000 + 10.9631 0.0000 + 12.0560 0.0000 + 14.6802 0.0000 + 15.7986 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7470 1.0000 + -30.0181 1.0000 + -30.0111 1.0000 + -29.8187 1.0000 + -1.4695 1.0000 + 3.7994 1.0000 + 4.6693 1.0000 + 5.6325 1.0000 + 6.5974 1.0000 + 7.8461 0.6978 + 8.3061 0.0000 + 9.7917 0.0000 + 10.4886 0.0000 + 14.2428 0.0000 + 15.3871 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7469 1.0000 + -30.0202 1.0000 + -30.0109 1.0000 + -29.8185 1.0000 + -1.4195 1.0000 + 3.8193 1.0000 + 4.5504 1.0000 + 5.5098 1.0000 + 6.7466 1.0000 + 7.7637 0.9539 + 8.3458 0.0000 + 9.6384 0.0000 + 10.7162 0.0000 + 14.2161 0.0000 + 15.3807 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7468 1.0000 + -30.0261 1.0000 + -30.0103 1.0000 + -29.8179 1.0000 + -1.2729 1.0000 + 3.8625 1.0000 + 4.2037 1.0000 + 5.3571 1.0000 + 6.9709 1.0000 + 7.5306 1.0000 + 8.5275 0.0000 + 9.3693 0.0000 + 11.1903 0.0000 + 14.9903 0.0000 + 31.3493 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7467 1.0000 + -30.0349 1.0000 + -30.0095 1.0000 + -29.8171 1.0000 + -1.0337 1.0000 + 3.6024 1.0000 + 4.0290 1.0000 + 5.2643 1.0000 + 7.0029 1.0000 + 7.3935 1.0000 + 8.6571 0.0000 + 9.2934 0.0000 + 11.7135 0.0000 + 14.0675 0.0000 + 15.4038 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7464 1.0000 + -30.0448 1.0000 + -30.0085 1.0000 + -29.8161 1.0000 + -0.7114 1.0000 + 3.0260 1.0000 + 4.1301 1.0000 + 5.1712 1.0000 + 6.8136 1.0000 + 7.4784 1.0000 + 8.5466 0.0000 + 9.5926 0.0000 + 12.1469 0.0000 + 13.8100 0.0000 + 15.8147 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7463 1.0000 + -30.0544 1.0000 + -30.0076 1.0000 + -29.8152 1.0000 + -0.3183 1.0000 + 2.4223 1.0000 + 4.2569 1.0000 + 5.0412 1.0000 + 6.6493 1.0000 + 7.5743 1.0000 + 8.4765 0.0000 + 9.9779 0.0000 + 12.2811 0.0000 + 13.6749 0.0000 + 15.6480 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7461 1.0000 + -30.0619 1.0000 + -30.0069 1.0000 + -29.8145 1.0000 + 0.1309 1.0000 + 1.8302 1.0000 + 4.3950 1.0000 + 4.8792 1.0000 + 6.5467 1.0000 + 7.6338 0.9998 + 8.5191 0.0000 + 10.3234 0.0000 + 12.0332 0.0000 + 13.9324 0.0000 + 15.8350 0.0000 + + + -91.8807 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7461 1.0000 + -30.0660 1.0000 + -30.0065 1.0000 + -29.8141 1.0000 + 0.5962 1.0000 + 1.2931 1.0000 + 4.5437 1.0000 + 4.7091 1.0000 + 6.4966 1.0000 + 7.6617 0.9991 + 8.5908 0.0000 + 10.5605 0.0000 + 11.7454 0.0000 + 14.3195 0.0000 + 15.4240 0.0000 + + + -91.8811 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7467 1.0000 + -30.0253 1.0000 + -30.0166 1.0000 + -29.8173 1.0000 + -1.1232 1.0000 + 3.2045 1.0000 + 4.6486 1.0000 + 5.3096 1.0000 + 6.5657 1.0000 + 7.8108 0.8458 + 8.3758 0.0000 + 10.2111 0.0000 + 11.0400 0.0000 + 13.9258 0.0000 + 15.5259 0.0000 + + + -91.8810 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7466 1.0000 + -30.0251 1.0000 + -30.0187 1.0000 + -29.8171 1.0000 + -1.0740 1.0000 + 3.2169 1.0000 + 4.5463 1.0000 + 5.2645 1.0000 + 6.6130 1.0000 + 7.8637 0.6062 + 8.2993 0.0000 + 10.0666 0.0000 + 11.2485 0.0000 + 13.8793 0.0000 + 15.1310 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7465 1.0000 + -30.0247 1.0000 + -30.0245 1.0000 + -29.8165 1.0000 + -0.9278 1.0000 + 3.2332 1.0000 + 4.2746 1.0000 + 5.1943 1.0000 + 6.7018 1.0000 + 7.7714 0.9424 + 8.3727 0.0000 + 9.7624 0.0000 + 11.6929 0.0000 + 13.8341 0.0000 + 15.2470 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7463 1.0000 + -30.0335 1.0000 + -30.0237 1.0000 + -29.8157 1.0000 + -0.6936 1.0000 + 3.1651 1.0000 + 3.9951 1.0000 + 5.1310 1.0000 + 6.7693 1.0000 + 7.5109 1.0000 + 8.6573 0.0000 + 9.4680 0.0000 + 12.1191 0.0000 + 13.7501 0.0000 + 16.2199 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7461 1.0000 + -30.0435 1.0000 + -30.0228 1.0000 + -29.8147 1.0000 + -0.3808 1.0000 + 2.8709 1.0000 + 3.9188 1.0000 + 5.0470 1.0000 + 6.7750 1.0000 + 7.3303 1.0000 + 8.7957 0.0000 + 9.4194 0.0000 + 12.2854 0.0000 + 15.1004 0.0000 + 16.6631 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7460 1.0000 + -30.0531 1.0000 + -30.0219 1.0000 + -29.8138 1.0000 + -0.0012 1.0000 + 2.4149 1.0000 + 4.0086 1.0000 + 4.9212 1.0000 + 6.7199 1.0000 + 7.2772 1.0000 + 8.7185 0.0000 + 9.6676 0.0000 + 12.0399 0.0000 + 13.9078 0.0000 + 16.1396 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7458 1.0000 + -30.0605 1.0000 + -30.0212 1.0000 + -29.8131 1.0000 + 0.4304 1.0000 + 1.9114 1.0000 + 4.1602 1.0000 + 4.7577 1.0000 + 6.6629 1.0000 + 7.2826 1.0000 + 8.6633 0.0000 + 9.9472 0.0000 + 11.6785 0.0000 + 15.2726 0.0000 + 16.0488 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7457 1.0000 + -30.0646 1.0000 + -30.0207 1.0000 + -29.8127 1.0000 + 0.8992 1.0000 + 1.4048 1.0000 + 4.3197 1.0000 + 4.5902 1.0000 + 6.6327 1.0000 + 7.2942 1.0000 + 8.6558 0.0000 + 10.1424 0.0000 + 11.4034 0.0000 + 14.2472 0.0000 + 41.7288 0.0000 + + + -91.8814 1.0000 + -91.4263 1.0000 + -91.2913 1.0000 + -65.7464 1.0000 + -30.0388 1.0000 + -30.0152 1.0000 + -29.8160 1.0000 + -0.7011 1.0000 + 2.5446 1.0000 + 4.6365 1.0000 + 5.0441 1.0000 + 6.4285 1.0000 + 8.1110 0.0006 + 8.4422 0.0000 + 10.6018 0.0000 + 11.5597 0.0000 + 13.3506 0.0000 + 15.1051 0.0000 + + + -91.8812 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7464 1.0000 + -30.0386 1.0000 + -30.0173 1.0000 + -29.8158 1.0000 + -0.6526 1.0000 + 2.5545 1.0000 + 4.5567 1.0000 + 5.0344 1.0000 + 6.4474 1.0000 + 8.1580 0.0000 + 8.3450 0.0000 + 10.4604 0.0000 + 11.7435 0.0000 + 13.3794 0.0000 + 15.8365 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7462 1.0000 + -30.0381 1.0000 + -30.0233 1.0000 + -29.8152 1.0000 + -0.5089 1.0000 + 2.5736 1.0000 + 4.3507 1.0000 + 5.0102 1.0000 + 6.4989 1.0000 + 7.9569 0.1473 + 8.4473 0.0000 + 10.1404 0.0000 + 12.0883 0.0000 + 13.4032 0.0000 + 15.1473 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7461 1.0000 + -30.0373 1.0000 + -30.0321 1.0000 + -29.8143 1.0000 + -0.2806 1.0000 + 2.5705 1.0000 + 4.1067 1.0000 + 4.9666 1.0000 + 6.5721 1.0000 + 7.6198 0.9999 + 8.7017 0.0000 + 9.7782 0.0000 + 12.2391 0.0000 + 13.5917 0.0000 + 15.4441 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7459 1.0000 + -30.0422 1.0000 + -30.0363 1.0000 + -29.8134 1.0000 + 0.0188 1.0000 + 2.4896 1.0000 + 3.9304 1.0000 + 4.8876 1.0000 + 6.6514 1.0000 + 7.3330 1.0000 + 8.9105 0.0000 + 9.5027 0.0000 + 12.0077 0.0000 + 14.3536 0.0000 + 16.5093 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7457 1.0000 + -30.0518 1.0000 + -30.0354 1.0000 + -29.8125 1.0000 + 0.3709 1.0000 + 2.2835 1.0000 + 3.8916 1.0000 + 4.7617 1.0000 + 6.7183 1.0000 + 7.1436 1.0000 + 8.9049 0.0000 + 9.4941 0.0000 + 11.7396 0.0000 + 15.6793 0.0000 + 16.9345 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7455 1.0000 + -30.0593 1.0000 + -30.0348 1.0000 + -29.8117 1.0000 + 0.7545 1.0000 + 1.9742 1.0000 + 3.9744 1.0000 + 4.5954 1.0000 + 6.7577 1.0000 + 7.0518 1.0000 + 8.7886 0.0000 + 9.6473 0.0000 + 11.3101 0.0000 + 14.0340 0.0000 + 16.7643 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7454 1.0000 + -30.0633 1.0000 + -30.0343 1.0000 + -29.8114 1.0000 + 1.1319 1.0000 + 1.6271 1.0000 + 4.1052 1.0000 + 4.4298 1.0000 + 6.7711 1.0000 + 7.0239 1.0000 + 8.7206 0.0000 + 9.7665 0.0000 + 11.0890 0.0000 + 13.9788 0.0000 + 16.9520 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7462 1.0000 + -30.0493 1.0000 + -30.0141 1.0000 + -29.8149 1.0000 + -0.2288 1.0000 + 1.8983 1.0000 + 4.6283 1.0000 + 4.8575 1.0000 + 6.2772 1.0000 + 8.4945 0.0000 + 8.5804 0.0000 + 10.9224 0.0000 + 11.9786 0.0000 + 12.7899 0.0000 + 14.9087 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7461 1.0000 + -30.0491 1.0000 + -30.0162 1.0000 + -29.8147 1.0000 + -0.1792 1.0000 + 1.9074 1.0000 + 4.5762 1.0000 + 4.8487 1.0000 + 6.2969 1.0000 + 8.3585 0.0000 + 8.6284 0.0000 + 10.7823 0.0000 + 12.0806 0.0000 + 12.8868 0.0000 + 15.2348 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7460 1.0000 + -30.0486 1.0000 + -30.0222 1.0000 + -29.8141 1.0000 + -0.0352 1.0000 + 1.9332 1.0000 + 4.4339 1.0000 + 4.8242 1.0000 + 6.3536 1.0000 + 8.0475 0.0099 + 8.7378 0.0000 + 10.4554 0.0000 + 12.1158 0.0000 + 13.2657 0.0000 + 14.9000 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7458 1.0000 + -30.0478 1.0000 + -30.0311 1.0000 + -29.8133 1.0000 + 0.1893 1.0000 + 1.9679 1.0000 + 4.2451 1.0000 + 4.7769 1.0000 + 6.4400 1.0000 + 7.6916 0.9966 + 8.8745 0.0000 + 10.0643 0.0000 + 11.9241 0.0000 + 13.8014 0.0000 + 15.2989 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7456 1.0000 + -30.0469 1.0000 + -30.0412 1.0000 + -29.8123 1.0000 + 0.4706 1.0000 + 1.9998 1.0000 + 4.0636 1.0000 + 4.6916 1.0000 + 6.5446 1.0000 + 7.3787 1.0000 + 8.9926 0.0000 + 9.6981 0.0000 + 11.6104 0.0000 + 14.1038 0.0000 + 15.9363 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7454 1.0000 + -30.0508 1.0000 + -30.0460 1.0000 + -29.8114 1.0000 + 0.7753 1.0000 + 2.0098 1.0000 + 3.9391 1.0000 + 4.5583 1.0000 + 6.6530 1.0000 + 7.1493 1.0000 + 9.0079 0.0000 + 9.4727 0.0000 + 11.2802 0.0000 + 14.0000 0.0000 + 16.5368 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7452 1.0000 + -30.0583 1.0000 + -30.0454 1.0000 + -29.8107 1.0000 + 1.0560 1.0000 + 1.9838 1.0000 + 3.9064 1.0000 + 4.3863 1.0000 + 6.7511 1.0000 + 7.0039 1.0000 + 8.8800 0.0000 + 9.4519 0.0000 + 11.0055 0.0000 + 13.8522 0.0000 + 16.8940 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2896 1.0000 + -65.7452 1.0000 + -30.0624 1.0000 + -30.0450 1.0000 + -29.8103 1.0000 + 1.2424 1.0000 + 1.9383 1.0000 + 3.9540 1.0000 + 4.2239 1.0000 + 6.8299 1.0000 + 6.9158 1.0000 + 8.7739 0.0000 + 9.4832 0.0000 + 10.8480 0.0000 + 13.7576 0.0000 + 16.7488 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7460 1.0000 + -30.0550 1.0000 + -30.0134 1.0000 + -29.8143 1.0000 + 0.2043 1.0000 + 1.3732 1.0000 + 4.6240 1.0000 + 4.7616 1.0000 + 6.1883 1.0000 + 8.5233 0.0000 + 8.9674 0.0000 + 11.1121 0.0000 + 12.0071 0.0000 + 12.6025 0.0000 + 14.7790 0.0000 + + + -91.8807 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7460 1.0000 + -30.0547 1.0000 + -30.0156 1.0000 + -29.8141 1.0000 + 0.2601 1.0000 + 1.3783 1.0000 + 4.6072 1.0000 + 4.7289 1.0000 + 6.2110 1.0000 + 8.3945 0.0000 + 8.9806 0.0000 + 10.9757 0.0000 + 11.9688 0.0000 + 12.8374 0.0000 + 14.6721 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7458 1.0000 + -30.0543 1.0000 + -30.0216 1.0000 + -29.8135 1.0000 + 0.4205 1.0000 + 1.3934 1.0000 + 4.5342 1.0000 + 4.6626 1.0000 + 6.2753 1.0000 + 8.0869 0.0019 + 9.0106 0.0000 + 10.6601 0.0000 + 11.8277 0.0000 + 13.4681 0.0000 + 14.6325 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7457 1.0000 + -30.0535 1.0000 + -30.0305 1.0000 + -29.8127 1.0000 + 0.6680 1.0000 + 1.4216 1.0000 + 4.3948 1.0000 + 4.5926 1.0000 + 6.3719 1.0000 + 7.7299 0.9847 + 9.0457 0.0000 + 10.2612 0.0000 + 11.5905 0.0000 + 14.2426 0.0000 + 14.7492 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7455 1.0000 + -30.0527 1.0000 + -30.0406 1.0000 + -29.8117 1.0000 + 0.9557 1.0000 + 1.4873 1.0000 + 4.2358 1.0000 + 4.4908 1.0000 + 6.4878 1.0000 + 7.4124 1.0000 + 9.0712 0.0000 + 9.8506 0.0000 + 11.3089 0.0000 + 14.3846 0.0000 + 15.5524 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7453 1.0000 + -30.0518 1.0000 + -30.0502 1.0000 + -29.8108 1.0000 + 1.1737 1.0000 + 1.6621 1.0000 + 4.0925 1.0000 + 4.3402 1.0000 + 6.6061 1.0000 + 7.1785 1.0000 + 9.0505 0.0000 + 9.5155 0.0000 + 11.0400 0.0000 + 13.9482 0.0000 + 16.5775 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7451 1.0000 + -30.0577 1.0000 + -30.0512 1.0000 + -29.8101 1.0000 + 1.2606 1.0000 + 1.9475 1.0000 + 3.9805 1.0000 + 4.1622 1.0000 + 6.7058 1.0000 + 7.0369 1.0000 + 8.9273 0.0000 + 9.3617 0.0000 + 10.8310 0.0000 + 13.7460 0.0000 + 17.0707 0.0000 + + + -91.8798 1.0000 + -91.4249 1.0000 + -91.2898 1.0000 + -65.7451 1.0000 + -30.0619 1.0000 + -30.0509 1.0000 + -29.8097 1.0000 + 1.2859 1.0000 + 2.1702 1.0000 + 3.8990 1.0000 + 4.0390 1.0000 + 6.7652 1.0000 + 6.9729 1.0000 + 8.8041 0.0000 + 9.3315 0.0000 + 10.7166 0.0000 + 13.6320 0.0000 + 16.7501 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7464 1.0000 + -30.0175 1.0000 + -29.9844 1.0000 + -29.8488 1.0000 + -1.7370 1.0000 + 4.4422 1.0000 + 4.8585 1.0000 + 6.0714 1.0000 + 6.4466 1.0000 + 8.2302 0.0000 + 8.3749 0.0000 + 9.1175 0.0000 + 9.2619 0.0000 + 14.1349 0.0000 + 15.4013 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7463 1.0000 + -30.0195 1.0000 + -29.9841 1.0000 + -29.8486 1.0000 + -1.6861 1.0000 + 4.3659 1.0000 + 4.8534 1.0000 + 5.9862 1.0000 + 6.3903 1.0000 + 8.0854 0.0021 + 8.4524 0.0000 + 9.1354 0.0000 + 9.5120 0.0000 + 14.3643 0.0000 + 15.3071 0.0000 + + + -91.8803 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7463 1.0000 + -30.0256 1.0000 + -29.9835 1.0000 + -29.8481 1.0000 + -1.5384 1.0000 + 4.0964 1.0000 + 4.8387 1.0000 + 5.8780 1.0000 + 6.2244 1.0000 + 7.8814 0.5077 + 8.4118 0.0000 + 9.4051 0.0000 + 10.0237 0.0000 + 14.7831 0.0000 + 15.5390 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7461 1.0000 + -30.0342 1.0000 + -29.9826 1.0000 + -29.8473 1.0000 + -1.2961 1.0000 + 3.6243 1.0000 + 4.8224 1.0000 + 5.8880 1.0000 + 5.9794 1.0000 + 7.7697 0.9451 + 8.2240 0.0000 + 9.9152 0.0000 + 10.6017 0.0000 + 14.8981 0.0000 + 15.7528 0.0000 + + + -91.8798 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7459 1.0000 + -30.0442 1.0000 + -29.9816 1.0000 + -29.8464 1.0000 + -0.9701 1.0000 + 3.0306 1.0000 + 4.8098 1.0000 + 5.7145 1.0000 + 5.9645 1.0000 + 7.7405 0.9779 + 8.1068 0.0008 + 10.4758 0.0000 + 11.1795 0.0000 + 14.4320 0.0000 + 15.4052 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7457 1.0000 + -30.0538 1.0000 + -29.9807 1.0000 + -29.8456 1.0000 + -0.5710 1.0000 + 2.3983 1.0000 + 4.8012 1.0000 + 5.4818 1.0000 + 6.0144 1.0000 + 7.7545 0.9652 + 8.1644 0.0000 + 11.0095 0.0000 + 11.7243 0.0000 + 13.7286 0.0000 + 15.7410 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7456 1.0000 + -30.0614 1.0000 + -29.9799 1.0000 + -29.8449 1.0000 + -0.1177 1.0000 + 1.7781 1.0000 + 4.7964 1.0000 + 5.3133 1.0000 + 6.0112 1.0000 + 7.7807 0.9256 + 8.3693 0.0000 + 11.4739 0.0000 + 12.2127 0.0000 + 12.9109 0.0000 + 14.6649 0.0000 + + + -91.8817 1.0000 + -91.4266 1.0000 + -91.2916 1.0000 + -65.7457 1.0000 + -30.0656 1.0000 + -29.9796 1.0000 + -29.8446 1.0000 + 0.3197 1.0000 + 1.2526 1.0000 + 4.7946 1.0000 + 5.2255 1.0000 + 5.9923 1.0000 + 7.7988 0.8824 + 8.5626 0.0000 + 11.8394 0.0000 + 12.3313 0.0000 + 12.5446 0.0000 + 14.3190 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7463 1.0000 + -30.0172 1.0000 + -29.9873 1.0000 + -29.8485 1.0000 + -1.6849 1.0000 + 4.4076 1.0000 + 4.8483 1.0000 + 6.0207 1.0000 + 6.2826 1.0000 + 8.0528 0.0081 + 8.5353 0.0000 + 9.2108 0.0000 + 9.3896 0.0000 + 14.3918 0.0000 + 15.3197 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2896 1.0000 + -65.7463 1.0000 + -30.0193 1.0000 + -29.9870 1.0000 + -29.8483 1.0000 + -1.6339 1.0000 + 4.3516 1.0000 + 4.8346 1.0000 + 5.7996 1.0000 + 6.4178 1.0000 + 7.7836 0.9196 + 8.8250 0.0000 + 9.1722 0.0000 + 9.5353 0.0000 + 14.5019 0.0000 + 15.3716 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7462 1.0000 + -30.0253 1.0000 + -29.9865 1.0000 + -29.8478 1.0000 + -1.4861 1.0000 + 4.1162 1.0000 + 4.7981 1.0000 + 5.5891 1.0000 + 6.4356 1.0000 + 7.5244 1.0000 + 8.7710 0.0000 + 9.5148 0.0000 + 9.9362 0.0000 + 15.1352 0.0000 + 15.4072 0.0000 + + + -91.8803 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7460 1.0000 + -30.0340 1.0000 + -29.9857 1.0000 + -29.8470 1.0000 + -1.2446 1.0000 + 3.6518 1.0000 + 4.7706 1.0000 + 5.5402 1.0000 + 6.2682 1.0000 + 7.4667 1.0000 + 8.5007 0.0000 + 10.0751 0.0000 + 10.4593 0.0000 + 14.9293 0.0000 + 15.7909 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7458 1.0000 + -30.0439 1.0000 + -29.9846 1.0000 + -29.8461 1.0000 + -0.9180 1.0000 + 3.0555 1.0000 + 4.7621 1.0000 + 5.5144 1.0000 + 6.0975 1.0000 + 7.5228 1.0000 + 8.3066 0.0000 + 10.6374 0.0000 + 11.0036 0.0000 + 14.3882 0.0000 + 15.7788 0.0000 + + + -91.8803 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7457 1.0000 + -30.0536 1.0000 + -29.9837 1.0000 + -29.8453 1.0000 + -0.5188 1.0000 + 2.4214 1.0000 + 4.7659 1.0000 + 5.3939 1.0000 + 6.0417 1.0000 + 7.5977 1.0000 + 8.2829 0.0000 + 11.1508 0.0000 + 11.5105 0.0000 + 13.7183 0.0000 + 14.9755 0.0000 + + + -91.8811 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7456 1.0000 + -30.0611 1.0000 + -29.9830 1.0000 + -29.8447 1.0000 + -0.0651 1.0000 + 1.8001 1.0000 + 4.7789 1.0000 + 5.2458 1.0000 + 6.0321 1.0000 + 7.6461 0.9996 + 8.4238 0.0000 + 11.5584 0.0000 + 11.9266 0.0000 + 13.0831 0.0000 + 15.6069 0.0000 + + + -91.8817 1.0000 + -91.4266 1.0000 + -91.2916 1.0000 + -65.7456 1.0000 + -30.0653 1.0000 + -29.9826 1.0000 + -29.8443 1.0000 + 0.3795 1.0000 + 1.2691 1.0000 + 4.7936 1.0000 + 5.1515 1.0000 + 6.0240 1.0000 + 7.6686 0.9988 + 8.5805 0.0000 + 11.7779 0.0000 + 12.1352 0.0000 + 12.7618 0.0000 + 14.3597 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2897 1.0000 + -65.7461 1.0000 + -30.0163 1.0000 + -29.9957 1.0000 + -29.8477 1.0000 + -1.5268 1.0000 + 4.2431 1.0000 + 4.8102 1.0000 + 5.8696 1.0000 + 6.0346 1.0000 + 7.8110 0.8450 + 8.5785 0.0000 + 9.3930 0.0000 + 9.9093 0.0000 + 14.8181 0.0000 + 15.3992 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7461 1.0000 + -30.0184 1.0000 + -29.9955 1.0000 + -29.8475 1.0000 + -1.4775 1.0000 + 4.2438 1.0000 + 4.7542 1.0000 + 5.5293 1.0000 + 6.3522 1.0000 + 7.5150 1.0000 + 8.8801 0.0000 + 9.4592 0.0000 + 9.8752 0.0000 + 15.2792 0.0000 + 15.6628 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7460 1.0000 + -30.0244 1.0000 + -29.9950 1.0000 + -29.8470 1.0000 + -1.3299 1.0000 + 4.1576 1.0000 + 4.5679 1.0000 + 5.2979 1.0000 + 6.6150 1.0000 + 7.0904 1.0000 + 9.1579 0.0000 + 9.5750 0.0000 + 10.0825 0.0000 + 15.1794 0.0000 + 15.4777 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7459 1.0000 + -30.0332 1.0000 + -29.9941 1.0000 + -29.8463 1.0000 + -1.0889 1.0000 + 3.7247 1.0000 + 4.5126 1.0000 + 5.2739 1.0000 + 6.5053 1.0000 + 7.0116 1.0000 + 8.9177 0.0000 + 10.0553 0.0000 + 10.5390 0.0000 + 14.9488 0.0000 + 15.7735 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7457 1.0000 + -30.0432 1.0000 + -29.9932 1.0000 + -29.8454 1.0000 + -0.7637 1.0000 + 3.1184 1.0000 + 4.5570 1.0000 + 5.2947 1.0000 + 6.2309 1.0000 + 7.1569 1.0000 + 8.6614 0.0000 + 10.5778 0.0000 + 11.0215 0.0000 + 14.3672 0.0000 + 16.4135 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7455 1.0000 + -30.0528 1.0000 + -29.9922 1.0000 + -29.8445 1.0000 + -0.3665 1.0000 + 2.4849 1.0000 + 4.6192 1.0000 + 5.2403 1.0000 + 6.0991 1.0000 + 7.2727 1.0000 + 8.5350 0.0000 + 11.0432 0.0000 + 11.4229 0.0000 + 13.8722 0.0000 + 15.2253 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7454 1.0000 + -30.0603 1.0000 + -29.9915 1.0000 + -29.8439 1.0000 + 0.0883 1.0000 + 1.8666 1.0000 + 4.6927 1.0000 + 5.1041 1.0000 + 6.0902 1.0000 + 7.3348 1.0000 + 8.5545 0.0000 + 11.3690 0.0000 + 11.6761 0.0000 + 13.4279 0.0000 + 14.9423 0.0000 + + + -91.8813 1.0000 + -91.4263 1.0000 + -91.2913 1.0000 + -65.7454 1.0000 + -30.0645 1.0000 + -29.9911 1.0000 + -29.8436 1.0000 + 0.5523 1.0000 + 1.3197 1.0000 + 4.7737 1.0000 + 4.9700 1.0000 + 6.1067 1.0000 + 7.3584 1.0000 + 8.6259 0.0000 + 11.4672 0.0000 + 11.8083 0.0000 + 13.3060 0.0000 + 14.7773 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7459 1.0000 + -30.0150 1.0000 + -30.0082 1.0000 + -29.8466 1.0000 + -1.2712 1.0000 + 3.8438 1.0000 + 4.7684 1.0000 + 5.6401 1.0000 + 5.9574 1.0000 + 7.6738 0.9984 + 8.3685 0.0000 + 9.9037 0.0000 + 10.4726 0.0000 + 15.0041 0.0000 + 15.6011 0.0000 + + + -91.8803 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7459 1.0000 + -30.0172 1.0000 + -30.0079 1.0000 + -29.8464 1.0000 + -1.2218 1.0000 + 3.8708 1.0000 + 4.6756 1.0000 + 5.4045 1.0000 + 6.1889 1.0000 + 7.4347 1.0000 + 8.5911 0.0000 + 10.0325 0.0000 + 10.3726 0.0000 + 14.9251 0.0000 + 15.8940 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7457 1.0000 + -30.0231 1.0000 + -30.0074 1.0000 + -29.8459 1.0000 + -1.0751 1.0000 + 3.9445 1.0000 + 4.3254 1.0000 + 5.2342 1.0000 + 6.4457 1.0000 + 7.0265 1.0000 + 8.9822 0.0000 + 9.9608 0.0000 + 10.5366 0.0000 + 15.3724 0.0000 + 16.2209 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7456 1.0000 + -30.0320 1.0000 + -30.0066 1.0000 + -29.8451 1.0000 + -0.8371 1.0000 + 3.7696 1.0000 + 4.0713 1.0000 + 5.2102 1.0000 + 6.5202 1.0000 + 6.7576 1.0000 + 9.2256 0.0000 + 9.8208 0.0000 + 10.9794 0.0000 + 14.6872 0.0000 + 16.0115 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7454 1.0000 + -30.0420 1.0000 + -30.0056 1.0000 + -29.8442 1.0000 + -0.5159 1.0000 + 3.1732 1.0000 + 4.2009 1.0000 + 5.2095 1.0000 + 6.2786 1.0000 + 6.8561 1.0000 + 9.0363 0.0000 + 10.1403 0.0000 + 11.3532 0.0000 + 14.1947 0.0000 + 15.7790 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2902 1.0000 + -65.7452 1.0000 + -30.0516 1.0000 + -30.0047 1.0000 + -29.8434 1.0000 + -0.1232 1.0000 + 2.5651 1.0000 + 4.3406 1.0000 + 5.1419 1.0000 + 6.1556 1.0000 + 6.9535 1.0000 + 8.8219 0.0000 + 10.5329 0.0000 + 11.5193 0.0000 + 13.9904 0.0000 + 15.7124 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7451 1.0000 + -30.0592 1.0000 + -30.0040 1.0000 + -29.8427 1.0000 + 0.3259 1.0000 + 1.9702 1.0000 + 4.4841 1.0000 + 4.9917 1.0000 + 6.1733 1.0000 + 7.0010 1.0000 + 8.7133 0.0000 + 10.8431 0.0000 + 11.4585 0.0000 + 13.9770 0.0000 + 15.7545 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7450 1.0000 + -30.0633 1.0000 + -30.0036 1.0000 + -29.8424 1.0000 + 0.8108 1.0000 + 1.4140 1.0000 + 4.6313 1.0000 + 4.8202 1.0000 + 6.2227 1.0000 + 7.0116 1.0000 + 8.6872 0.0000 + 11.0198 0.0000 + 11.3364 0.0000 + 14.1763 0.0000 + 15.9685 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7456 1.0000 + -30.0224 1.0000 + -30.0136 1.0000 + -29.8453 1.0000 + -0.9268 1.0000 + 3.2623 1.0000 + 4.7464 1.0000 + 5.3834 1.0000 + 5.9960 1.0000 + 7.6341 0.9998 + 8.2611 0.0000 + 10.4569 0.0000 + 11.0184 0.0000 + 14.2330 0.0000 + 15.5535 0.0000 + + + -91.8807 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7456 1.0000 + -30.0222 1.0000 + -30.0157 1.0000 + -29.8451 1.0000 + -0.8773 1.0000 + 3.2832 1.0000 + 4.6571 1.0000 + 5.2991 1.0000 + 6.0714 1.0000 + 7.4689 1.0000 + 8.4217 0.0000 + 10.5908 0.0000 + 10.8787 0.0000 + 14.2953 0.0000 + 16.5961 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7455 1.0000 + -30.0218 1.0000 + -30.0216 1.0000 + -29.8446 1.0000 + -0.7317 1.0000 + 3.3310 1.0000 + 4.3786 1.0000 + 5.2110 1.0000 + 6.1851 1.0000 + 7.1526 1.0000 + 8.7615 0.0000 + 10.4513 0.0000 + 10.9940 0.0000 + 14.2699 0.0000 + 15.4567 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7453 1.0000 + -30.0306 1.0000 + -30.0209 1.0000 + -29.8438 1.0000 + -0.4981 1.0000 + 3.3273 1.0000 + 4.0470 1.0000 + 5.1832 1.0000 + 6.2401 1.0000 + 6.8777 1.0000 + 9.1353 0.0000 + 10.0431 0.0000 + 11.3235 0.0000 + 14.1794 0.0000 + 15.5671 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7451 1.0000 + -30.0407 1.0000 + -30.0200 1.0000 + -29.8429 1.0000 + -0.1859 1.0000 + 3.0693 1.0000 + 3.9456 1.0000 + 5.1491 1.0000 + 6.2051 1.0000 + 6.7650 1.0000 + 9.2971 0.0000 + 9.8622 0.0000 + 11.4431 0.0000 + 14.0899 0.0000 + 16.4426 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7449 1.0000 + -30.0503 1.0000 + -30.0191 1.0000 + -29.8421 1.0000 + 0.1920 1.0000 + 2.6071 1.0000 + 4.0528 1.0000 + 5.0472 1.0000 + 6.1874 1.0000 + 6.7639 1.0000 + 9.0797 0.0000 + 10.0903 0.0000 + 11.2974 0.0000 + 14.2166 0.0000 + 15.6033 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7448 1.0000 + -30.0579 1.0000 + -30.0184 1.0000 + -29.8414 1.0000 + 0.6211 1.0000 + 2.0968 1.0000 + 4.2164 1.0000 + 4.8791 1.0000 + 6.2614 1.0000 + 6.7657 1.0000 + 8.8662 0.0000 + 10.3491 0.0000 + 11.0306 0.0000 + 14.4108 0.0000 + 15.3788 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7447 1.0000 + -30.0620 1.0000 + -30.0180 1.0000 + -29.8411 1.0000 + 1.0880 1.0000 + 1.5873 1.0000 + 4.3747 1.0000 + 4.7100 1.0000 + 6.3575 1.0000 + 6.7421 1.0000 + 8.7550 0.0000 + 10.5500 0.0000 + 10.7906 0.0000 + 14.5624 0.0000 + 15.1655 0.0000 + + + -91.8811 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7454 1.0000 + -30.0360 1.0000 + -30.0122 1.0000 + -29.8440 1.0000 + -0.5057 1.0000 + 2.6136 1.0000 + 4.7370 1.0000 + 5.1523 1.0000 + 6.0130 1.0000 + 7.6494 0.9995 + 8.3935 0.0000 + 10.9701 0.0000 + 11.5187 0.0000 + 13.5916 0.0000 + 15.0632 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7453 1.0000 + -30.0358 1.0000 + -30.0143 1.0000 + -29.8438 1.0000 + -0.4569 1.0000 + 2.6313 1.0000 + 4.6641 1.0000 + 5.1321 1.0000 + 6.0295 1.0000 + 7.5280 1.0000 + 8.4922 0.0000 + 11.0888 0.0000 + 11.3355 0.0000 + 13.6775 0.0000 + 15.0131 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7452 1.0000 + -30.0353 1.0000 + -30.0204 1.0000 + -29.8433 1.0000 + -0.3133 1.0000 + 2.6752 1.0000 + 4.4540 1.0000 + 5.1041 1.0000 + 6.0697 1.0000 + 7.2554 1.0000 + 8.7315 0.0000 + 10.8888 0.0000 + 11.3448 0.0000 + 13.6890 0.0000 + 15.8847 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7450 1.0000 + -30.0345 1.0000 + -30.0292 1.0000 + -29.8426 1.0000 + -0.0859 1.0000 + 2.7166 1.0000 + 4.1804 1.0000 + 5.0770 1.0000 + 6.1163 1.0000 + 6.9765 1.0000 + 9.0212 0.0000 + 10.3917 0.0000 + 11.4336 0.0000 + 13.9055 0.0000 + 15.2813 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7448 1.0000 + -30.0394 1.0000 + -30.0336 1.0000 + -29.8417 1.0000 + 0.2123 1.0000 + 2.6878 1.0000 + 3.9634 1.0000 + 5.0147 1.0000 + 6.1592 1.0000 + 6.7920 1.0000 + 9.2662 0.0000 + 9.9512 0.0000 + 11.2415 0.0000 + 14.1593 0.0000 + 15.4866 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7446 1.0000 + -30.0491 1.0000 + -30.0327 1.0000 + -29.8408 1.0000 + 0.5609 1.0000 + 2.5137 1.0000 + 3.9070 1.0000 + 4.8851 1.0000 + 6.2238 1.0000 + 6.7173 1.0000 + 9.2451 0.0000 + 9.8021 0.0000 + 10.8954 0.0000 + 14.4228 0.0000 + 16.8868 0.0000 + + + -91.8798 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7444 1.0000 + -30.0566 1.0000 + -30.0320 1.0000 + -29.8402 1.0000 + 0.9361 1.0000 + 2.2131 1.0000 + 3.9968 1.0000 + 4.7012 1.0000 + 6.3401 1.0000 + 6.6831 1.0000 + 8.9915 0.0000 + 9.9352 0.0000 + 10.5511 0.0000 + 14.6648 0.0000 + 16.6490 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7444 1.0000 + -30.0607 1.0000 + -30.0317 1.0000 + -29.8398 1.0000 + 1.2854 1.0000 + 1.8883 1.0000 + 4.1342 1.0000 + 4.5244 1.0000 + 6.4820 1.0000 + 6.6213 1.0000 + 8.8197 0.0000 + 10.0947 0.0000 + 10.2879 0.0000 + 14.4258 0.0000 + 16.1813 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7451 1.0000 + -30.0466 1.0000 + -30.0111 1.0000 + -29.8430 1.0000 + -0.0307 1.0000 + 1.9718 1.0000 + 4.7340 1.0000 + 4.9824 1.0000 + 5.9781 1.0000 + 7.6817 0.9978 + 8.7276 0.0000 + 11.3873 0.0000 + 11.9478 0.0000 + 12.7854 0.0000 + 23.9436 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7451 1.0000 + -30.0464 1.0000 + -30.0132 1.0000 + -29.8428 1.0000 + 0.0185 1.0000 + 1.9888 1.0000 + 4.6859 1.0000 + 4.9653 1.0000 + 5.9970 1.0000 + 7.5729 1.0000 + 8.7751 0.0000 + 11.4491 0.0000 + 11.7029 0.0000 + 13.0190 0.0000 + 14.7782 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7450 1.0000 + -30.0459 1.0000 + -30.0193 1.0000 + -29.8423 1.0000 + 0.1624 1.0000 + 2.0359 1.0000 + 4.5378 1.0000 + 4.9360 1.0000 + 6.0484 1.0000 + 7.3135 1.0000 + 8.8969 0.0000 + 11.2099 0.0000 + 11.4930 0.0000 + 13.3525 0.0000 + 14.7482 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7448 1.0000 + -30.0451 1.0000 + -30.0282 1.0000 + -29.8416 1.0000 + 0.3853 1.0000 + 2.1069 1.0000 + 4.3253 1.0000 + 4.8953 1.0000 + 6.1228 1.0000 + 7.0290 1.0000 + 9.0504 0.0000 + 10.6735 0.0000 + 11.2840 0.0000 + 13.8208 0.0000 + 15.4677 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7446 1.0000 + -30.0442 1.0000 + -30.0384 1.0000 + -29.8407 1.0000 + 0.6619 1.0000 + 2.1867 1.0000 + 4.1117 1.0000 + 4.8111 1.0000 + 6.2095 1.0000 + 6.8181 1.0000 + 9.1919 0.0000 + 10.1602 0.0000 + 10.8993 0.0000 + 15.1026 0.0000 + 15.8962 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7444 1.0000 + -30.0481 1.0000 + -30.0434 1.0000 + -29.8399 1.0000 + 0.9577 1.0000 + 2.2499 1.0000 + 3.9565 1.0000 + 4.6608 1.0000 + 6.3079 1.0000 + 6.7191 1.0000 + 9.2475 0.0000 + 9.7542 0.0000 + 10.4853 0.0000 + 14.4236 0.0000 + 15.9769 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2900 1.0000 + -65.7442 1.0000 + -30.0556 1.0000 + -30.0428 1.0000 + -29.8392 1.0000 + 1.2239 1.0000 + 2.2689 1.0000 + 3.9080 1.0000 + 4.4598 1.0000 + 6.4254 1.0000 + 6.6915 1.0000 + 9.0705 0.0000 + 9.6405 0.0000 + 10.1444 0.0000 + 14.3430 0.0000 + 17.2812 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7442 1.0000 + -30.0598 1.0000 + -30.0424 1.0000 + -29.8388 1.0000 + 1.3946 1.0000 + 2.2508 1.0000 + 3.9615 1.0000 + 4.2707 1.0000 + 6.5390 1.0000 + 6.6669 1.0000 + 8.8711 0.0000 + 9.6833 0.0000 + 9.9342 0.0000 + 14.2821 0.0000 + 16.8667 0.0000 + + + -91.8809 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7450 1.0000 + -30.0524 1.0000 + -30.0105 1.0000 + -29.8425 1.0000 + 0.4229 1.0000 + 1.4332 1.0000 + 4.7335 1.0000 + 4.8932 1.0000 + 5.9406 1.0000 + 7.7046 0.9941 + 9.0485 0.0000 + 11.6113 0.0000 + 12.2365 0.0000 + 12.4166 0.0000 + 14.4069 0.0000 + + + -91.8809 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7450 1.0000 + -30.0522 1.0000 + -30.0126 1.0000 + -29.8423 1.0000 + 0.4791 1.0000 + 1.4433 1.0000 + 4.7207 1.0000 + 4.8490 1.0000 + 5.9697 1.0000 + 7.5985 1.0000 + 9.0623 0.0000 + 11.5449 0.0000 + 11.9351 0.0000 + 12.6346 0.0000 + 14.4028 0.0000 + + + -91.8811 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7449 1.0000 + -30.0517 1.0000 + -30.0187 1.0000 + -29.8418 1.0000 + 0.6406 1.0000 + 1.4754 1.0000 + 4.6393 1.0000 + 4.7744 1.0000 + 6.0463 1.0000 + 7.3409 1.0000 + 9.0974 0.0000 + 11.2685 0.0000 + 11.5426 0.0000 + 13.2087 0.0000 + 14.4572 0.0000 + + + -91.8808 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7447 1.0000 + -30.0509 1.0000 + -30.0276 1.0000 + -29.8411 1.0000 + 0.8849 1.0000 + 1.5379 1.0000 + 4.4679 1.0000 + 4.7154 1.0000 + 6.1524 1.0000 + 7.0495 1.0000 + 9.1423 0.0000 + 10.8507 0.0000 + 11.0603 0.0000 + 14.0298 0.0000 + 14.7766 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7445 1.0000 + -30.0501 1.0000 + -30.0378 1.0000 + -29.8402 1.0000 + 1.1502 1.0000 + 1.6634 1.0000 + 4.2778 1.0000 + 4.6118 1.0000 + 6.2733 1.0000 + 6.8222 1.0000 + 9.1840 0.0000 + 10.3474 0.0000 + 10.5871 0.0000 + 14.4557 0.0000 + 15.2545 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7443 1.0000 + -30.0493 1.0000 + -30.0475 1.0000 + -29.8393 1.0000 + 1.3315 1.0000 + 1.9197 1.0000 + 4.1103 1.0000 + 4.4350 1.0000 + 6.3954 1.0000 + 6.7111 1.0000 + 9.1975 0.0000 + 9.8332 0.0000 + 10.1952 0.0000 + 14.3744 0.0000 + 15.8908 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7441 1.0000 + -30.0551 1.0000 + -30.0487 1.0000 + -29.8387 1.0000 + 1.4141 1.0000 + 2.2587 1.0000 + 3.9834 1.0000 + 4.2083 1.0000 + 6.5037 1.0000 + 6.7025 1.0000 + 9.0928 0.0000 + 9.5006 0.0000 + 9.9082 0.0000 + 14.2642 0.0000 + 16.9205 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7441 1.0000 + -30.0593 1.0000 + -30.0483 1.0000 + -29.8383 1.0000 + 1.4457 1.0000 + 2.5199 1.0000 + 3.9004 1.0000 + 4.0331 1.0000 + 6.5737 1.0000 + 6.7304 1.0000 + 8.8995 0.0000 + 9.4301 0.0000 + 9.7525 0.0000 + 14.2685 0.0000 + 34.2814 0.0000 + + + -91.8795 1.0000 + -91.4244 1.0000 + -91.2894 1.0000 + -65.7449 1.0000 + -30.0129 1.0000 + -29.9797 1.0000 + -29.8895 1.0000 + -1.4187 1.0000 + 4.4601 1.0000 + 4.6731 1.0000 + 5.6743 1.0000 + 5.9932 1.0000 + 8.1576 0.0001 + 8.3102 0.0000 + 9.3878 0.0000 + 9.5739 0.0000 + 14.6169 0.0000 + 15.2950 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2900 1.0000 + -65.7449 1.0000 + -30.0151 1.0000 + -29.9795 1.0000 + -29.8894 1.0000 + -1.3679 1.0000 + 4.3898 1.0000 + 4.6848 1.0000 + 5.5775 1.0000 + 5.9882 1.0000 + 8.0710 0.0039 + 8.3358 0.0000 + 9.2963 0.0000 + 9.8808 0.0000 + 14.7640 0.0000 + 15.2851 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7447 1.0000 + -30.0211 1.0000 + -29.9789 1.0000 + -29.8889 1.0000 + -1.2205 1.0000 + 4.1260 1.0000 + 4.7341 1.0000 + 5.4333 1.0000 + 5.9646 1.0000 + 7.6673 0.9988 + 8.7032 0.0000 + 9.1336 0.0000 + 10.4886 0.0000 + 14.8840 0.0000 + 16.1247 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2897 1.0000 + -65.7446 1.0000 + -30.0299 1.0000 + -29.9782 1.0000 + -29.8882 1.0000 + -0.9808 1.0000 + 3.6652 1.0000 + 4.7987 1.0000 + 5.3993 1.0000 + 5.9001 1.0000 + 7.3364 1.0000 + 8.6839 0.0000 + 9.4310 0.0000 + 11.1616 0.0000 + 14.7250 0.0000 + 16.1963 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2899 1.0000 + -65.7444 1.0000 + -30.0400 1.0000 + -29.9771 1.0000 + -29.8874 1.0000 + -0.6587 1.0000 + 3.0989 1.0000 + 4.8498 1.0000 + 5.4590 1.0000 + 5.7806 1.0000 + 7.1397 1.0000 + 8.5209 0.0000 + 9.9588 0.0000 + 11.8236 0.0000 + 14.2014 0.0000 + 16.2147 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7442 1.0000 + -30.0497 1.0000 + -29.9762 1.0000 + -29.8866 1.0000 + -0.2656 1.0000 + 2.4987 1.0000 + 4.8835 1.0000 + 5.5379 1.0000 + 5.6319 1.0000 + 7.0597 1.0000 + 8.4828 0.0000 + 10.4687 0.0000 + 12.4416 0.0000 + 13.3290 0.0000 + 15.1337 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7441 1.0000 + -30.0573 1.0000 + -29.9754 1.0000 + -29.8860 1.0000 + 0.1849 1.0000 + 1.9035 1.0000 + 4.9056 1.0000 + 5.5030 1.0000 + 5.5861 1.0000 + 7.0432 1.0000 + 8.5758 0.0000 + 10.9253 0.0000 + 12.5527 0.0000 + 13.0088 0.0000 + 14.8073 0.0000 + + + -91.8812 1.0000 + -91.4261 1.0000 + -91.2912 1.0000 + -65.7441 1.0000 + -30.0615 1.0000 + -29.9750 1.0000 + -29.8857 1.0000 + 0.6491 1.0000 + 1.3651 1.0000 + 4.9176 1.0000 + 5.4303 1.0000 + 5.6017 1.0000 + 7.0458 1.0000 + 8.6931 0.0000 + 11.3271 0.0000 + 11.9366 0.0000 + 13.5779 0.0000 + 14.3517 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7449 1.0000 + -30.0127 1.0000 + -29.9828 1.0000 + -29.8893 1.0000 + -1.3666 1.0000 + 4.4223 1.0000 + 4.6934 1.0000 + 5.6697 1.0000 + 5.8285 1.0000 + 8.0271 0.0206 + 8.3692 0.0000 + 9.4509 0.0000 + 9.7370 0.0000 + 14.9651 0.0000 + 15.3421 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2901 1.0000 + -65.7448 1.0000 + -30.0148 1.0000 + -29.9826 1.0000 + -29.8892 1.0000 + -1.3163 1.0000 + 4.3772 1.0000 + 4.7020 1.0000 + 5.4537 1.0000 + 5.9491 1.0000 + 7.7861 0.9142 + 8.5756 0.0000 + 9.5058 0.0000 + 9.8346 0.0000 + 15.0595 0.0000 + 16.2568 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2896 1.0000 + -65.7447 1.0000 + -30.0208 1.0000 + -29.9819 1.0000 + -29.8886 1.0000 + -1.1678 1.0000 + 4.1541 1.0000 + 4.7483 1.0000 + 5.2311 1.0000 + 6.0125 1.0000 + 7.4085 1.0000 + 8.9608 0.0000 + 9.3188 0.0000 + 10.3531 0.0000 + 15.1264 0.0000 + 15.6355 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7445 1.0000 + -30.0296 1.0000 + -29.9811 1.0000 + -29.8879 1.0000 + -0.9290 1.0000 + 3.7034 1.0000 + 4.8102 1.0000 + 5.1970 1.0000 + 5.9664 1.0000 + 7.1173 1.0000 + 8.9157 0.0000 + 9.5830 0.0000 + 14.0696 0.0000 + 15.5381 0.0000 + 16.0450 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7443 1.0000 + -30.0398 1.0000 + -29.9802 1.0000 + -29.8871 1.0000 + -0.6068 1.0000 + 3.1346 1.0000 + 4.8473 1.0000 + 5.3098 1.0000 + 5.8138 1.0000 + 6.9753 1.0000 + 8.6937 0.0000 + 10.0930 0.0000 + 11.5987 0.0000 + 14.2851 0.0000 + 15.4916 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7442 1.0000 + -30.0495 1.0000 + -29.9792 1.0000 + -29.8864 1.0000 + -0.2132 1.0000 + 2.5322 1.0000 + 4.8734 1.0000 + 5.4530 1.0000 + 5.6251 1.0000 + 6.9349 1.0000 + 8.5950 0.0000 + 10.5671 0.0000 + 12.1071 0.0000 + 13.6101 0.0000 + 15.2056 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7441 1.0000 + -30.0571 1.0000 + -29.9785 1.0000 + -29.8858 1.0000 + 0.2373 1.0000 + 1.9361 1.0000 + 4.9016 1.0000 + 5.4135 1.0000 + 5.6118 1.0000 + 6.9300 1.0000 + 8.6308 0.0000 + 10.9545 0.0000 + 12.2321 0.0000 + 13.3411 0.0000 + 14.6028 0.0000 + + + -91.8813 1.0000 + -91.4262 1.0000 + -91.2912 1.0000 + -65.7440 1.0000 + -30.0612 1.0000 + -29.9781 1.0000 + -29.8855 1.0000 + 0.7080 1.0000 + 1.3914 1.0000 + 4.9262 1.0000 + 5.3148 1.0000 + 5.6677 1.0000 + 6.9317 1.0000 + 8.7105 0.0000 + 11.2069 0.0000 + 11.9941 0.0000 + 13.6247 0.0000 + 14.2566 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7447 1.0000 + -30.0118 1.0000 + -29.9913 1.0000 + -29.8886 1.0000 + -1.2087 1.0000 + 4.2480 1.0000 + 4.7537 1.0000 + 5.5479 1.0000 + 5.6464 1.0000 + 7.5854 1.0000 + 8.8369 0.0000 + 9.1686 0.0000 + 10.3783 0.0000 + 15.1703 0.0000 + 16.5372 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7446 1.0000 + -30.0140 1.0000 + -29.9911 1.0000 + -29.8884 1.0000 + -1.1599 1.0000 + 4.2600 1.0000 + 4.7624 1.0000 + 5.1876 1.0000 + 5.8950 1.0000 + 7.3708 1.0000 + 9.0334 0.0000 + 9.3519 0.0000 + 10.2679 0.0000 + 15.3111 0.0000 + 15.6587 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7445 1.0000 + -30.0200 1.0000 + -29.9906 1.0000 + -29.8880 1.0000 + -1.0132 1.0000 + 4.2030 1.0000 + 4.7943 1.0000 + 4.8011 1.0000 + 6.0641 1.0000 + 6.9806 1.0000 + 9.4178 0.0000 + 9.6455 0.0000 + 10.1655 0.0000 + 15.5541 0.0000 + 16.0175 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7444 1.0000 + -30.0289 1.0000 + -29.9897 1.0000 + -29.8872 1.0000 + -0.7738 1.0000 + 3.8102 1.0000 + 4.7014 1.0000 + 4.8920 1.0000 + 6.0747 1.0000 + 6.6867 1.0000 + 9.3773 0.0000 + 9.9364 0.0000 + 10.5923 0.0000 + 15.0458 0.0000 + 15.9243 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7441 1.0000 + -30.0390 1.0000 + -29.9887 1.0000 + -29.8864 1.0000 + -0.4528 1.0000 + 3.2344 1.0000 + 4.7338 1.0000 + 5.0752 1.0000 + 5.8733 1.0000 + 6.6224 1.0000 + 9.0753 0.0000 + 10.3673 0.0000 + 11.1413 0.0000 + 14.3495 0.0000 + 16.6028 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7440 1.0000 + -30.0487 1.0000 + -29.9878 1.0000 + -29.8857 1.0000 + -0.0611 1.0000 + 2.6291 1.0000 + 4.7819 1.0000 + 5.2693 1.0000 + 5.6458 1.0000 + 6.6483 1.0000 + 8.8604 0.0000 + 10.6806 0.0000 + 11.6275 0.0000 + 13.8130 0.0000 + 15.2714 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7438 1.0000 + -30.0563 1.0000 + -29.9871 1.0000 + -29.8850 1.0000 + 0.3892 1.0000 + 2.0335 1.0000 + 4.8463 1.0000 + 5.2455 1.0000 + 5.6563 1.0000 + 6.6606 1.0000 + 8.7680 0.0000 + 10.8072 0.0000 + 11.9897 0.0000 + 13.5317 0.0000 + 14.8625 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7438 1.0000 + -30.0604 1.0000 + -29.9867 1.0000 + -29.8847 1.0000 + 0.8747 1.0000 + 1.4744 1.0000 + 4.9295 1.0000 + 5.1004 1.0000 + 5.7671 1.0000 + 6.6527 1.0000 + 8.7570 0.0000 + 10.8011 0.0000 + 12.1859 0.0000 + 13.5593 0.0000 + 14.6572 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7444 1.0000 + -30.0105 1.0000 + -30.0038 1.0000 + -29.8876 1.0000 + -0.9548 1.0000 + 3.8567 1.0000 + 4.8138 1.0000 + 5.4323 1.0000 + 5.5813 1.0000 + 7.2363 1.0000 + 8.8397 0.0000 + 9.4096 0.0000 + 11.0606 0.0000 + 14.9041 0.0000 + 15.9154 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7444 1.0000 + -30.0127 1.0000 + -30.0037 1.0000 + -29.8874 1.0000 + -0.9054 1.0000 + 3.8932 1.0000 + 4.8113 1.0000 + 5.0970 1.0000 + 5.8095 1.0000 + 7.0569 1.0000 + 9.0275 0.0000 + 9.5614 0.0000 + 10.9012 0.0000 + 15.3640 0.0000 + 16.2477 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7443 1.0000 + -30.0188 1.0000 + -30.0031 1.0000 + -29.8869 1.0000 + -0.7600 1.0000 + 3.9970 1.0000 + 4.5299 1.0000 + 4.9001 1.0000 + 6.0104 1.0000 + 6.6764 1.0000 + 9.4299 0.0000 + 9.9366 0.0000 + 10.5322 0.0000 + 15.0414 0.0000 + 15.7405 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7441 1.0000 + -30.0277 1.0000 + -30.0023 1.0000 + -29.8862 1.0000 + -0.5239 1.0000 + 3.9586 1.0000 + 4.1573 1.0000 + 4.9630 1.0000 + 6.1585 1.0000 + 6.2704 1.0000 + 9.7369 0.0000 + 10.1887 0.0000 + 10.4392 0.0000 + 14.6116 0.0000 + 15.8892 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7439 1.0000 + -30.0379 1.0000 + -30.0014 1.0000 + -29.8854 1.0000 + -0.2066 1.0000 + 3.3648 1.0000 + 4.3281 1.0000 + 5.0858 1.0000 + 5.8933 1.0000 + 6.2876 1.0000 + 9.4924 0.0000 + 10.3513 0.0000 + 10.9098 0.0000 + 14.1968 0.0000 + 15.6095 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7437 1.0000 + -30.0476 1.0000 + -30.0005 1.0000 + -29.8847 1.0000 + 0.1788 1.0000 + 2.7700 1.0000 + 4.4886 1.0000 + 5.2214 1.0000 + 5.6433 1.0000 + 6.3659 1.0000 + 9.1667 0.0000 + 10.4414 0.0000 + 11.3646 0.0000 + 13.8896 0.0000 + 16.6031 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7436 1.0000 + -30.0552 1.0000 + -29.9998 1.0000 + -29.8840 1.0000 + 0.6216 1.0000 + 2.1905 1.0000 + 4.6276 1.0000 + 5.1554 1.0000 + 5.7004 1.0000 + 6.3833 1.0000 + 8.9358 0.0000 + 10.3679 0.0000 + 11.7330 0.0000 + 13.7871 0.0000 + 15.4993 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2905 1.0000 + -65.7435 1.0000 + -30.0593 1.0000 + -29.9994 1.0000 + -29.8837 1.0000 + 1.1087 1.0000 + 1.6347 1.0000 + 4.7486 1.0000 + 4.9984 1.0000 + 5.8749 1.0000 + 6.3442 1.0000 + 8.8213 0.0000 + 10.2716 0.0000 + 11.9440 0.0000 + 13.8193 0.0000 + 14.8856 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2901 1.0000 + -65.7441 1.0000 + -30.0183 1.0000 + -30.0091 1.0000 + -29.8863 1.0000 + -0.6139 1.0000 + 3.3047 1.0000 + 4.8442 1.0000 + 5.4603 1.0000 + 5.4868 1.0000 + 7.0343 1.0000 + 8.6590 0.0000 + 9.9415 0.0000 + 11.7134 0.0000 + 14.2240 0.0000 + 15.8795 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7441 1.0000 + -30.0181 1.0000 + -30.0113 1.0000 + -29.8862 1.0000 + -0.5649 1.0000 + 3.3377 1.0000 + 4.8084 1.0000 + 5.2074 1.0000 + 5.6705 1.0000 + 6.9017 1.0000 + 8.8064 0.0000 + 10.0721 0.0000 + 11.5068 0.0000 + 14.3145 0.0000 + 15.6369 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7440 1.0000 + -30.0176 1.0000 + -30.0174 1.0000 + -29.8857 1.0000 + -0.4208 1.0000 + 3.4287 1.0000 + 4.5635 1.0000 + 5.0640 1.0000 + 5.7943 1.0000 + 6.6030 1.0000 + 9.1559 0.0000 + 10.3672 0.0000 + 11.0498 0.0000 + 14.3100 0.0000 + 15.6899 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7438 1.0000 + -30.0263 1.0000 + -30.0168 1.0000 + -29.8850 1.0000 + -0.1891 1.0000 + 3.5310 1.0000 + 4.1526 1.0000 + 5.0962 1.0000 + 5.8378 1.0000 + 6.3101 1.0000 + 9.5515 0.0000 + 10.4117 0.0000 + 10.7785 0.0000 + 14.0757 0.0000 + 16.4690 0.0000 + + + -91.8807 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7436 1.0000 + -30.0365 1.0000 + -30.0159 1.0000 + -29.8842 1.0000 + 0.1197 1.0000 + 3.3712 1.0000 + 3.9854 1.0000 + 5.1910 1.0000 + 5.7030 1.0000 + 6.2124 1.0000 + 9.7686 0.0000 + 10.0355 0.0000 + 10.9145 0.0000 + 13.9867 0.0000 + 15.9162 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7434 1.0000 + -30.0463 1.0000 + -30.0150 1.0000 + -29.8835 1.0000 + 0.4894 1.0000 + 2.9018 1.0000 + 4.1317 1.0000 + 5.2339 1.0000 + 5.5776 1.0000 + 6.2422 1.0000 + 9.4373 0.0000 + 9.9987 0.0000 + 11.0336 0.0000 + 14.2044 0.0000 + 15.5874 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7433 1.0000 + -30.0539 1.0000 + -30.0143 1.0000 + -29.8829 1.0000 + 0.9061 1.0000 + 2.3921 1.0000 + 4.3127 1.0000 + 5.0699 1.0000 + 5.7376 1.0000 + 6.2494 1.0000 + 9.0950 0.0000 + 9.8623 0.0000 + 11.1873 0.0000 + 15.0131 0.0000 + 17.2295 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7431 1.0000 + -30.0580 1.0000 + -30.0139 1.0000 + -29.8825 1.0000 + 1.3392 1.0000 + 1.9119 1.0000 + 4.4535 1.0000 + 4.9101 1.0000 + 5.9724 1.0000 + 6.1724 1.0000 + 8.8920 0.0000 + 9.7378 0.0000 + 11.2934 0.0000 + 14.5094 0.0000 + 14.9006 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7438 1.0000 + -30.0320 1.0000 + -30.0077 1.0000 + -29.8852 1.0000 + -0.1990 1.0000 + 2.6933 1.0000 + 4.8622 1.0000 + 5.3088 1.0000 + 5.5698 1.0000 + 6.9576 1.0000 + 8.6840 0.0000 + 10.4231 0.0000 + 12.3103 0.0000 + 13.3388 0.0000 + 15.0063 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7438 1.0000 + -30.0318 1.0000 + -30.0099 1.0000 + -29.8850 1.0000 + -0.1505 1.0000 + 2.7229 1.0000 + 4.8168 1.0000 + 5.2487 1.0000 + 5.5888 1.0000 + 6.8570 1.0000 + 8.7830 0.0000 + 10.5162 0.0000 + 12.0017 0.0000 + 13.5605 0.0000 + 14.9311 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2902 1.0000 + -65.7436 1.0000 + -30.0312 1.0000 + -30.0160 1.0000 + -29.8846 1.0000 + -0.0083 1.0000 + 2.8063 1.0000 + 4.6280 1.0000 + 5.1868 1.0000 + 5.6156 1.0000 + 6.6210 1.0000 + 9.0297 0.0000 + 10.6548 0.0000 + 11.4979 0.0000 + 13.6805 0.0000 + 16.1680 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7435 1.0000 + -30.0305 1.0000 + -30.0249 1.0000 + -29.8838 1.0000 + 0.2176 1.0000 + 2.9196 1.0000 + 4.3150 1.0000 + 5.2001 1.0000 + 5.6107 1.0000 + 6.3844 1.0000 + 9.3223 0.0000 + 10.4868 0.0000 + 11.1488 0.0000 + 13.7394 0.0000 + 15.2525 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7433 1.0000 + -30.0353 1.0000 + -30.0296 1.0000 + -29.8831 1.0000 + 0.5095 1.0000 + 2.9934 1.0000 + 4.0235 1.0000 + 5.2081 1.0000 + 5.5733 1.0000 + 6.2653 1.0000 + 9.5540 0.0000 + 10.0537 0.0000 + 10.8460 0.0000 + 14.0317 0.0000 + 16.9865 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7431 1.0000 + -30.0450 1.0000 + -30.0288 1.0000 + -29.8823 1.0000 + 0.8493 1.0000 + 2.8878 1.0000 + 3.9281 1.0000 + 5.0740 1.0000 + 5.6506 1.0000 + 6.2584 1.0000 + 9.5863 0.0000 + 9.6119 0.0000 + 10.5896 0.0000 + 14.5477 0.0000 + 16.1231 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7430 1.0000 + -30.0527 1.0000 + -30.0281 1.0000 + -29.8818 1.0000 + 1.2065 1.0000 + 2.5979 1.0000 + 4.0342 1.0000 + 4.8601 1.0000 + 5.8427 1.0000 + 6.2709 1.0000 + 9.2185 0.0000 + 9.4083 0.0000 + 10.5443 0.0000 + 14.9799 0.0000 + 16.9946 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7429 1.0000 + -30.0568 1.0000 + -30.0277 1.0000 + -29.8814 1.0000 + 1.5149 1.0000 + 2.3015 1.0000 + 4.1783 1.0000 + 4.6820 1.0000 + 6.0499 1.0000 + 6.2287 1.0000 + 8.9581 0.0000 + 9.2598 0.0000 + 10.5742 0.0000 + 14.8199 0.0000 + 15.4551 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2912 1.0000 + -65.7436 1.0000 + -30.0427 1.0000 + -30.0068 1.0000 + -29.8843 1.0000 + 0.2722 1.0000 + 2.0800 1.0000 + 4.8773 1.0000 + 5.1767 1.0000 + 5.6077 1.0000 + 6.9482 1.0000 + 8.9102 0.0000 + 10.8202 0.0000 + 12.5032 0.0000 + 12.8741 0.0000 + 14.6540 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7436 1.0000 + -30.0425 1.0000 + -30.0088 1.0000 + -29.8842 1.0000 + 0.3219 1.0000 + 2.1086 1.0000 + 4.8435 1.0000 + 5.1373 1.0000 + 5.6282 1.0000 + 6.8548 1.0000 + 8.9591 0.0000 + 10.8385 0.0000 + 12.1616 0.0000 + 13.3887 0.0000 + 14.7173 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7434 1.0000 + -30.0420 1.0000 + -30.0149 1.0000 + -29.8837 1.0000 + 0.4637 1.0000 + 2.1902 1.0000 + 4.6998 1.0000 + 5.0929 1.0000 + 5.6713 1.0000 + 6.6315 1.0000 + 9.0845 0.0000 + 10.7099 0.0000 + 11.8347 0.0000 + 13.3260 0.0000 + 14.8037 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2904 1.0000 + -65.7433 1.0000 + -30.0412 1.0000 + -30.0239 1.0000 + -29.8830 1.0000 + 0.6817 1.0000 + 2.3190 1.0000 + 4.4554 1.0000 + 5.0740 1.0000 + 5.7125 1.0000 + 6.4023 1.0000 + 9.2380 0.0000 + 10.3235 0.0000 + 11.4656 0.0000 + 13.6342 0.0000 + 15.3546 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7431 1.0000 + -30.0404 1.0000 + -30.0342 1.0000 + -29.8822 1.0000 + 0.9487 1.0000 + 2.4808 1.0000 + 4.1899 1.0000 + 5.0008 1.0000 + 5.7567 1.0000 + 6.2838 1.0000 + 9.3589 0.0000 + 9.8771 0.0000 + 10.8863 0.0000 + 14.2986 0.0000 + 15.7162 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7429 1.0000 + -30.0441 1.0000 + -30.0396 1.0000 + -29.8814 1.0000 + 1.2299 1.0000 + 2.6376 1.0000 + 3.9806 1.0000 + 4.8199 1.0000 + 5.8594 1.0000 + 6.2868 1.0000 + 9.3046 0.0000 + 9.5580 0.0000 + 10.2980 0.0000 + 14.7255 0.0000 + 15.1041 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7427 1.0000 + -30.0517 1.0000 + -30.0390 1.0000 + -29.8808 1.0000 + 1.4810 1.0000 + 2.7241 1.0000 + 3.9050 1.0000 + 4.5774 1.0000 + 6.0293 1.0000 + 6.3312 1.0000 + 9.0511 0.0000 + 9.2924 0.0000 + 9.9968 0.0000 + 14.8542 0.0000 + 17.0014 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7427 1.0000 + -30.0559 1.0000 + -30.0387 1.0000 + -29.8806 1.0000 + 1.6404 1.0000 + 2.7265 1.0000 + 3.9706 1.0000 + 4.3593 1.0000 + 6.1919 1.0000 + 6.3459 1.0000 + 8.8868 0.0000 + 9.0124 0.0000 + 9.9580 0.0000 + 16.6992 0.0000 + 18.2794 0.0000 + + + -91.8816 1.0000 + -91.4266 1.0000 + -91.2915 1.0000 + -65.7435 1.0000 + -30.0485 1.0000 + -30.0062 1.0000 + -29.8839 1.0000 + 0.7508 1.0000 + 1.5290 1.0000 + 4.8872 1.0000 + 5.1019 1.0000 + 5.6111 1.0000 + 6.9563 1.0000 + 9.1684 0.0000 + 11.0963 0.0000 + 11.8845 0.0000 + 13.4542 0.0000 + 13.9816 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7434 1.0000 + -30.0483 1.0000 + -30.0082 1.0000 + -29.8836 1.0000 + 0.8074 1.0000 + 1.5503 1.0000 + 4.8837 1.0000 + 5.0282 1.0000 + 5.6611 1.0000 + 6.8614 1.0000 + 9.1821 0.0000 + 10.9712 0.0000 + 11.9443 0.0000 + 13.3175 0.0000 + 14.0111 0.0000 + + + -91.8809 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7433 1.0000 + -30.0478 1.0000 + -30.0143 1.0000 + -29.8832 1.0000 + 0.9654 1.0000 + 1.6153 1.0000 + 4.7866 1.0000 + 4.9431 1.0000 + 5.7637 1.0000 + 6.6281 1.0000 + 9.2181 0.0000 + 10.6031 0.0000 + 12.0239 0.0000 + 13.2393 0.0000 + 14.3926 0.0000 + + + -91.8809 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7432 1.0000 + -30.0471 1.0000 + -30.0234 1.0000 + -29.8825 1.0000 + 1.1904 1.0000 + 1.7430 1.0000 + 4.5650 1.0000 + 4.9174 1.0000 + 5.8769 1.0000 + 6.3717 1.0000 + 9.2652 0.0000 + 10.1220 0.0000 + 11.6464 0.0000 + 13.6165 0.0000 + 14.7417 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7430 1.0000 + -30.0463 1.0000 + -30.0337 1.0000 + -29.8817 1.0000 + 1.4108 1.0000 + 1.9753 1.0000 + 4.3324 1.0000 + 4.8220 1.0000 + 5.9828 1.0000 + 6.2221 1.0000 + 9.3061 0.0000 + 9.6403 0.0000 + 10.9581 0.0000 + 14.3215 0.0000 + 14.8365 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7428 1.0000 + -30.0455 1.0000 + -30.0435 1.0000 + -29.8809 1.0000 + 1.5658 1.0000 + 2.3279 1.0000 + 4.1275 1.0000 + 4.6077 1.0000 + 6.0847 1.0000 + 6.2409 1.0000 + 9.1753 0.0000 + 9.3638 0.0000 + 10.2421 0.0000 + 14.7264 0.0000 + 15.1864 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7426 1.0000 + -30.0512 1.0000 + -30.0449 1.0000 + -29.8803 1.0000 + 1.6627 1.0000 + 2.7320 1.0000 + 3.9747 1.0000 + 4.3124 1.0000 + 6.2217 1.0000 + 6.3335 1.0000 + 8.8577 0.0000 + 9.2736 0.0000 + 9.7144 0.0000 + 14.6891 0.0000 + 16.0466 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7426 1.0000 + -30.0554 1.0000 + -30.0446 1.0000 + -29.8800 1.0000 + 1.7108 1.0000 + 3.0627 1.0000 + 3.8918 1.0000 + 4.0425 1.0000 + 6.3299 1.0000 + 6.4187 1.0000 + 8.6764 0.0000 + 9.0361 0.0000 + 9.5744 0.0000 + 15.1073 0.0000 + 16.7779 0.0000 + + + -91.8791 1.0000 + -91.4239 1.0000 + -91.2890 1.0000 + -65.7431 1.0000 + -30.0077 1.0000 + -29.9745 1.0000 + -29.9360 1.0000 + -0.9922 1.0000 + 4.1697 1.0000 + 4.4791 1.0000 + 5.2762 1.0000 + 5.5520 1.0000 + 8.4050 0.0000 + 8.4412 0.0000 + 9.7376 0.0000 + 9.9653 0.0000 + 14.6114 0.0000 + 15.5437 0.0000 + + + -91.8795 1.0000 + -91.4244 1.0000 + -91.2894 1.0000 + -65.7431 1.0000 + -30.0099 1.0000 + -29.9743 1.0000 + -29.9359 1.0000 + -0.9433 1.0000 + 4.1493 1.0000 + 4.4316 1.0000 + 5.2543 1.0000 + 5.5665 1.0000 + 8.1472 0.0001 + 8.5627 0.0000 + 9.6381 0.0000 + 10.2814 0.0000 + 14.5670 0.0000 + 16.3874 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7431 1.0000 + -30.0160 1.0000 + -29.9738 1.0000 + -29.9355 1.0000 + -0.7997 1.0000 + 3.9591 1.0000 + 4.4276 1.0000 + 5.2220 1.0000 + 5.6067 1.0000 + 7.6690 0.9988 + 8.8770 0.0000 + 9.3920 0.0000 + 10.9261 0.0000 + 14.5052 0.0000 + 15.8789 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7429 1.0000 + -30.0250 1.0000 + -29.9729 1.0000 + -29.9348 1.0000 + -0.5652 1.0000 + 3.5680 1.0000 + 4.5355 1.0000 + 5.2114 1.0000 + 5.6623 1.0000 + 7.2067 1.0000 + 9.1059 0.0000 + 9.2908 0.0000 + 11.6363 0.0000 + 14.1697 0.0000 + 15.7589 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7427 1.0000 + -30.0353 1.0000 + -29.9719 1.0000 + -29.9341 1.0000 + -0.2521 1.0000 + 3.0868 1.0000 + 4.6814 1.0000 + 5.2185 1.0000 + 5.7142 1.0000 + 6.8332 1.0000 + 8.8793 0.0000 + 9.7265 0.0000 + 12.2929 0.0000 + 13.5685 0.0000 + 16.1058 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7425 1.0000 + -30.0450 1.0000 + -29.9710 1.0000 + -29.9334 1.0000 + 0.1257 1.0000 + 2.5716 1.0000 + 4.8261 1.0000 + 5.2273 1.0000 + 5.7364 1.0000 + 6.5820 1.0000 + 8.7708 0.0000 + 10.1434 0.0000 + 12.7927 0.0000 + 12.8308 0.0000 + 15.4481 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7424 1.0000 + -30.0526 1.0000 + -29.9703 1.0000 + -29.9329 1.0000 + 0.5574 1.0000 + 2.0489 1.0000 + 4.9438 1.0000 + 5.2220 1.0000 + 5.7179 1.0000 + 6.4574 1.0000 + 8.7837 0.0000 + 10.5245 0.0000 + 12.1279 0.0000 + 13.0743 0.0000 + 15.2254 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7423 1.0000 + -30.0568 1.0000 + -29.9699 1.0000 + -29.9325 1.0000 + 1.0239 1.0000 + 1.5364 1.0000 + 5.0194 1.0000 + 5.2031 1.0000 + 5.6900 1.0000 + 6.4177 1.0000 + 8.8427 0.0000 + 10.8611 0.0000 + 11.5754 0.0000 + 13.1725 0.0000 + 14.7884 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2897 1.0000 + -65.7431 1.0000 + -30.0075 1.0000 + -29.9776 1.0000 + -29.9357 1.0000 + -0.9418 1.0000 + 4.1601 1.0000 + 4.4633 1.0000 + 5.2925 1.0000 + 5.4803 1.0000 + 8.1369 0.0002 + 8.5843 0.0000 + 9.8748 0.0000 + 14.2706 0.0000 + 16.6056 0.0000 + 16.6825 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2896 1.0000 + -65.7431 1.0000 + -30.0097 1.0000 + -29.9774 1.0000 + -29.9356 1.0000 + -0.8921 1.0000 + 4.1617 1.0000 + 4.4064 1.0000 + 5.2343 1.0000 + 5.5218 1.0000 + 7.8744 0.5472 + 8.6852 0.0000 + 9.8973 0.0000 + 10.2230 0.0000 + 14.6840 0.0000 + 15.1549 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2897 1.0000 + -65.7430 1.0000 + -30.0157 1.0000 + -29.9768 1.0000 + -29.9352 1.0000 + -0.7465 1.0000 + 4.0060 1.0000 + 4.3910 1.0000 + 5.1646 1.0000 + 5.5823 1.0000 + 7.4453 1.0000 + 8.9926 0.0000 + 9.6515 0.0000 + 10.7842 0.0000 + 14.7401 0.0000 + 15.9068 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7428 1.0000 + -30.0247 1.0000 + -29.9759 1.0000 + -29.9346 1.0000 + -0.5124 1.0000 + 3.6173 1.0000 + 4.5175 1.0000 + 5.1467 1.0000 + 5.6283 1.0000 + 7.0241 1.0000 + 9.3214 0.0000 + 9.4009 0.0000 + 11.4365 0.0000 + 14.2651 0.0000 + 15.7142 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7426 1.0000 + -30.0350 1.0000 + -29.9750 1.0000 + -29.9339 1.0000 + -0.2008 1.0000 + 3.1352 1.0000 + 4.6826 1.0000 + 5.1753 1.0000 + 5.6422 1.0000 + 6.6940 1.0000 + 9.0514 0.0000 + 9.8080 0.0000 + 13.0238 0.0000 + 15.4136 0.0000 + 16.0797 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7424 1.0000 + -30.0447 1.0000 + -29.9741 1.0000 + -29.9332 1.0000 + 0.1782 1.0000 + 2.6185 1.0000 + 4.8334 1.0000 + 5.2268 1.0000 + 5.6216 1.0000 + 6.4836 1.0000 + 8.8850 0.0000 + 10.1806 0.0000 + 12.1773 0.0000 + 13.4647 0.0000 + 15.3704 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7423 1.0000 + -30.0524 1.0000 + -29.9734 1.0000 + -29.9327 1.0000 + 0.6080 1.0000 + 2.0944 1.0000 + 4.9487 1.0000 + 5.2360 1.0000 + 5.6214 1.0000 + 6.3720 1.0000 + 8.8398 0.0000 + 10.4741 0.0000 + 11.9232 0.0000 + 13.5675 0.0000 + 15.0575 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7422 1.0000 + -30.0566 1.0000 + -29.9730 1.0000 + -29.9323 1.0000 + 1.0767 1.0000 + 1.5797 1.0000 + 5.0331 1.0000 + 5.1824 1.0000 + 5.6559 1.0000 + 6.3220 1.0000 + 8.8601 0.0000 + 10.6497 0.0000 + 11.6448 0.0000 + 13.4921 0.0000 + 14.9068 0.0000 + + + -91.8794 1.0000 + -91.4243 1.0000 + -91.2893 1.0000 + -65.7429 1.0000 + -30.0066 1.0000 + -29.9862 1.0000 + -29.9351 1.0000 + -0.7866 1.0000 + 4.0335 1.0000 + 4.4889 1.0000 + 5.3371 1.0000 + 5.3463 1.0000 + 7.5604 1.0000 + 8.8667 0.0000 + 9.5757 0.0000 + 10.8119 0.0000 + 15.0193 0.0000 + 16.5679 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2896 1.0000 + -65.7429 1.0000 + -30.0088 1.0000 + -29.9860 1.0000 + -29.9350 1.0000 + -0.7381 1.0000 + 4.0728 1.0000 + 4.4246 1.0000 + 5.1607 1.0000 + 5.4807 1.0000 + 7.3825 1.0000 + 8.9797 0.0000 + 9.7876 0.0000 + 10.6899 0.0000 + 14.8927 0.0000 + 16.0636 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7428 1.0000 + -30.0149 1.0000 + -29.9854 1.0000 + -29.9346 1.0000 + -0.5926 1.0000 + 4.1214 1.0000 + 4.2640 1.0000 + 5.0156 1.0000 + 5.5704 1.0000 + 7.0120 1.0000 + 9.2675 0.0000 + 10.0834 0.0000 + 10.5691 0.0000 + 14.8072 0.0000 + 15.6699 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2899 1.0000 + -65.7426 1.0000 + -30.0239 1.0000 + -29.9846 1.0000 + -29.9340 1.0000 + -0.3590 1.0000 + 3.7621 1.0000 + 4.4212 1.0000 + 4.9587 1.0000 + 5.6136 1.0000 + 6.6438 1.0000 + 9.6171 0.0000 + 9.8168 0.0000 + 11.0150 0.0000 + 14.3910 0.0000 + 16.1444 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7424 1.0000 + -30.0342 1.0000 + -29.9837 1.0000 + -29.9333 1.0000 + -0.0480 1.0000 + 3.2758 1.0000 + 4.6646 1.0000 + 4.9722 1.0000 + 5.5802 1.0000 + 6.3794 1.0000 + 9.4388 0.0000 + 9.9520 0.0000 + 11.4875 0.0000 + 13.9130 0.0000 + 15.6021 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7422 1.0000 + -30.0440 1.0000 + -29.9828 1.0000 + -29.9326 1.0000 + 0.3278 1.0000 + 2.7560 1.0000 + 4.8584 1.0000 + 5.1054 1.0000 + 5.4544 1.0000 + 6.2435 1.0000 + 9.1535 0.0000 + 10.1417 0.0000 + 11.7635 0.0000 + 13.9583 0.0000 + 15.3074 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7421 1.0000 + -30.0516 1.0000 + -29.9821 1.0000 + -29.9320 1.0000 + 0.7545 1.0000 + 2.2317 1.0000 + 4.9434 1.0000 + 5.2715 1.0000 + 5.3901 1.0000 + 6.1613 1.0000 + 8.9788 0.0000 + 10.1660 0.0000 + 11.8759 0.0000 + 14.0401 0.0000 + 14.7589 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7421 1.0000 + -30.0559 1.0000 + -29.9817 1.0000 + -29.9317 1.0000 + 1.2187 1.0000 + 1.7187 1.0000 + 5.0186 1.0000 + 5.1440 1.0000 + 5.6004 1.0000 + 6.0785 1.0000 + 8.9071 0.0000 + 10.1124 0.0000 + 11.9295 0.0000 + 14.1658 0.0000 + 14.5853 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7427 1.0000 + -30.0054 1.0000 + -29.9989 1.0000 + -29.9343 1.0000 + -0.5379 1.0000 + 3.7030 1.0000 + 4.6090 1.0000 + 5.2630 1.0000 + 5.3959 1.0000 + 7.0695 1.0000 + 9.0908 0.0000 + 9.4357 0.0000 + 11.5575 0.0000 + 14.3516 0.0000 + 16.3601 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7426 1.0000 + -30.0076 1.0000 + -29.9987 1.0000 + -29.9341 1.0000 + -0.4887 1.0000 + 3.7492 1.0000 + 4.5743 1.0000 + 5.0985 1.0000 + 5.4857 1.0000 + 6.9239 1.0000 + 9.2263 0.0000 + 9.5939 0.0000 + 11.3727 0.0000 + 14.7170 0.0000 + 16.1538 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7426 1.0000 + -30.0138 1.0000 + -29.9982 1.0000 + -29.9337 1.0000 + -0.3455 1.0000 + 3.8851 1.0000 + 4.3963 1.0000 + 4.8981 1.0000 + 5.5780 1.0000 + 6.6012 1.0000 + 9.5131 0.0000 + 9.9903 0.0000 + 10.9583 0.0000 + 15.0569 0.0000 + 16.3985 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7424 1.0000 + -30.0228 1.0000 + -29.9974 1.0000 + -29.9331 1.0000 + -0.1133 1.0000 + 3.9680 1.0000 + 4.1423 1.0000 + 4.8263 1.0000 + 5.6458 1.0000 + 6.2595 1.0000 + 9.7738 0.0000 + 10.2498 0.0000 + 10.7319 0.0000 + 13.9527 0.0000 + 15.3880 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7422 1.0000 + -30.0330 1.0000 + -29.9965 1.0000 + -29.9323 1.0000 + 0.1946 1.0000 + 3.4921 1.0000 + 4.4185 1.0000 + 4.8251 1.0000 + 5.6324 1.0000 + 6.0245 1.0000 + 9.7715 0.0000 + 9.9943 0.0000 + 11.1510 0.0000 + 13.7014 0.0000 + 16.5495 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7420 1.0000 + -30.0429 1.0000 + -29.9956 1.0000 + -29.9316 1.0000 + 0.5628 1.0000 + 2.9731 1.0000 + 4.7045 1.0000 + 4.9098 1.0000 + 5.4759 1.0000 + 5.9673 1.0000 + 9.4317 0.0000 + 9.8472 0.0000 + 11.5921 0.0000 + 13.6688 0.0000 + 15.3116 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7418 1.0000 + -30.0505 1.0000 + -29.9949 1.0000 + -29.9311 1.0000 + 0.9775 1.0000 + 2.4579 1.0000 + 4.7922 1.0000 + 5.2187 1.0000 + 5.3117 1.0000 + 5.9343 1.0000 + 9.1395 0.0000 + 9.6338 0.0000 + 11.9354 0.0000 + 13.8117 0.0000 + 15.0790 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7418 1.0000 + -30.0548 1.0000 + -29.9946 1.0000 + -29.9308 1.0000 + 1.4086 1.0000 + 1.9761 1.0000 + 4.8168 1.0000 + 5.2061 1.0000 + 5.5597 1.0000 + 5.8151 1.0000 + 8.9724 0.0000 + 9.4790 0.0000 + 12.1291 0.0000 + 14.1071 0.0000 + 15.6601 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2903 1.0000 + -65.7424 1.0000 + -30.0135 1.0000 + -30.0040 1.0000 + -29.9332 1.0000 + -0.2065 1.0000 + 3.2450 1.0000 + 4.7589 1.0000 + 5.2488 1.0000 + 5.4433 1.0000 + 6.6906 1.0000 + 8.9578 0.0000 + 9.7562 0.0000 + 12.2284 0.0000 + 13.6467 0.0000 + 15.6738 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7424 1.0000 + -30.0133 1.0000 + -30.0062 1.0000 + -29.9330 1.0000 + -0.1582 1.0000 + 3.2898 1.0000 + 4.7575 1.0000 + 5.1144 1.0000 + 5.4721 1.0000 + 6.5804 1.0000 + 9.0982 0.0000 + 9.8501 0.0000 + 11.9458 0.0000 + 13.9323 0.0000 + 15.6257 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7422 1.0000 + -30.0128 1.0000 + -30.0124 1.0000 + -29.9326 1.0000 + -0.0156 1.0000 + 3.4223 1.0000 + 4.6865 1.0000 + 4.8536 1.0000 + 5.5334 1.0000 + 6.3183 1.0000 + 9.4083 0.0000 + 10.0693 0.0000 + 11.4327 0.0000 + 13.8385 0.0000 + 15.3753 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7421 1.0000 + -30.0214 1.0000 + -30.0120 1.0000 + -29.9320 1.0000 + 0.2115 1.0000 + 3.6251 1.0000 + 4.2944 1.0000 + 4.8274 1.0000 + 5.6180 1.0000 + 6.0093 1.0000 + 9.6312 0.0000 + 10.2757 0.0000 + 11.0215 0.0000 + 13.6105 0.0000 + 15.5689 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7418 1.0000 + -30.0317 1.0000 + -30.0111 1.0000 + -29.9313 1.0000 + 0.5117 1.0000 + 3.6756 1.0000 + 4.0282 1.0000 + 4.8696 1.0000 + 5.6990 1.0000 + 5.7349 1.0000 + 9.5362 0.0000 + 10.2061 0.0000 + 11.0080 0.0000 + 13.5324 0.0000 + 15.5343 0.0000 + + + -91.8804 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7417 1.0000 + -30.0416 1.0000 + -30.0103 1.0000 + -29.9306 1.0000 + 0.8642 1.0000 + 3.2318 1.0000 + 4.2558 1.0000 + 4.9684 1.0000 + 5.4836 1.0000 + 5.8019 1.0000 + 9.2565 0.0000 + 9.8056 0.0000 + 11.2920 0.0000 + 13.6768 0.0000 + 15.4872 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7415 1.0000 + -30.0493 1.0000 + -30.0096 1.0000 + -29.9300 1.0000 + 1.2490 1.0000 + 2.7560 1.0000 + 4.4489 1.0000 + 5.1394 1.0000 + 5.3565 1.0000 + 5.8359 1.0000 + 8.9975 0.0000 + 9.3530 0.0000 + 11.5665 0.0000 + 14.0109 0.0000 + 15.4805 0.0000 + + + -91.8796 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7414 1.0000 + -30.0535 1.0000 + -30.0091 1.0000 + -29.9298 1.0000 + 1.6087 1.0000 + 2.3515 1.0000 + 4.5288 1.0000 + 5.1724 1.0000 + 5.4938 1.0000 + 5.7819 1.0000 + 8.8529 0.0000 + 9.0524 0.0000 + 11.7104 0.0000 + 14.0573 0.0000 + 15.0900 0.0000 + + + -91.8814 1.0000 + -91.4264 1.0000 + -91.2914 1.0000 + -65.7422 1.0000 + -30.0274 1.0000 + -30.0027 1.0000 + -29.9322 1.0000 + 0.1919 1.0000 + 2.7296 1.0000 + 4.8887 1.0000 + 5.2689 1.0000 + 5.4479 1.0000 + 6.4571 1.0000 + 8.9309 0.0000 + 10.1141 0.0000 + 12.7287 0.0000 + 12.8456 0.0000 + 15.3170 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7421 1.0000 + -30.0272 1.0000 + -30.0048 1.0000 + -29.9320 1.0000 + 0.2409 1.0000 + 2.7729 1.0000 + 4.8898 1.0000 + 5.2223 1.0000 + 5.3965 1.0000 + 6.3796 1.0000 + 9.0274 0.0000 + 10.1593 0.0000 + 12.1501 0.0000 + 13.4325 0.0000 + 15.0368 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7419 1.0000 + -30.0267 1.0000 + -30.0110 1.0000 + -29.9316 1.0000 + 0.3806 1.0000 + 2.8996 1.0000 + 4.8497 1.0000 + 5.0127 1.0000 + 5.3985 1.0000 + 6.1868 1.0000 + 9.2455 0.0000 + 10.1860 0.0000 + 11.6938 0.0000 + 13.6620 0.0000 + 14.8455 0.0000 + + + -91.8809 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7418 1.0000 + -30.0259 1.0000 + -30.0201 1.0000 + -29.9310 1.0000 + 0.6011 1.0000 + 3.0992 1.0000 + 4.5252 1.0000 + 4.9705 1.0000 + 5.4410 1.0000 + 5.9674 1.0000 + 9.3795 0.0000 + 10.0938 0.0000 + 11.4215 0.0000 + 13.4946 0.0000 + 15.3249 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7416 1.0000 + -30.0305 1.0000 + -30.0251 1.0000 + -29.9303 1.0000 + 0.8844 1.0000 + 3.3282 1.0000 + 4.1307 1.0000 + 4.9976 1.0000 + 5.4432 1.0000 + 5.8368 1.0000 + 9.1709 0.0000 + 10.0960 0.0000 + 11.0760 0.0000 + 13.6019 0.0000 + 15.5760 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7414 1.0000 + -30.0404 1.0000 + -30.0242 1.0000 + -29.9296 1.0000 + 1.2071 1.0000 + 3.3733 1.0000 + 3.9450 1.0000 + 5.0033 1.0000 + 5.4115 1.0000 + 5.8500 1.0000 + 8.8027 0.0000 + 9.9189 0.0000 + 10.8392 0.0000 + 13.9632 0.0000 + 15.2363 0.0000 + + + -91.8810 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7413 1.0000 + -30.0482 1.0000 + -30.0236 1.0000 + -29.9291 1.0000 + 1.5374 1.0000 + 3.0788 1.0000 + 4.0952 1.0000 + 4.9405 1.0000 + 5.4963 1.0000 + 5.8970 1.0000 + 8.4845 0.0000 + 9.4593 0.0000 + 10.8758 0.0000 + 14.4053 0.0000 + 17.6986 0.0000 + + + -91.8806 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7411 1.0000 + -30.0524 1.0000 + -30.0233 1.0000 + -29.9289 1.0000 + 1.8017 1.0000 + 2.7984 1.0000 + 4.2319 1.0000 + 4.8727 1.0000 + 5.6545 1.0000 + 5.8902 1.0000 + 8.3046 0.0000 + 9.1174 0.0000 + 10.9361 0.0000 + 14.6714 0.0000 + 15.1061 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7419 1.0000 + -30.0381 1.0000 + -30.0016 1.0000 + -29.9314 1.0000 + 0.6438 1.0000 + 2.1972 1.0000 + 4.9816 1.0000 + 5.2821 1.0000 + 5.4079 1.0000 + 6.3587 1.0000 + 9.0891 0.0000 + 10.4109 0.0000 + 12.0762 0.0000 + 12.9720 0.0000 + 14.7931 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7418 1.0000 + -30.0379 1.0000 + -30.0038 1.0000 + -29.9312 1.0000 + 0.6917 1.0000 + 2.2385 1.0000 + 4.9684 1.0000 + 5.2605 1.0000 + 5.3795 1.0000 + 6.2871 1.0000 + 9.1342 0.0000 + 10.3626 0.0000 + 11.8755 0.0000 + 13.5638 0.0000 + 14.7415 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7417 1.0000 + -30.0374 1.0000 + -30.0100 1.0000 + -29.9308 1.0000 + 0.8289 1.0000 + 2.3628 1.0000 + 4.8680 1.0000 + 5.2167 1.0000 + 5.3487 1.0000 + 6.1151 1.0000 + 9.2333 0.0000 + 10.1098 0.0000 + 11.7864 0.0000 + 13.8645 0.0000 + 14.5821 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7415 1.0000 + -30.0368 1.0000 + -30.0191 1.0000 + -29.9302 1.0000 + 1.0385 1.0000 + 2.5659 1.0000 + 4.6184 1.0000 + 5.2494 1.0000 + 5.2935 1.0000 + 5.9474 1.0000 + 9.2299 0.0000 + 9.7805 0.0000 + 11.7623 0.0000 + 14.6669 0.0000 + 33.9627 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7413 1.0000 + -30.0360 1.0000 + -30.0295 1.0000 + -29.9295 1.0000 + 1.2933 1.0000 + 2.8351 1.0000 + 4.3053 1.0000 + 5.1462 1.0000 + 5.3500 1.0000 + 5.8888 1.0000 + 8.8751 0.0000 + 9.7440 0.0000 + 11.2586 0.0000 + 13.7436 0.0000 + 15.3267 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7412 1.0000 + -30.0394 1.0000 + -30.0352 1.0000 + -29.9289 1.0000 + 1.5626 1.0000 + 3.1227 1.0000 + 4.0176 1.0000 + 4.9307 1.0000 + 5.5039 1.0000 + 5.9329 1.0000 + 8.4289 0.0000 + 9.7601 0.0000 + 10.6018 0.0000 + 14.2919 0.0000 + 15.0899 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7410 1.0000 + -30.0472 1.0000 + -30.0346 1.0000 + -29.9284 1.0000 + 1.8088 1.0000 + 3.2901 1.0000 + 3.8891 1.0000 + 4.7082 1.0000 + 5.7010 1.0000 + 6.0056 1.0000 + 8.0678 0.0044 + 9.5108 0.0000 + 10.2464 0.0000 + 14.9130 0.0000 + 15.6767 0.0000 + + + -91.8813 1.0000 + -91.4263 1.0000 + -91.2912 1.0000 + -65.7409 1.0000 + -30.0515 1.0000 + -30.0343 1.0000 + -29.9281 1.0000 + 1.9715 1.0000 + 3.2549 1.0000 + 3.9834 1.0000 + 4.5315 1.0000 + 5.8883 1.0000 + 6.0297 1.0000 + 7.8661 0.5933 + 9.1689 0.0000 + 10.2004 0.0000 + 15.0616 0.0000 + 32.0644 0.0000 + + + -91.8815 1.0000 + -91.4266 1.0000 + -91.2915 1.0000 + -65.7418 1.0000 + -30.0440 1.0000 + -30.0011 1.0000 + -29.9310 1.0000 + 1.1269 1.0000 + 1.6721 1.0000 + 5.0342 1.0000 + 5.2771 1.0000 + 5.3683 1.0000 + 6.3348 1.0000 + 9.3061 0.0000 + 10.6059 0.0000 + 11.5175 0.0000 + 13.0325 0.0000 + 14.6615 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7417 1.0000 + -30.0438 1.0000 + -30.0032 1.0000 + -29.9308 1.0000 + 1.1784 1.0000 + 1.7101 1.0000 + 5.0365 1.0000 + 5.1518 1.0000 + 5.4647 1.0000 + 6.2520 1.0000 + 9.3181 0.0000 + 10.4031 0.0000 + 11.5903 0.0000 + 13.3633 0.0000 + 14.5583 0.0000 + + + -91.8801 1.0000 + -91.4252 1.0000 + -91.2901 1.0000 + -65.7415 1.0000 + -30.0433 1.0000 + -30.0093 1.0000 + -29.9303 1.0000 + 1.3163 1.0000 + 1.8312 1.0000 + 4.8941 1.0000 + 5.1190 1.0000 + 5.5631 1.0000 + 6.0425 1.0000 + 9.3454 0.0000 + 9.9129 0.0000 + 12.0493 0.0000 + 13.9108 0.0000 + 14.3729 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7414 1.0000 + -30.0427 1.0000 + -30.0185 1.0000 + -29.9297 1.0000 + 1.5003 1.0000 + 2.0569 1.0000 + 4.6455 1.0000 + 5.1693 1.0000 + 5.5995 1.0000 + 5.8371 1.0000 + 9.2378 0.0000 + 9.4800 0.0000 + 11.9139 0.0000 + 13.5604 0.0000 + 14.7551 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7412 1.0000 + -30.0419 1.0000 + -30.0289 1.0000 + -29.9291 1.0000 + 1.6855 1.0000 + 2.3977 1.0000 + 4.3844 1.0000 + 5.1110 1.0000 + 5.5521 1.0000 + 5.8491 1.0000 + 8.7124 0.0000 + 9.4831 0.0000 + 11.3760 0.0000 + 13.8572 0.0000 + 14.9892 0.0000 + + + -91.8810 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7410 1.0000 + -30.0411 1.0000 + -30.0389 1.0000 + -29.9285 1.0000 + 1.8550 1.0000 + 2.8180 1.0000 + 4.1421 1.0000 + 4.8462 1.0000 + 5.6803 1.0000 + 5.9491 1.0000 + 8.2154 0.0000 + 9.5095 0.0000 + 10.5843 0.0000 + 14.5072 0.0000 + 15.0778 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7409 1.0000 + -30.0467 1.0000 + -30.0406 1.0000 + -29.9280 1.0000 + 1.9950 1.0000 + 3.2581 1.0000 + 3.9509 1.0000 + 4.5226 1.0000 + 5.8957 1.0000 + 6.0587 1.0000 + 7.8278 0.7815 + 9.4491 0.0000 + 9.9344 0.0000 + 15.0260 0.0000 + 18.3727 0.0000 + + + -91.8815 1.0000 + -91.4265 1.0000 + -91.2915 1.0000 + -65.7408 1.0000 + -30.0510 1.0000 + -30.0402 1.0000 + -29.9277 1.0000 + 2.0780 1.0000 + 3.6286 1.0000 + 3.8595 1.0000 + 4.2059 1.0000 + 6.0817 1.0000 + 6.1302 1.0000 + 7.6065 1.0000 + 9.1931 0.0000 + 9.7385 0.0000 + 15.0476 0.0000 + 16.6319 0.0000 + + + -91.8793 1.0000 + -91.4243 1.0000 + -91.2893 1.0000 + -65.7415 1.0000 + -30.0028 1.0000 + -29.9802 1.0000 + -29.9695 1.0000 + -0.4815 1.0000 + 3.4597 1.0000 + 4.4964 1.0000 + 4.9371 1.0000 + 5.1831 1.0000 + 8.4989 0.0000 + 9.1550 0.0000 + 10.1399 0.0000 + 10.4152 0.0000 + 14.2974 0.0000 + 14.8308 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2897 1.0000 + -65.7415 1.0000 + -30.0050 1.0000 + -29.9801 1.0000 + -29.9693 1.0000 + -0.4342 1.0000 + 3.4391 1.0000 + 4.4529 1.0000 + 4.9676 1.0000 + 5.2040 1.0000 + 8.2556 0.0000 + 9.2125 0.0000 + 10.0413 0.0000 + 10.7194 0.0000 + 14.2965 0.0000 + 15.1176 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7414 1.0000 + -30.0112 1.0000 + -29.9796 1.0000 + -29.9688 1.0000 + -0.2928 1.0000 + 3.3540 1.0000 + 4.3881 1.0000 + 5.0261 1.0000 + 5.2648 1.0000 + 7.7736 0.9387 + 9.3605 0.0000 + 9.8023 0.0000 + 11.3678 0.0000 + 13.9531 0.0000 + 14.9554 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7412 1.0000 + -30.0203 1.0000 + -29.9791 1.0000 + -29.9679 1.0000 + -0.0672 1.0000 + 3.1662 1.0000 + 4.3914 1.0000 + 5.0790 1.0000 + 5.3596 1.0000 + 7.2805 1.0000 + 9.4059 0.0000 + 9.6783 0.0000 + 12.0688 0.0000 + 13.4792 0.0000 + 15.2550 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7411 1.0000 + -30.0306 1.0000 + -29.9785 1.0000 + -29.9670 1.0000 + 0.2282 1.0000 + 2.8837 1.0000 + 4.4758 1.0000 + 5.1145 1.0000 + 5.4784 1.0000 + 6.8477 1.0000 + 9.1811 0.0000 + 9.8874 0.0000 + 12.5970 0.0000 + 12.9048 0.0000 + 15.2176 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7408 1.0000 + -30.0404 1.0000 + -29.9778 1.0000 + -29.9661 1.0000 + 0.5762 1.0000 + 2.5428 1.0000 + 4.6037 1.0000 + 5.1264 1.0000 + 5.6095 1.0000 + 6.4965 1.0000 + 9.0211 0.0000 + 10.1220 0.0000 + 12.3062 0.0000 + 12.7724 0.0000 + 15.5499 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7407 1.0000 + -30.0482 1.0000 + -29.9773 1.0000 + -29.9654 1.0000 + 0.9542 1.0000 + 2.1721 1.0000 + 4.7324 1.0000 + 5.1121 1.0000 + 5.7425 1.0000 + 6.2291 1.0000 + 8.9691 0.0000 + 10.3317 0.0000 + 11.7644 0.0000 + 12.7021 0.0000 + 15.1622 0.0000 + + + -91.8793 1.0000 + -91.4243 1.0000 + -91.2893 1.0000 + -65.7406 1.0000 + -30.0524 1.0000 + -29.9770 1.0000 + -29.9649 1.0000 + 1.3325 1.0000 + 1.8005 1.0000 + 4.8244 1.0000 + 5.0841 1.0000 + 5.8749 1.0000 + 6.0344 1.0000 + 8.9800 0.0000 + 10.4848 0.0000 + 11.3991 0.0000 + 12.6194 0.0000 + 17.5491 0.0000 + + + -91.8794 1.0000 + -91.4244 1.0000 + -91.2894 1.0000 + -65.7415 1.0000 + -30.0025 1.0000 + -29.9799 1.0000 + -29.9726 1.0000 + -0.4309 1.0000 + 3.4495 1.0000 + 4.4823 1.0000 + 4.9614 1.0000 + 5.1769 1.0000 + 8.1972 0.0000 + 9.2037 0.0000 + 10.3016 0.0000 + 10.5059 0.0000 + 14.3943 0.0000 + 15.2824 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7414 1.0000 + -30.0047 1.0000 + -29.9798 1.0000 + -29.9724 1.0000 + -0.3827 1.0000 + 3.4372 1.0000 + 4.4369 1.0000 + 4.9880 1.0000 + 5.1943 1.0000 + 7.9855 0.0733 + 9.2633 0.0000 + 10.3201 0.0000 + 10.6409 0.0000 + 14.3071 0.0000 + 15.7382 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7413 1.0000 + -30.0109 1.0000 + -29.9795 1.0000 + -29.9718 1.0000 + -0.2406 1.0000 + 3.3744 1.0000 + 4.3644 1.0000 + 5.0412 1.0000 + 5.2443 1.0000 + 7.5476 1.0000 + 9.4153 0.0000 + 10.0599 0.0000 + 11.2380 0.0000 + 14.8208 0.0000 + 16.0819 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7412 1.0000 + -30.0200 1.0000 + -29.9789 1.0000 + -29.9710 1.0000 + -0.0152 1.0000 + 3.2090 1.0000 + 4.3636 1.0000 + 5.0929 1.0000 + 5.3207 1.0000 + 7.0926 1.0000 + 9.5502 0.0000 + 9.7938 0.0000 + 11.8036 0.0000 + 13.5951 0.0000 + 14.9192 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7410 1.0000 + -30.0303 1.0000 + -29.9783 1.0000 + -29.9700 1.0000 + 0.2806 1.0000 + 2.9377 1.0000 + 4.4563 1.0000 + 5.1302 1.0000 + 5.4164 1.0000 + 6.6996 1.0000 + 9.3444 0.0000 + 9.9025 0.0000 + 12.0852 0.0000 + 13.4362 0.0000 + 15.8291 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7407 1.0000 + -30.0402 1.0000 + -29.9776 1.0000 + -29.9691 1.0000 + 0.6271 1.0000 + 2.6012 1.0000 + 4.5958 1.0000 + 5.1415 1.0000 + 5.5298 1.0000 + 6.3932 1.0000 + 9.1313 0.0000 + 10.0660 0.0000 + 11.8833 0.0000 + 13.3141 0.0000 + 15.1866 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7406 1.0000 + -30.0479 1.0000 + -29.9771 1.0000 + -29.9684 1.0000 + 1.0037 1.0000 + 2.2324 1.0000 + 4.7288 1.0000 + 5.1208 1.0000 + 5.6641 1.0000 + 6.1656 1.0000 + 9.0233 0.0000 + 10.1524 0.0000 + 11.6108 0.0000 + 13.1453 0.0000 + 15.2752 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2900 1.0000 + -65.7405 1.0000 + -30.0521 1.0000 + -29.9768 1.0000 + -29.9680 1.0000 + 1.3741 1.0000 + 1.8670 1.0000 + 4.8158 1.0000 + 5.0875 1.0000 + 5.8147 1.0000 + 5.9871 1.0000 + 8.9976 0.0000 + 10.1607 0.0000 + 11.4588 0.0000 + 13.0058 0.0000 + 15.0515 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7413 1.0000 + -30.0017 1.0000 + -29.9814 1.0000 + -29.9793 1.0000 + -0.2798 1.0000 + 3.3917 1.0000 + 4.4650 1.0000 + 5.0319 1.0000 + 5.1692 1.0000 + 7.6464 0.9996 + 9.3147 0.0000 + 10.0458 0.0000 + 11.2372 0.0000 + 14.4922 0.0000 + 15.3633 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7412 1.0000 + -30.0039 1.0000 + -29.9812 1.0000 + -29.9792 1.0000 + -0.2318 1.0000 + 3.4031 1.0000 + 4.4148 1.0000 + 5.0453 1.0000 + 5.1799 1.0000 + 7.4709 1.0000 + 9.3790 0.0000 + 10.2465 0.0000 + 11.0981 0.0000 + 14.1220 0.0000 + 16.8656 0.0000 + + + -91.8797 1.0000 + -91.4246 1.0000 + -91.2896 1.0000 + -65.7411 1.0000 + -30.0101 1.0000 + -29.9806 1.0000 + -29.9788 1.0000 + -0.0888 1.0000 + 3.4098 1.0000 + 4.3128 1.0000 + 5.0782 1.0000 + 5.2075 1.0000 + 7.0931 1.0000 + 9.5240 0.0000 + 10.5314 0.0000 + 10.9313 0.0000 + 13.8315 0.0000 + 14.9563 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7410 1.0000 + -30.0192 1.0000 + -29.9798 1.0000 + -29.9782 1.0000 + 0.1365 1.0000 + 3.3258 1.0000 + 4.2788 1.0000 + 5.1226 1.0000 + 5.2385 1.0000 + 6.6994 1.0000 + 9.6594 0.0000 + 10.2232 0.0000 + 11.3212 0.0000 + 13.9202 0.0000 + 16.2795 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7408 1.0000 + -30.0296 1.0000 + -29.9790 1.0000 + -29.9776 1.0000 + 0.4308 1.0000 + 3.0973 1.0000 + 4.3838 1.0000 + 5.1738 1.0000 + 5.2576 1.0000 + 6.3799 1.0000 + 9.6051 0.0000 + 9.9623 0.0000 + 11.5706 0.0000 + 13.6078 0.0000 + 14.8495 0.0000 + + + -91.8796 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7405 1.0000 + -30.0394 1.0000 + -29.9782 1.0000 + -29.9768 1.0000 + 0.7749 1.0000 + 2.7747 1.0000 + 4.5617 1.0000 + 5.1803 1.0000 + 5.3158 1.0000 + 6.1636 1.0000 + 9.3464 0.0000 + 9.8339 0.0000 + 11.6131 0.0000 + 13.9966 0.0000 + 14.7722 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7404 1.0000 + -30.0472 1.0000 + -29.9775 1.0000 + -29.9763 1.0000 + 1.1431 1.0000 + 2.4134 1.0000 + 4.7126 1.0000 + 5.1290 1.0000 + 5.4671 1.0000 + 6.0157 1.0000 + 9.1396 0.0000 + 9.6449 0.0000 + 11.6446 0.0000 + 14.7531 0.0000 + 45.4682 0.0000 + + + -91.8802 1.0000 + -91.4251 1.0000 + -91.2902 1.0000 + -65.7404 1.0000 + -30.0514 1.0000 + -29.9772 1.0000 + -29.9760 1.0000 + 1.4899 1.0000 + 2.0701 1.0000 + 4.7840 1.0000 + 5.0904 1.0000 + 5.6669 1.0000 + 5.8686 1.0000 + 9.0434 0.0000 + 9.4853 0.0000 + 11.6814 0.0000 + 13.7976 0.0000 + 15.2308 0.0000 + + + -91.8796 1.0000 + -91.4246 1.0000 + -91.2896 1.0000 + -65.7410 1.0000 + -30.0005 1.0000 + -29.9942 1.0000 + -29.9785 1.0000 + -0.0384 1.0000 + 3.2400 1.0000 + 4.4989 1.0000 + 5.1411 1.0000 + 5.1734 1.0000 + 7.1079 1.0000 + 9.3512 0.0000 + 9.8771 0.0000 + 11.9958 0.0000 + 13.6113 0.0000 + 21.7136 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7410 1.0000 + -30.0027 1.0000 + -29.9940 1.0000 + -29.9784 1.0000 + 0.0097 1.0000 + 3.2752 1.0000 + 4.4507 1.0000 + 5.1290 1.0000 + 5.1813 1.0000 + 6.9619 1.0000 + 9.4416 0.0000 + 10.0172 0.0000 + 11.7522 0.0000 + 13.6423 0.0000 + 14.9614 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7409 1.0000 + -30.0089 1.0000 + -29.9935 1.0000 + -29.9780 1.0000 + 0.1509 1.0000 + 3.3699 1.0000 + 4.3172 1.0000 + 5.1057 1.0000 + 5.2032 1.0000 + 6.6401 1.0000 + 9.5752 0.0000 + 10.3957 0.0000 + 11.2701 0.0000 + 13.5268 0.0000 + 14.8940 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7407 1.0000 + -30.0180 1.0000 + -29.9927 1.0000 + -29.9775 1.0000 + 0.3757 1.0000 + 3.4547 1.0000 + 4.1789 1.0000 + 5.0808 1.0000 + 5.2321 1.0000 + 6.3094 1.0000 + 9.5872 0.0000 + 10.6701 0.0000 + 10.9785 0.0000 + 13.3361 0.0000 + 16.3021 0.0000 + + + -91.8798 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7405 1.0000 + -30.0284 1.0000 + -29.9918 1.0000 + -29.9768 1.0000 + 0.6661 1.0000 + 3.3528 1.0000 + 4.2329 1.0000 + 5.0410 1.0000 + 5.2587 1.0000 + 6.0667 1.0000 + 9.4049 0.0000 + 10.2926 0.0000 + 11.3119 0.0000 + 13.8752 0.0000 + 38.4800 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7403 1.0000 + -30.0384 1.0000 + -29.9910 1.0000 + -29.9762 1.0000 + 1.0012 1.0000 + 3.0611 1.0000 + 4.4746 1.0000 + 4.9804 1.0000 + 5.2893 1.0000 + 5.9349 1.0000 + 9.1205 0.0000 + 9.8404 0.0000 + 11.5936 0.0000 + 13.6823 0.0000 + 15.1706 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7401 1.0000 + -30.0461 1.0000 + -29.9903 1.0000 + -29.9758 1.0000 + 1.3562 1.0000 + 2.7118 1.0000 + 4.6771 1.0000 + 4.9797 1.0000 + 5.3623 1.0000 + 5.8533 1.0000 + 8.8711 0.0000 + 9.4054 0.0000 + 11.8042 0.0000 + 14.1600 0.0000 + 14.8362 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7401 1.0000 + -30.0504 1.0000 + -29.9899 1.0000 + -29.9755 1.0000 + 1.6624 1.0000 + 2.4033 1.0000 + 4.7026 1.0000 + 5.0589 1.0000 + 5.5288 1.0000 + 5.7361 1.0000 + 8.7332 0.0000 + 9.1257 0.0000 + 11.9246 0.0000 + 14.4000 0.0000 + 14.8474 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7407 1.0000 + -30.0089 1.0000 + -29.9991 1.0000 + -29.9776 1.0000 + 0.2750 1.0000 + 2.9834 1.0000 + 4.6018 1.0000 + 5.1861 1.0000 + 5.2760 1.0000 + 6.6473 1.0000 + 9.2218 0.0000 + 9.9612 0.0000 + 12.7917 0.0000 + 14.6660 0.0000 + 37.0432 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7407 1.0000 + -30.0087 1.0000 + -30.0013 1.0000 + -29.9775 1.0000 + 0.3237 1.0000 + 3.0324 1.0000 + 4.5699 1.0000 + 5.1962 1.0000 + 5.2285 1.0000 + 6.5349 1.0000 + 9.3249 0.0000 + 10.0206 0.0000 + 12.0589 0.0000 + 13.6356 0.0000 + 16.3395 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7406 1.0000 + -30.0082 1.0000 + -30.0075 1.0000 + -29.9771 1.0000 + 0.4629 1.0000 + 3.1773 1.0000 + 4.4588 1.0000 + 5.1107 1.0000 + 5.2302 1.0000 + 6.2832 1.0000 + 9.4510 0.0000 + 10.2180 0.0000 + 11.5408 0.0000 + 13.5178 0.0000 + 14.9785 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7404 1.0000 + -30.0167 1.0000 + -30.0075 1.0000 + -29.9766 1.0000 + 0.6833 1.0000 + 3.4070 1.0000 + 4.2516 1.0000 + 4.9747 1.0000 + 5.2836 1.0000 + 6.0299 1.0000 + 9.3115 0.0000 + 10.5371 0.0000 + 11.2041 0.0000 + 13.5198 0.0000 + 16.1069 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7402 1.0000 + -30.0271 1.0000 + -30.0066 1.0000 + -29.9760 1.0000 + 0.9662 1.0000 + 3.6247 1.0000 + 4.0527 1.0000 + 4.8364 1.0000 + 5.3481 1.0000 + 5.8553 1.0000 + 8.9510 0.0000 + 10.5646 0.0000 + 11.1623 0.0000 + 13.2954 0.0000 + 15.4682 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7400 1.0000 + -30.0371 1.0000 + -30.0058 1.0000 + -29.9754 1.0000 + 1.2872 1.0000 + 3.4438 1.0000 + 4.2743 1.0000 + 4.7030 1.0000 + 5.4051 1.0000 + 5.7716 1.0000 + 8.5488 0.0000 + 10.0763 0.0000 + 11.4481 0.0000 + 13.4035 0.0000 + 15.3922 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7398 1.0000 + -30.0450 1.0000 + -30.0051 1.0000 + -29.9749 1.0000 + 1.6159 1.0000 + 3.1051 1.0000 + 4.5944 1.0000 + 4.6676 1.0000 + 5.4494 1.0000 + 5.7286 1.0000 + 8.2204 0.0000 + 9.5427 0.0000 + 11.6960 0.0000 + 13.7216 0.0000 + 15.3053 0.0000 + + + -91.8805 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7398 1.0000 + -30.0492 1.0000 + -30.0047 1.0000 + -29.9747 1.0000 + 1.8783 1.0000 + 2.8300 1.0000 + 4.5354 1.0000 + 4.9641 1.0000 + 5.5125 1.0000 + 5.6496 1.0000 + 8.0373 0.0144 + 9.1984 0.0000 + 11.8323 0.0000 + 13.9270 0.0000 + 15.3527 0.0000 + + + -91.8801 1.0000 + -91.4252 1.0000 + -91.2901 1.0000 + -65.7404 1.0000 + -30.0228 1.0000 + -29.9977 1.0000 + -29.9766 1.0000 + 0.6424 1.0000 + 2.6545 1.0000 + 4.7408 1.0000 + 5.1925 1.0000 + 5.4185 1.0000 + 6.2853 1.0000 + 9.1528 0.0000 + 10.1154 0.0000 + 12.2959 0.0000 + 12.6644 0.0000 + 15.1835 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7404 1.0000 + -30.0228 1.0000 + -30.0000 1.0000 + -29.9766 1.0000 + 0.6883 1.0000 + 2.7077 1.0000 + 4.7264 1.0000 + 5.2034 1.0000 + 5.3412 1.0000 + 6.2150 1.0000 + 9.2183 0.0000 + 10.0975 0.0000 + 11.8514 0.0000 + 13.2505 0.0000 + 15.4538 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7403 1.0000 + -30.0223 1.0000 + -30.0062 1.0000 + -29.9762 1.0000 + 0.8257 1.0000 + 2.8686 1.0000 + 4.6756 1.0000 + 5.1155 1.0000 + 5.2552 1.0000 + 6.0553 1.0000 + 9.2590 0.0000 + 10.0607 0.0000 + 11.5620 0.0000 + 14.3861 0.0000 + 15.3778 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7401 1.0000 + -30.0215 1.0000 + -30.0154 1.0000 + -29.9757 1.0000 + 1.0393 1.0000 + 3.1357 1.0000 + 4.5429 1.0000 + 4.8526 1.0000 + 5.3235 1.0000 + 5.8912 1.0000 + 8.9678 0.0000 + 10.1859 0.0000 + 11.4775 0.0000 + 13.5169 0.0000 + 15.2678 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7399 1.0000 + -30.0259 1.0000 + -30.0207 1.0000 + -29.9751 1.0000 + 1.3079 1.0000 + 3.4975 1.0000 + 4.2537 1.0000 + 4.6695 1.0000 + 5.4215 1.0000 + 5.7678 1.0000 + 8.4790 0.0000 + 10.3583 0.0000 + 11.2562 0.0000 + 13.7957 0.0000 + 15.4576 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2903 1.0000 + -65.7397 1.0000 + -30.0359 1.0000 + -30.0199 1.0000 + -29.9745 1.0000 + 1.6071 1.0000 + 3.8504 1.0000 + 3.9497 1.0000 + 4.5723 1.0000 + 5.5290 1.0000 + 5.6928 1.0000 + 7.9970 0.0531 + 10.1882 0.0000 + 11.0596 0.0000 + 13.6172 0.0000 + 15.4580 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7395 1.0000 + -30.0438 1.0000 + -30.0193 1.0000 + -29.9740 1.0000 + 1.9028 1.0000 + 3.5236 1.0000 + 4.2368 1.0000 + 4.6294 1.0000 + 5.6020 1.0000 + 5.6607 1.0000 + 7.6208 0.9999 + 9.6622 0.0000 + 11.1234 0.0000 + 13.9670 0.0000 + 15.5268 0.0000 + + + -91.8808 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7395 1.0000 + -30.0481 1.0000 + -30.0189 1.0000 + -29.9738 1.0000 + 2.1226 1.0000 + 3.2739 1.0000 + 4.2868 1.0000 + 4.8744 1.0000 + 5.6116 1.0000 + 5.6455 1.0000 + 7.4201 1.0000 + 9.2695 0.0000 + 11.1923 0.0000 + 14.0391 0.0000 + 15.3789 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7402 1.0000 + -30.0338 1.0000 + -29.9968 1.0000 + -29.9759 1.0000 + 1.0386 1.0000 + 2.2838 1.0000 + 4.8741 1.0000 + 5.1768 1.0000 + 5.5479 1.0000 + 6.0278 1.0000 + 9.2474 0.0000 + 10.2163 0.0000 + 11.7129 0.0000 + 12.5232 0.0000 + 15.0058 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7401 1.0000 + -30.0336 1.0000 + -29.9990 1.0000 + -29.9758 1.0000 + 1.0849 1.0000 + 2.3392 1.0000 + 4.8595 1.0000 + 5.1791 1.0000 + 5.4792 1.0000 + 5.9945 1.0000 + 9.2635 0.0000 + 10.0727 0.0000 + 11.5584 0.0000 + 12.9761 0.0000 + 14.9006 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7400 1.0000 + -30.0331 1.0000 + -30.0052 1.0000 + -29.9755 1.0000 + 1.2159 1.0000 + 2.5063 1.0000 + 4.8118 1.0000 + 5.1287 1.0000 + 5.3567 1.0000 + 5.9132 1.0000 + 9.1604 0.0000 + 9.8071 0.0000 + 11.5723 0.0000 + 13.7995 0.0000 + 14.5522 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7399 1.0000 + -30.0325 1.0000 + -30.0144 1.0000 + -29.9750 1.0000 + 1.4162 1.0000 + 2.7831 1.0000 + 4.7111 1.0000 + 4.9082 1.0000 + 5.3719 1.0000 + 5.8226 1.0000 + 8.6841 0.0000 + 9.8145 0.0000 + 11.6802 0.0000 + 13.7580 0.0000 + 15.0949 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7397 1.0000 + -30.0317 1.0000 + -30.0249 1.0000 + -29.9744 1.0000 + 1.6606 1.0000 + 3.1538 1.0000 + 4.4685 1.0000 + 4.7356 1.0000 + 5.4606 1.0000 + 5.7551 1.0000 + 8.0965 0.0013 + 9.9238 0.0000 + 11.4526 0.0000 + 13.4892 0.0000 + 15.4328 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7394 1.0000 + -30.0350 1.0000 + -30.0309 1.0000 + -29.9738 1.0000 + 1.9273 1.0000 + 3.5628 1.0000 + 4.1380 1.0000 + 4.6730 1.0000 + 5.5708 1.0000 + 5.7308 1.0000 + 7.5590 1.0000 + 9.9659 0.0000 + 10.8523 0.0000 + 14.1412 0.0000 + 15.3603 0.0000 + + + -91.8813 1.0000 + -91.4263 1.0000 + -91.2912 1.0000 + -65.7394 1.0000 + -30.0429 1.0000 + -30.0304 1.0000 + -29.9734 1.0000 + 2.1834 1.0000 + 3.8283 1.0000 + 3.8862 1.0000 + 4.7204 1.0000 + 5.6527 1.0000 + 5.7690 1.0000 + 7.1423 1.0000 + 9.7054 0.0000 + 10.4694 0.0000 + 14.5817 0.0000 + 17.9482 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2912 1.0000 + -65.7393 1.0000 + -30.0472 1.0000 + -30.0300 1.0000 + -29.9732 1.0000 + 2.3655 1.0000 + 3.6194 1.0000 + 4.0214 1.0000 + 4.8461 1.0000 + 5.7172 1.0000 + 5.7917 1.0000 + 6.9188 1.0000 + 9.3231 0.0000 + 10.4174 0.0000 + 14.4421 0.0000 + 15.8976 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7400 1.0000 + -30.0397 1.0000 + -29.9962 1.0000 + -29.9755 1.0000 + 1.4380 1.0000 + 1.9003 1.0000 + 4.9695 1.0000 + 5.1428 1.0000 + 5.6423 1.0000 + 5.8766 1.0000 + 9.4326 0.0000 + 10.2038 0.0000 + 11.3534 0.0000 + 12.4003 0.0000 + 15.1798 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7400 1.0000 + -30.0396 1.0000 + -29.9984 1.0000 + -29.9754 1.0000 + 1.4775 1.0000 + 1.9610 1.0000 + 4.9344 1.0000 + 5.1436 1.0000 + 5.6222 1.0000 + 5.8407 1.0000 + 9.4328 0.0000 + 9.9118 0.0000 + 11.4086 0.0000 + 12.7786 0.0000 + 14.7529 0.0000 + + + -91.8802 1.0000 + -91.4253 1.0000 + -91.2902 1.0000 + -65.7399 1.0000 + -30.0391 1.0000 + -30.0046 1.0000 + -29.9751 1.0000 + 1.5884 1.0000 + 2.1473 1.0000 + 4.8263 1.0000 + 5.1395 1.0000 + 5.5663 1.0000 + 5.7671 1.0000 + 9.1881 0.0000 + 9.5548 0.0000 + 11.6103 0.0000 + 13.5641 0.0000 + 14.7151 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2902 1.0000 + -65.7397 1.0000 + -30.0384 1.0000 + -30.0138 1.0000 + -29.9746 1.0000 + 1.7510 1.0000 + 2.4554 1.0000 + 4.6493 1.0000 + 5.1054 1.0000 + 5.5016 1.0000 + 5.7219 1.0000 + 8.5259 0.0000 + 9.5738 0.0000 + 11.7986 0.0000 + 14.0607 0.0000 + 14.5081 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2904 1.0000 + -65.7395 1.0000 + -30.0377 1.0000 + -30.0244 1.0000 + -29.9740 1.0000 + 1.9503 1.0000 + 2.8575 1.0000 + 4.4232 1.0000 + 5.0190 1.0000 + 5.4953 1.0000 + 5.7259 1.0000 + 7.8787 0.5228 + 9.6218 0.0000 + 11.5688 0.0000 + 13.6440 0.0000 + 15.2299 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7393 1.0000 + -30.0369 1.0000 + -30.0345 1.0000 + -29.9735 1.0000 + 2.1724 1.0000 + 3.2887 1.0000 + 4.1759 1.0000 + 4.9222 1.0000 + 5.5665 1.0000 + 5.7737 1.0000 + 7.3144 1.0000 + 9.6562 0.0000 + 10.8484 0.0000 + 13.8758 0.0000 + 15.6076 0.0000 + + + -91.8813 1.0000 + -91.4263 1.0000 + -91.2913 1.0000 + -65.7392 1.0000 + -30.0424 1.0000 + -30.0364 1.0000 + -29.9731 1.0000 + 2.3889 1.0000 + 3.6451 1.0000 + 3.9430 1.0000 + 4.8684 1.0000 + 5.6997 1.0000 + 5.8611 1.0000 + 6.8688 1.0000 + 9.6086 0.0000 + 10.1393 0.0000 + 15.1730 0.0000 + 16.3079 0.0000 + + + -91.8813 1.0000 + -91.4263 1.0000 + -91.2913 1.0000 + -65.7391 1.0000 + -30.0467 1.0000 + -30.0360 1.0000 + -29.9728 1.0000 + 2.5397 1.0000 + 3.7856 1.0000 + 3.8326 1.0000 + 4.8610 1.0000 + 5.8430 1.0000 + 5.9453 1.0000 + 6.5965 1.0000 + 9.3465 0.0000 + 9.8978 0.0000 + 15.1892 0.0000 + 16.2199 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2900 1.0000 + -65.7403 1.0000 + -30.0144 1.0000 + -29.9990 1.0000 + -29.9656 1.0000 + 0.0785 1.0000 + 2.7125 1.0000 + 4.5094 1.0000 + 4.6940 1.0000 + 4.9214 1.0000 + 8.5745 0.0000 + 10.1269 0.0000 + 10.5365 0.0000 + 10.8704 0.0000 + 13.9768 0.0000 + 14.6979 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7402 1.0000 + -30.0143 1.0000 + -30.0012 1.0000 + -29.9654 1.0000 + 0.1273 1.0000 + 2.6983 1.0000 + 4.4779 1.0000 + 4.7369 1.0000 + 4.9443 1.0000 + 8.3529 0.0000 + 10.1419 0.0000 + 10.4344 0.0000 + 11.1645 0.0000 + 13.6110 0.0000 + 14.5556 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7401 1.0000 + -30.0140 1.0000 + -30.0074 1.0000 + -29.9649 1.0000 + 0.2683 1.0000 + 2.6518 1.0000 + 4.4352 1.0000 + 4.8169 1.0000 + 5.0107 1.0000 + 7.8922 0.4469 + 10.1231 0.0000 + 10.2307 0.0000 + 11.8214 0.0000 + 13.2548 0.0000 + 14.5906 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7399 1.0000 + -30.0165 1.0000 + -30.0135 1.0000 + -29.9640 1.0000 + 0.4880 1.0000 + 2.5740 1.0000 + 4.4223 1.0000 + 4.8957 1.0000 + 5.1141 1.0000 + 7.4082 1.0000 + 9.8145 0.0000 + 10.2589 0.0000 + 12.5295 0.0000 + 12.7207 0.0000 + 14.5641 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7397 1.0000 + -30.0269 1.0000 + -30.0129 1.0000 + -29.9631 1.0000 + 0.7614 1.0000 + 2.4691 1.0000 + 4.4450 1.0000 + 4.9606 1.0000 + 5.2429 1.0000 + 6.9802 1.0000 + 9.4992 0.0000 + 10.2989 0.0000 + 12.2571 0.0000 + 12.7704 0.0000 + 14.6183 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7395 1.0000 + -30.0369 1.0000 + -30.0123 1.0000 + -29.9621 1.0000 + 1.0553 1.0000 + 2.3467 1.0000 + 4.4910 1.0000 + 5.0061 1.0000 + 5.3805 1.0000 + 6.6366 1.0000 + 9.2609 0.0000 + 10.3038 0.0000 + 11.8735 0.0000 + 12.5601 0.0000 + 15.5151 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7394 1.0000 + -30.0447 1.0000 + -30.0119 1.0000 + -29.9614 1.0000 + 1.3266 1.0000 + 2.2198 1.0000 + 4.5371 1.0000 + 5.0314 1.0000 + 5.5048 1.0000 + 6.3900 1.0000 + 9.1261 0.0000 + 10.2612 0.0000 + 11.5989 0.0000 + 12.2895 0.0000 + 15.2894 0.0000 + + + -91.8792 1.0000 + -91.4242 1.0000 + -91.2892 1.0000 + -65.7392 1.0000 + -30.0489 1.0000 + -30.0116 1.0000 + -29.9610 1.0000 + 1.5141 1.0000 + 2.1185 1.0000 + 4.5650 1.0000 + 5.0425 1.0000 + 5.5850 1.0000 + 6.2547 1.0000 + 9.0783 0.0000 + 10.2059 0.0000 + 11.4660 0.0000 + 12.1310 0.0000 + 14.9984 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7402 1.0000 + -30.0143 1.0000 + -29.9987 1.0000 + -29.9687 1.0000 + 0.1308 1.0000 + 2.7052 1.0000 + 4.5062 1.0000 + 4.7211 1.0000 + 4.9341 1.0000 + 8.2944 0.0000 + 10.1322 0.0000 + 10.7510 0.0000 + 10.8939 0.0000 + 14.0685 0.0000 + 19.2975 0.0000 + + + -91.8799 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7402 1.0000 + -30.0141 1.0000 + -30.0009 1.0000 + -29.9685 1.0000 + 0.1799 1.0000 + 2.6961 1.0000 + 4.4700 1.0000 + 4.7546 1.0000 + 4.9662 1.0000 + 8.0964 0.0013 + 10.1465 0.0000 + 10.7223 0.0000 + 11.0608 0.0000 + 13.4843 0.0000 + 14.7098 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7400 1.0000 + -30.0138 1.0000 + -30.0071 1.0000 + -29.9680 1.0000 + 0.3214 1.0000 + 2.6647 1.0000 + 4.4164 1.0000 + 4.8132 1.0000 + 5.0527 1.0000 + 7.6707 0.9986 + 10.1672 0.0000 + 10.4384 0.0000 + 11.6127 0.0000 + 13.1255 0.0000 + 15.0675 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7399 1.0000 + -30.0163 1.0000 + -30.0133 1.0000 + -29.9671 1.0000 + 0.5403 1.0000 + 2.6055 1.0000 + 4.3962 1.0000 + 4.8703 1.0000 + 5.1699 1.0000 + 7.2169 1.0000 + 9.9996 0.0000 + 10.2485 0.0000 + 11.9915 0.0000 + 13.4963 0.0000 + 14.9307 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7397 1.0000 + -30.0266 1.0000 + -30.0127 1.0000 + -29.9662 1.0000 + 0.8138 1.0000 + 2.5179 1.0000 + 4.4217 1.0000 + 4.9184 1.0000 + 5.2999 1.0000 + 6.8210 1.0000 + 9.6472 0.0000 + 10.2064 0.0000 + 11.8412 0.0000 + 13.2636 0.0000 + 14.4602 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7395 1.0000 + -30.0366 1.0000 + -30.0121 1.0000 + -29.9653 1.0000 + 1.1061 1.0000 + 2.4089 1.0000 + 4.4770 1.0000 + 4.9499 1.0000 + 5.4309 1.0000 + 6.5164 1.0000 + 9.3564 0.0000 + 10.0920 0.0000 + 11.6293 0.0000 + 13.0657 0.0000 + 15.1621 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7393 1.0000 + -30.0444 1.0000 + -30.0117 1.0000 + -29.9646 1.0000 + 1.3737 1.0000 + 2.2928 1.0000 + 4.5311 1.0000 + 4.9651 1.0000 + 5.5497 1.0000 + 6.3103 1.0000 + 9.1728 0.0000 + 9.9154 0.0000 + 11.5234 0.0000 + 12.7770 0.0000 + 15.3120 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7392 1.0000 + -30.0487 1.0000 + -30.0114 1.0000 + -29.9642 1.0000 + 1.5535 1.0000 + 2.2004 1.0000 + 4.5595 1.0000 + 4.9718 1.0000 + 5.6296 1.0000 + 6.2011 1.0000 + 9.0958 0.0000 + 9.7761 0.0000 + 11.4975 0.0000 + 12.5932 0.0000 + 15.0907 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7400 1.0000 + -30.0138 1.0000 + -29.9979 1.0000 + -29.9775 1.0000 + 0.2825 1.0000 + 2.6761 1.0000 + 4.5064 1.0000 + 4.8000 1.0000 + 4.9688 1.0000 + 7.7564 0.9630 + 10.1137 0.0000 + 10.4867 0.0000 + 11.6479 0.0000 + 13.3919 0.0000 + 14.4508 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7400 1.0000 + -30.0137 1.0000 + -30.0001 1.0000 + -29.9773 1.0000 + 0.3313 1.0000 + 2.6826 1.0000 + 4.4604 1.0000 + 4.8061 1.0000 + 5.0256 1.0000 + 7.5867 1.0000 + 10.1283 0.0000 + 10.6729 0.0000 + 11.4680 0.0000 + 13.1394 0.0000 + 14.3328 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2897 1.0000 + -65.7398 1.0000 + -30.0133 1.0000 + -30.0063 1.0000 + -29.9768 1.0000 + 0.4736 1.0000 + 2.6942 1.0000 + 4.3753 1.0000 + 4.8323 1.0000 + 5.1415 1.0000 + 7.2084 1.0000 + 10.1072 0.0000 + 10.9314 0.0000 + 11.2329 0.0000 + 12.9608 0.0000 + 14.6853 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2900 1.0000 + -65.7397 1.0000 + -30.0155 1.0000 + -30.0128 1.0000 + -29.9760 1.0000 + 0.6917 1.0000 + 2.6939 1.0000 + 4.3211 1.0000 + 4.8693 1.0000 + 5.2665 1.0000 + 6.8005 1.0000 + 9.9630 0.0000 + 10.5675 0.0000 + 11.4806 0.0000 + 13.0652 0.0000 + 14.4338 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7395 1.0000 + -30.0259 1.0000 + -30.0122 1.0000 + -29.9751 1.0000 + 0.9628 1.0000 + 2.6633 1.0000 + 4.3343 1.0000 + 4.8939 1.0000 + 5.3859 1.0000 + 6.4620 1.0000 + 9.6578 0.0000 + 10.1908 0.0000 + 11.5257 0.0000 + 13.6164 0.0000 + 15.5505 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7393 1.0000 + -30.0359 1.0000 + -30.0116 1.0000 + -29.9742 1.0000 + 1.2487 1.0000 + 2.5974 1.0000 + 4.4087 1.0000 + 4.8823 1.0000 + 5.5018 1.0000 + 6.2380 1.0000 + 9.3183 0.0000 + 9.7979 0.0000 + 11.5299 0.0000 + 13.8800 0.0000 + 14.6587 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7391 1.0000 + -30.0437 1.0000 + -30.0112 1.0000 + -29.9735 1.0000 + 1.5051 1.0000 + 2.5119 1.0000 + 4.4950 1.0000 + 4.8424 1.0000 + 5.6205 1.0000 + 6.1187 1.0000 + 9.0647 0.0000 + 9.4200 0.0000 + 11.5701 0.0000 + 13.6103 0.0000 + 15.8073 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7390 1.0000 + -30.0480 1.0000 + -30.0110 1.0000 + -29.9731 1.0000 + 1.6705 1.0000 + 2.4419 1.0000 + 4.5400 1.0000 + 4.8182 1.0000 + 5.7164 1.0000 + 6.0601 1.0000 + 8.9498 0.0000 + 9.1654 0.0000 + 11.6090 0.0000 + 13.4604 0.0000 + 15.4612 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7397 1.0000 + -30.0130 1.0000 + -29.9967 1.0000 + -29.9905 1.0000 + 0.5171 1.0000 + 2.6203 1.0000 + 4.5293 1.0000 + 4.9234 1.0000 + 5.0169 1.0000 + 7.2171 1.0000 + 9.9208 0.0000 + 10.3388 0.0000 + 12.4204 0.0000 + 12.7407 0.0000 + 14.2892 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7397 1.0000 + -30.0129 1.0000 + -29.9989 1.0000 + -29.9903 1.0000 + 0.5656 1.0000 + 2.6459 1.0000 + 4.4784 1.0000 + 4.8801 1.0000 + 5.1125 1.0000 + 7.0689 1.0000 + 9.9752 0.0000 + 10.4280 0.0000 + 12.5187 0.0000 + 32.9739 0.0000 + 35.7387 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7396 1.0000 + -30.0125 1.0000 + -30.0051 1.0000 + -29.9898 1.0000 + 0.7061 1.0000 + 2.7176 1.0000 + 4.3568 1.0000 + 4.8822 1.0000 + 5.2415 1.0000 + 6.7298 1.0000 + 9.8871 0.0000 + 10.7646 0.0000 + 11.4466 0.0000 + 14.5915 0.0000 + 38.5493 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2900 1.0000 + -65.7394 1.0000 + -30.0143 1.0000 + -30.0120 1.0000 + -29.9890 1.0000 + 0.9230 1.0000 + 2.8144 1.0000 + 4.2395 1.0000 + 4.9255 1.0000 + 5.3419 1.0000 + 6.3667 1.0000 + 9.5538 0.0000 + 11.0084 0.0000 + 11.1693 0.0000 + 13.0107 0.0000 + 14.8133 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7392 1.0000 + -30.0248 1.0000 + -30.0115 1.0000 + -29.9881 1.0000 + 1.1884 1.0000 + 2.8932 1.0000 + 4.1953 1.0000 + 4.9555 1.0000 + 5.3985 1.0000 + 6.1037 1.0000 + 9.0980 0.0000 + 10.5664 0.0000 + 11.4010 0.0000 + 13.2814 0.0000 + 14.7039 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7390 1.0000 + -30.0349 1.0000 + -30.0110 1.0000 + -29.9873 1.0000 + 1.4648 1.0000 + 2.9108 1.0000 + 4.2604 1.0000 + 4.8930 1.0000 + 5.4670 1.0000 + 5.9927 1.0000 + 8.6547 0.0000 + 10.0335 0.0000 + 11.5522 0.0000 + 13.8640 0.0000 + 14.7888 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7389 1.0000 + -30.0427 1.0000 + -30.0105 1.0000 + -29.9866 1.0000 + 1.7087 1.0000 + 2.8704 1.0000 + 4.3914 1.0000 + 4.7599 1.0000 + 5.6061 1.0000 + 5.9584 1.0000 + 8.3087 0.0000 + 9.5375 0.0000 + 11.6648 0.0000 + 14.4457 0.0000 + 14.7936 0.0000 + + + -91.8810 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7388 1.0000 + -30.0470 1.0000 + -30.0104 1.0000 + -29.9863 1.0000 + 1.8594 1.0000 + 2.8218 1.0000 + 4.4916 1.0000 + 4.6640 1.0000 + 5.7708 1.0000 + 5.9044 1.0000 + 8.1176 0.0004 + 9.2281 0.0000 + 11.7299 0.0000 + 14.3458 0.0000 + 15.1540 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7395 1.0000 + -30.0121 1.0000 + -30.0053 1.0000 + -29.9953 1.0000 + 0.8079 1.0000 + 2.5334 1.0000 + 4.5838 1.0000 + 5.0666 1.0000 + 5.0783 1.0000 + 6.7500 1.0000 + 9.6333 0.0000 + 10.3108 0.0000 + 12.2505 0.0000 + 12.6826 0.0000 + 14.7554 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7394 1.0000 + -30.0120 1.0000 + -30.0051 1.0000 + -29.9975 1.0000 + 0.8563 1.0000 + 2.5778 1.0000 + 4.5415 1.0000 + 4.9542 1.0000 + 5.2219 1.0000 + 6.6261 1.0000 + 9.6800 0.0000 + 10.3030 0.0000 + 11.8282 0.0000 + 13.2292 0.0000 + 14.7293 0.0000 + + + -91.8806 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7393 1.0000 + -30.0117 1.0000 + -30.0046 1.0000 + -30.0037 1.0000 + 0.9944 1.0000 + 2.7079 1.0000 + 4.4058 1.0000 + 4.9318 1.0000 + 5.3400 1.0000 + 6.3377 1.0000 + 9.5130 0.0000 + 10.4672 0.0000 + 11.4998 0.0000 + 13.8778 0.0000 + 18.0925 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7391 1.0000 + -30.0130 1.0000 + -30.0112 1.0000 + -30.0039 1.0000 + 1.2055 1.0000 + 2.9156 1.0000 + 4.2276 1.0000 + 4.9929 1.0000 + 5.3616 1.0000 + 6.0549 1.0000 + 9.0232 0.0000 + 10.8076 0.0000 + 11.3166 0.0000 + 13.1705 0.0000 + 14.8540 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7389 1.0000 + -30.0235 1.0000 + -30.0107 1.0000 + -30.0030 1.0000 + 1.4620 1.0000 + 3.1623 1.0000 + 4.0828 1.0000 + 5.0864 1.0000 + 5.2214 1.0000 + 5.9363 1.0000 + 8.4563 0.0000 + 10.8355 0.0000 + 11.2520 0.0000 + 13.1419 0.0000 + 15.5800 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7387 1.0000 + -30.0336 1.0000 + -30.0102 1.0000 + -30.0022 1.0000 + 1.7297 1.0000 + 3.3337 1.0000 + 4.0790 1.0000 + 4.9123 1.0000 + 5.2921 1.0000 + 5.9385 1.0000 + 7.9391 0.2131 + 10.2850 0.0000 + 11.4643 0.0000 + 13.4225 0.0000 + 15.4710 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7386 1.0000 + -30.0415 1.0000 + -30.0098 1.0000 + -30.0016 1.0000 + 1.9664 1.0000 + 3.3331 1.0000 + 4.2564 1.0000 + 4.6894 1.0000 + 5.4784 1.0000 + 5.9482 1.0000 + 7.5447 1.0000 + 9.6945 0.0000 + 11.6252 0.0000 + 13.7684 0.0000 + 15.1176 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7385 1.0000 + -30.0458 1.0000 + -30.0096 1.0000 + -30.0012 1.0000 + 2.1159 1.0000 + 3.2777 1.0000 + 4.4136 1.0000 + 4.5730 1.0000 + 5.6529 1.0000 + 5.9143 1.0000 + 7.3340 1.0000 + 9.3087 0.0000 + 11.7152 0.0000 + 14.2992 0.0000 + 15.1018 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7391 1.0000 + -30.0194 1.0000 + -30.0113 1.0000 + -29.9940 1.0000 + 1.1188 1.0000 + 2.4225 1.0000 + 4.6599 1.0000 + 5.1059 1.0000 + 5.2458 1.0000 + 6.3781 1.0000 + 9.4462 0.0000 + 10.2515 0.0000 + 11.8462 0.0000 + 12.3849 0.0000 + 15.2872 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7391 1.0000 + -30.0192 1.0000 + -30.0112 1.0000 + -29.9962 1.0000 + 1.1663 1.0000 + 2.4798 1.0000 + 4.6338 1.0000 + 5.0065 1.0000 + 5.3465 1.0000 + 6.2884 1.0000 + 9.4413 0.0000 + 10.1362 0.0000 + 11.5983 0.0000 + 12.9221 0.0000 + 14.9830 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7390 1.0000 + -30.0187 1.0000 + -30.0108 1.0000 + -30.0025 1.0000 + 1.2998 1.0000 + 2.6535 1.0000 + 4.5224 1.0000 + 4.9355 1.0000 + 5.4403 1.0000 + 6.0847 1.0000 + 9.1320 0.0000 + 10.1355 0.0000 + 11.4935 0.0000 + 14.1593 0.0000 + 15.0031 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7388 1.0000 + -30.0181 1.0000 + -30.0118 1.0000 + -30.0103 1.0000 + 1.5018 1.0000 + 2.9434 1.0000 + 4.3332 1.0000 + 4.9416 1.0000 + 5.4009 1.0000 + 5.9358 1.0000 + 8.5164 0.0000 + 10.3690 0.0000 + 11.4796 0.0000 + 13.6233 0.0000 + 15.4168 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7386 1.0000 + -30.0224 1.0000 + -30.0173 1.0000 + -30.0098 1.0000 + 1.7486 1.0000 + 3.3382 1.0000 + 4.1257 1.0000 + 4.9091 1.0000 + 5.2805 1.0000 + 5.9294 1.0000 + 7.8705 0.5687 + 10.5822 0.0000 + 11.3190 0.0000 + 14.4746 0.0000 + 15.4084 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7384 1.0000 + -30.0325 1.0000 + -30.0165 1.0000 + -30.0094 1.0000 + 2.0137 1.0000 + 3.7924 1.0000 + 3.9366 1.0000 + 4.7182 1.0000 + 5.3253 1.0000 + 5.9653 1.0000 + 7.2969 1.0000 + 10.3874 0.0000 + 11.1648 0.0000 + 13.7918 0.0000 + 15.7649 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7383 1.0000 + -30.0404 1.0000 + -30.0159 1.0000 + -30.0090 1.0000 + 2.2614 1.0000 + 3.7478 1.0000 + 4.2324 1.0000 + 4.5462 1.0000 + 5.4530 1.0000 + 5.9817 1.0000 + 6.8661 1.0000 + 9.8164 0.0000 + 11.2354 0.0000 + 13.3824 0.0000 + 15.4946 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7382 1.0000 + -30.0447 1.0000 + -30.0156 1.0000 + -30.0087 1.0000 + 2.4276 1.0000 + 3.6308 1.0000 + 4.3095 1.0000 + 4.6704 1.0000 + 5.5414 1.0000 + 5.9604 1.0000 + 6.6554 1.0000 + 9.3847 0.0000 + 11.2998 0.0000 + 13.4998 0.0000 + 15.5406 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7389 1.0000 + -30.0304 1.0000 + -30.0107 1.0000 + -29.9930 1.0000 + 1.4059 1.0000 + 2.2991 1.0000 + 4.7303 1.0000 + 5.1280 1.0000 + 5.4014 1.0000 + 6.1085 1.0000 + 9.4200 0.0000 + 10.1068 0.0000 + 11.5735 0.0000 + 12.0510 0.0000 + 15.2640 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7389 1.0000 + -30.0302 1.0000 + -30.0105 1.0000 + -29.9952 1.0000 + 1.4496 1.0000 + 2.3666 1.0000 + 4.7143 1.0000 + 5.0343 1.0000 + 5.4738 1.0000 + 6.0596 1.0000 + 9.3470 0.0000 + 9.8894 0.0000 + 11.4911 0.0000 + 12.5501 0.0000 + 15.0042 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7387 1.0000 + -30.0298 1.0000 + -30.0102 1.0000 + -30.0014 1.0000 + 1.5741 1.0000 + 2.5692 1.0000 + 4.6449 1.0000 + 4.8922 1.0000 + 5.5587 1.0000 + 5.9560 1.0000 + 8.8420 0.0000 + 9.8198 0.0000 + 11.5326 0.0000 + 13.4548 0.0000 + 15.3070 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2903 1.0000 + -65.7385 1.0000 + -30.0291 1.0000 + -30.0108 1.0000 + -30.0097 1.0000 + 1.7645 1.0000 + 2.9023 1.0000 + 4.5006 1.0000 + 4.7818 1.0000 + 5.5503 1.0000 + 5.9099 1.0000 + 8.1185 0.0004 + 9.9431 0.0000 + 11.5982 0.0000 + 14.1559 0.0000 + 15.5155 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7383 1.0000 + -30.0283 1.0000 + -30.0214 1.0000 + -30.0092 1.0000 + 2.0055 1.0000 + 3.3368 1.0000 + 4.3451 1.0000 + 4.6481 1.0000 + 5.4981 1.0000 + 5.9423 1.0000 + 7.4143 1.0000 + 10.0772 0.0000 + 11.5013 0.0000 + 14.0698 0.0000 + 15.1813 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7382 1.0000 + -30.0316 1.0000 + -30.0276 1.0000 + -30.0088 1.0000 + 2.2811 1.0000 + 3.7459 1.0000 + 4.2885 1.0000 + 4.4782 1.0000 + 5.5123 1.0000 + 5.9815 1.0000 + 6.7976 1.0000 + 10.1223 0.0000 + 10.9975 0.0000 + 13.3162 0.0000 + 35.4508 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7380 1.0000 + -30.0395 1.0000 + -30.0270 1.0000 + -30.0084 1.0000 + 2.5605 1.0000 + 3.8201 1.0000 + 4.2232 1.0000 + 4.6720 1.0000 + 5.5887 1.0000 + 5.9853 1.0000 + 6.3304 1.0000 + 9.8542 0.0000 + 10.6312 0.0000 + 13.3008 0.0000 + 15.9780 0.0000 + + + -91.8815 1.0000 + -91.4265 1.0000 + -91.2915 1.0000 + -65.7380 1.0000 + -30.0439 1.0000 + -30.0268 1.0000 + -30.0082 1.0000 + 2.7690 1.0000 + 3.7318 1.0000 + 4.1082 1.0000 + 5.0768 1.0000 + 5.5474 1.0000 + 5.9652 1.0000 + 6.1318 1.0000 + 9.4421 0.0000 + 10.5773 0.0000 + 13.3598 0.0000 + 15.6239 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7388 1.0000 + -30.0364 1.0000 + -30.0103 1.0000 + -29.9924 1.0000 + 1.6041 1.0000 + 2.1949 1.0000 + 4.7707 1.0000 + 5.1368 1.0000 + 5.5104 1.0000 + 5.9515 1.0000 + 9.5274 0.0000 + 9.9063 0.0000 + 11.4475 0.0000 + 11.8572 0.0000 + 14.7311 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7387 1.0000 + -30.0362 1.0000 + -30.0101 1.0000 + -29.9946 1.0000 + 1.6419 1.0000 + 2.2709 1.0000 + 4.7507 1.0000 + 5.0499 1.0000 + 5.5743 1.0000 + 5.9294 1.0000 + 9.4032 0.0000 + 9.6388 0.0000 + 11.4753 0.0000 + 12.3145 0.0000 + 15.0586 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7386 1.0000 + -30.0358 1.0000 + -30.0099 1.0000 + -30.0009 1.0000 + 1.7525 1.0000 + 2.4947 1.0000 + 4.6872 1.0000 + 4.8807 1.0000 + 5.6780 1.0000 + 5.8786 1.0000 + 8.6877 0.0000 + 9.6263 0.0000 + 11.5761 0.0000 + 13.1883 0.0000 + 15.0368 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2909 1.0000 + -65.7384 1.0000 + -30.0351 1.0000 + -30.0103 1.0000 + -30.0094 1.0000 + 1.9301 1.0000 + 2.8492 1.0000 + 4.5787 1.0000 + 4.7121 1.0000 + 5.7281 1.0000 + 5.8578 1.0000 + 7.8952 0.4304 + 9.6755 0.0000 + 11.6667 0.0000 + 14.3103 0.0000 + 38.9176 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7382 1.0000 + -30.0344 1.0000 + -30.0209 1.0000 + -30.0089 1.0000 + 2.1704 1.0000 + 3.2839 1.0000 + 4.4368 1.0000 + 4.5966 1.0000 + 5.6971 1.0000 + 5.9055 1.0000 + 7.1618 1.0000 + 9.7305 0.0000 + 11.5519 0.0000 + 13.7092 0.0000 + 15.1518 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7380 1.0000 + -30.0336 1.0000 + -30.0310 1.0000 + -30.0084 1.0000 + 2.4625 1.0000 + 3.6552 1.0000 + 4.2572 1.0000 + 4.6667 1.0000 + 5.6659 1.0000 + 5.9462 1.0000 + 6.5416 1.0000 + 9.7701 0.0000 + 11.0159 0.0000 + 13.7528 0.0000 + 15.5596 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7379 1.0000 + -30.0390 1.0000 + -30.0331 1.0000 + -30.0080 1.0000 + 2.7831 1.0000 + 3.7889 1.0000 + 4.0361 1.0000 + 5.0350 1.0000 + 5.6638 1.0000 + 5.9246 1.0000 + 6.1048 1.0000 + 9.7327 0.0000 + 10.2984 0.0000 + 13.3147 0.0000 + 15.4211 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2912 1.0000 + -65.7378 1.0000 + -30.0434 1.0000 + -30.0328 1.0000 + -30.0078 1.0000 + 3.0626 1.0000 + 3.7463 1.0000 + 3.8683 1.0000 + 5.4341 1.0000 + 5.6823 1.0000 + 5.7756 1.0000 + 5.9556 1.0000 + 9.4675 0.0000 + 10.0217 0.0000 + 13.3491 0.0000 + 16.1206 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7397 1.0000 + -30.0332 1.0000 + -29.9970 1.0000 + -29.9635 1.0000 + 0.5736 1.0000 + 2.1119 1.0000 + 4.5165 1.0000 + 4.5676 1.0000 + 4.7863 1.0000 + 8.6168 0.0000 + 10.8092 0.0000 + 11.1222 0.0000 + 11.2007 0.0000 + 14.0197 0.0000 + 39.2698 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7395 1.0000 + -30.0330 1.0000 + -29.9991 1.0000 + -29.9633 1.0000 + 0.6291 1.0000 + 2.0977 1.0000 + 4.5093 1.0000 + 4.5944 1.0000 + 4.8096 1.0000 + 8.4094 0.0000 + 10.7035 0.0000 + 11.1656 0.0000 + 11.6529 0.0000 + 14.1405 0.0000 + 41.5789 0.0000 + + + -91.8796 1.0000 + -91.4247 1.0000 + -91.2896 1.0000 + -65.7394 1.0000 + -30.0326 1.0000 + -30.0053 1.0000 + -29.9627 1.0000 + 0.7865 1.0000 + 2.0532 1.0000 + 4.5078 1.0000 + 4.6507 1.0000 + 4.8773 1.0000 + 7.9670 0.1168 + 10.4342 0.0000 + 11.1229 0.0000 + 12.2041 0.0000 + 12.2648 0.0000 + 14.3078 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7392 1.0000 + -30.0322 1.0000 + -30.0144 1.0000 + -29.9619 1.0000 + 1.0275 1.0000 + 1.9962 1.0000 + 4.5159 1.0000 + 4.7211 1.0000 + 4.9818 1.0000 + 7.4959 1.0000 + 10.0943 0.0000 + 11.0206 0.0000 + 11.8767 0.0000 + 13.0219 0.0000 + 14.6524 0.0000 + + + -91.8795 1.0000 + -91.4245 1.0000 + -91.2895 1.0000 + -65.7390 1.0000 + -30.0316 1.0000 + -30.0249 1.0000 + -29.9609 1.0000 + 1.3090 1.0000 + 1.9542 1.0000 + 4.5205 1.0000 + 4.7985 1.0000 + 5.1102 1.0000 + 7.0804 1.0000 + 9.7491 0.0000 + 10.7814 0.0000 + 12.7825 0.0000 + 14.2666 0.0000 + 40.5060 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7388 1.0000 + -30.0349 1.0000 + -30.0311 1.0000 + -29.9600 1.0000 + 1.5312 1.0000 + 1.9991 1.0000 + 4.5052 1.0000 + 4.8754 1.0000 + 5.2431 1.0000 + 6.7527 1.0000 + 9.4493 0.0000 + 10.4582 0.0000 + 11.6293 0.0000 + 12.3813 0.0000 + 15.5445 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7387 1.0000 + -30.0428 1.0000 + -30.0307 1.0000 + -29.9593 1.0000 + 1.5968 1.0000 + 2.1802 1.0000 + 4.4669 1.0000 + 4.9394 1.0000 + 5.3556 1.0000 + 6.5274 1.0000 + 9.2375 0.0000 + 10.2067 0.0000 + 12.0084 0.0000 + 14.2385 0.0000 + 36.2448 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2901 1.0000 + -65.7386 1.0000 + -30.0470 1.0000 + -30.0305 1.0000 + -29.9589 1.0000 + 1.5982 1.0000 + 2.3352 1.0000 + 4.4290 1.0000 + 4.9767 1.0000 + 5.4211 1.0000 + 6.4124 1.0000 + 9.1302 0.0000 + 10.0506 0.0000 + 11.6269 0.0000 + 11.8418 0.0000 + 15.0676 0.0000 + + + -91.8800 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7395 1.0000 + -30.0330 1.0000 + -29.9966 1.0000 + -29.9665 1.0000 + 0.6330 1.0000 + 2.1018 1.0000 + 4.5271 1.0000 + 4.5956 1.0000 + 4.7951 1.0000 + 8.3518 0.0000 + 11.1089 0.0000 + 11.1684 0.0000 + 13.7806 0.0000 + 14.1363 0.0000 + 19.9386 0.0000 + + + -91.8801 1.0000 + -91.4251 1.0000 + -91.2900 1.0000 + -65.7395 1.0000 + -30.0328 1.0000 + -29.9988 1.0000 + -29.9664 1.0000 + 0.6878 1.0000 + 2.0898 1.0000 + 4.5140 1.0000 + 4.6007 1.0000 + 4.8434 1.0000 + 8.1649 0.0000 + 10.9818 0.0000 + 11.1274 0.0000 + 11.4259 0.0000 + 13.4427 0.0000 + 14.6883 0.0000 + + + -91.8794 1.0000 + -91.4244 1.0000 + -91.2894 1.0000 + -65.7393 1.0000 + -30.0325 1.0000 + -30.0049 1.0000 + -29.9658 1.0000 + 0.8465 1.0000 + 2.0591 1.0000 + 4.4969 1.0000 + 4.6223 1.0000 + 4.9548 1.0000 + 7.7541 0.9656 + 10.6858 0.0000 + 11.0717 0.0000 + 11.8125 0.0000 + 12.3245 0.0000 + 14.7406 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2898 1.0000 + -65.7392 1.0000 + -30.0320 1.0000 + -30.0142 1.0000 + -29.9650 1.0000 + 1.0875 1.0000 + 2.0159 1.0000 + 4.4997 1.0000 + 4.6561 1.0000 + 5.0929 1.0000 + 7.3100 1.0000 + 10.3059 0.0000 + 10.8388 0.0000 + 11.7195 0.0000 + 13.5031 0.0000 + 14.7149 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2896 1.0000 + -65.7389 1.0000 + -30.0315 1.0000 + -30.0246 1.0000 + -29.9641 1.0000 + 1.3668 1.0000 + 1.9926 1.0000 + 4.5154 1.0000 + 4.6963 1.0000 + 5.2390 1.0000 + 6.9228 1.0000 + 9.9077 0.0000 + 10.4464 0.0000 + 11.5965 0.0000 + 13.3203 0.0000 + 14.3775 0.0000 + + + -91.8799 1.0000 + -91.4249 1.0000 + -91.2899 1.0000 + -65.7388 1.0000 + -30.0347 1.0000 + -30.0310 1.0000 + -29.9632 1.0000 + 1.5777 1.0000 + 2.0640 1.0000 + 4.5124 1.0000 + 4.7455 1.0000 + 5.3763 1.0000 + 6.6315 1.0000 + 9.5524 0.0000 + 10.0473 0.0000 + 12.1279 0.0000 + 14.4175 0.0000 + 15.1742 0.0000 + + + -91.8801 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7386 1.0000 + -30.0425 1.0000 + -30.0306 1.0000 + -29.9625 1.0000 + 1.6379 1.0000 + 2.2630 1.0000 + 4.4722 1.0000 + 4.7995 1.0000 + 5.4863 1.0000 + 6.4480 1.0000 + 9.2884 0.0000 + 9.7273 0.0000 + 11.6147 0.0000 + 12.5272 0.0000 + 15.4126 0.0000 + + + -91.8798 1.0000 + -91.4248 1.0000 + -91.2898 1.0000 + -65.7385 1.0000 + -30.0468 1.0000 + -30.0303 1.0000 + -29.9621 1.0000 + 1.6405 1.0000 + 2.4253 1.0000 + 4.4262 1.0000 + 4.8365 1.0000 + 5.5489 1.0000 + 6.3631 1.0000 + 9.1487 0.0000 + 9.5497 0.0000 + 11.6341 0.0000 + 12.3538 0.0000 + 15.2479 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7394 1.0000 + -30.0325 1.0000 + -29.9959 1.0000 + -29.9755 1.0000 + 0.8009 1.0000 + 2.0701 1.0000 + 4.5572 1.0000 + 4.6768 1.0000 + 4.8227 1.0000 + 7.8284 0.7789 + 10.7722 0.0000 + 11.2548 0.0000 + 12.1273 0.0000 + 13.8872 0.0000 + 19.3208 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7393 1.0000 + -30.0324 1.0000 + -29.9980 1.0000 + -29.9752 1.0000 + 0.8570 1.0000 + 2.0712 1.0000 + 4.5273 1.0000 + 4.6328 1.0000 + 4.9304 1.0000 + 7.6670 0.9989 + 10.9814 0.0000 + 11.0519 0.0000 + 11.6948 0.0000 + 14.0784 0.0000 + 42.2456 0.0000 + + + -91.8797 1.0000 + -91.4247 1.0000 + -91.2896 1.0000 + -65.7391 1.0000 + -30.0320 1.0000 + -30.0042 1.0000 + -29.9747 1.0000 + 1.0176 1.0000 + 2.0713 1.0000 + 4.4474 1.0000 + 4.6405 1.0000 + 5.1016 1.0000 + 7.2990 1.0000 + 10.7764 0.0000 + 11.1820 0.0000 + 11.3580 0.0000 + 12.3963 0.0000 + 14.3579 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2899 1.0000 + -65.7390 1.0000 + -30.0316 1.0000 + -30.0134 1.0000 + -29.9739 1.0000 + 1.2586 1.0000 + 2.0756 1.0000 + 4.3961 1.0000 + 4.6691 1.0000 + 5.2775 1.0000 + 6.8932 1.0000 + 10.2551 0.0000 + 10.7808 0.0000 + 11.4976 0.0000 + 12.8877 0.0000 + 15.8667 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7388 1.0000 + -30.0310 1.0000 + -30.0239 1.0000 + -29.9730 1.0000 + 1.5255 1.0000 + 2.1140 1.0000 + 4.3949 1.0000 + 4.6822 1.0000 + 5.4431 1.0000 + 6.5515 1.0000 + 9.6939 0.0000 + 10.3186 0.0000 + 11.5514 0.0000 + 13.6887 0.0000 + 13.9888 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2903 1.0000 + -65.7386 1.0000 + -30.0340 1.0000 + -30.0305 1.0000 + -29.9721 1.0000 + 1.7053 1.0000 + 2.2618 1.0000 + 4.4314 1.0000 + 4.6508 1.0000 + 5.5873 1.0000 + 6.3317 1.0000 + 9.2060 0.0000 + 9.8463 0.0000 + 11.5922 0.0000 + 13.7036 0.0000 + 15.4834 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7384 1.0000 + -30.0418 1.0000 + -30.0301 1.0000 + -29.9715 1.0000 + 1.7590 1.0000 + 2.5073 1.0000 + 4.4571 1.0000 + 4.5923 1.0000 + 5.6986 1.0000 + 6.2426 1.0000 + 8.8451 0.0000 + 9.4436 0.0000 + 11.9279 0.0000 + 13.5539 0.0000 + 15.7128 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7384 1.0000 + -30.0461 1.0000 + -30.0299 1.0000 + -29.9711 1.0000 + 1.7660 1.0000 + 2.6912 1.0000 + 4.4142 1.0000 + 4.5895 1.0000 + 5.7615 1.0000 + 6.2306 1.0000 + 8.6509 0.0000 + 9.2035 0.0000 + 11.6476 0.0000 + 14.2805 0.0000 + 19.5232 0.0000 + + + -91.8815 1.0000 + -91.4265 1.0000 + -91.2914 1.0000 + -65.7392 1.0000 + -30.0318 1.0000 + -29.9947 1.0000 + -29.9885 1.0000 + 1.0577 1.0000 + 2.0304 1.0000 + 4.6009 1.0000 + 4.8033 1.0000 + 4.8693 1.0000 + 7.2978 1.0000 + 10.4120 0.0000 + 10.9345 0.0000 + 11.8493 0.0000 + 12.9361 0.0000 + 14.3082 0.0000 + + + -91.8811 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7391 1.0000 + -30.0317 1.0000 + -29.9968 1.0000 + -29.9883 1.0000 + 1.1137 1.0000 + 2.0461 1.0000 + 4.5591 1.0000 + 4.6899 1.0000 + 5.0505 1.0000 + 7.1547 1.0000 + 10.5597 0.0000 + 10.7725 0.0000 + 11.6641 0.0000 + 12.9304 0.0000 + 41.7172 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2904 1.0000 + -65.7389 1.0000 + -30.0313 1.0000 + -30.0030 1.0000 + -29.9878 1.0000 + 1.2740 1.0000 + 2.0929 1.0000 + 4.4116 1.0000 + 4.7042 1.0000 + 5.2624 1.0000 + 6.8170 1.0000 + 10.1893 0.0000 + 11.0104 0.0000 + 11.7700 0.0000 + 13.5929 0.0000 + 14.2934 0.0000 + + + -91.8800 1.0000 + -91.4250 1.0000 + -91.2900 1.0000 + -65.7387 1.0000 + -30.0309 1.0000 + -30.0122 1.0000 + -29.9870 1.0000 + 1.5073 1.0000 + 2.1781 1.0000 + 4.2861 1.0000 + 4.7582 1.0000 + 5.4598 1.0000 + 6.4336 1.0000 + 9.5343 0.0000 + 11.2013 0.0000 + 11.3387 0.0000 + 13.1060 0.0000 + 38.3097 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7385 1.0000 + -30.0304 1.0000 + -30.0228 1.0000 + -29.9861 1.0000 + 1.7426 1.0000 + 2.3312 1.0000 + 4.2213 1.0000 + 4.7949 1.0000 + 5.6281 1.0000 + 6.1217 1.0000 + 8.8998 0.0000 + 10.7235 0.0000 + 11.4983 0.0000 + 13.3139 0.0000 + 14.5418 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7383 1.0000 + -30.0329 1.0000 + -30.0299 1.0000 + -29.9853 1.0000 + 1.8915 1.0000 + 2.5903 1.0000 + 4.2222 1.0000 + 4.7435 1.0000 + 5.7550 1.0000 + 5.9846 1.0000 + 8.3534 0.0000 + 10.1446 0.0000 + 11.5765 0.0000 + 14.0941 0.0000 + 31.5297 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7382 1.0000 + -30.0408 1.0000 + -30.0295 1.0000 + -29.9846 1.0000 + 1.9545 1.0000 + 2.8962 1.0000 + 4.2674 1.0000 + 4.5842 1.0000 + 5.8671 1.0000 + 6.0058 1.0000 + 7.9444 0.1919 + 9.6138 0.0000 + 12.3662 0.0000 + 14.4968 0.0000 + 35.5494 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7381 1.0000 + -30.0451 1.0000 + -30.0292 1.0000 + -29.9843 1.0000 + 1.9749 1.0000 + 3.1170 1.0000 + 4.3238 1.0000 + 4.4181 1.0000 + 5.9578 1.0000 + 6.0552 1.0000 + 7.7216 0.9887 + 9.2780 0.0000 + 11.6484 0.0000 + 14.1912 0.0000 + 15.2729 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2906 1.0000 + -65.7387 1.0000 + -30.0309 1.0000 + -30.0033 1.0000 + -29.9932 1.0000 + 1.3568 1.0000 + 2.0050 1.0000 + 4.6470 1.0000 + 4.9310 1.0000 + 4.9604 1.0000 + 6.8399 1.0000 + 10.0603 0.0000 + 10.6095 0.0000 + 11.6789 0.0000 + 12.7079 0.0000 + 14.2313 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7387 1.0000 + -30.0309 1.0000 + -30.0032 1.0000 + -29.9955 1.0000 + 1.4097 1.0000 + 2.0396 1.0000 + 4.6145 1.0000 + 4.7530 1.0000 + 5.1891 1.0000 + 6.7162 1.0000 + 10.1096 0.0000 + 10.3876 0.0000 + 11.6000 0.0000 + 13.1316 0.0000 + 37.6273 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7386 1.0000 + -30.0305 1.0000 + -30.0027 1.0000 + -30.0017 1.0000 + 1.5583 1.0000 + 2.1490 1.0000 + 4.4268 1.0000 + 4.7673 1.0000 + 5.4207 1.0000 + 6.4119 1.0000 + 9.5620 0.0000 + 10.6052 0.0000 + 11.5431 0.0000 + 13.8192 0.0000 + 14.7273 0.0000 + + + -91.8807 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7384 1.0000 + -30.0301 1.0000 + -30.0110 1.0000 + -30.0020 1.0000 + 1.7596 1.0000 + 2.3479 1.0000 + 4.2353 1.0000 + 4.8561 1.0000 + 5.6156 1.0000 + 6.0522 1.0000 + 8.8319 0.0000 + 10.9690 0.0000 + 11.4301 0.0000 + 13.3676 0.0000 + 14.5676 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7382 1.0000 + -30.0296 1.0000 + -30.0216 1.0000 + -30.0011 1.0000 + 1.9573 1.0000 + 2.6478 1.0000 + 4.0985 1.0000 + 4.9571 1.0000 + 5.6139 1.0000 + 5.8909 1.0000 + 8.1389 0.0001 + 10.9883 0.0000 + 11.3423 0.0000 + 13.7094 0.0000 + 15.7553 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2906 1.0000 + -65.7380 1.0000 + -30.0317 1.0000 + -30.0291 1.0000 + -30.0003 1.0000 + 2.1129 1.0000 + 3.0175 1.0000 + 4.0379 1.0000 + 4.9190 1.0000 + 5.5211 1.0000 + 5.9990 1.0000 + 7.5405 1.0000 + 10.3988 0.0000 + 11.4577 0.0000 + 13.7122 0.0000 + 15.9308 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7379 1.0000 + -30.0397 1.0000 + -30.0287 1.0000 + -29.9997 1.0000 + 2.2149 1.0000 + 3.3832 1.0000 + 4.0564 1.0000 + 4.6690 1.0000 + 5.6796 1.0000 + 6.0916 1.0000 + 7.0870 1.0000 + 9.7752 0.0000 + 11.5424 0.0000 + 14.3066 0.0000 + 15.5761 0.0000 + + + -91.8814 1.0000 + -91.4264 1.0000 + -91.2914 1.0000 + -65.7378 1.0000 + -30.0440 1.0000 + -30.0285 1.0000 + -29.9994 1.0000 + 2.2640 1.0000 + 3.6435 1.0000 + 4.1382 1.0000 + 4.4048 1.0000 + 5.8558 1.0000 + 6.1352 1.0000 + 6.8387 1.0000 + 9.3618 0.0000 + 11.5772 0.0000 + 14.3099 0.0000 + 14.9653 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7384 1.0000 + -30.0302 1.0000 + -30.0174 1.0000 + -29.9919 1.0000 + 1.5922 1.0000 + 2.0622 1.0000 + 4.6783 1.0000 + 4.9977 1.0000 + 5.1255 1.0000 + 6.4823 1.0000 + 9.7866 0.0000 + 10.2382 0.0000 + 11.6423 0.0000 + 12.1724 0.0000 + 15.1696 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7384 1.0000 + -30.0300 1.0000 + -30.0172 1.0000 + -29.9941 1.0000 + 1.6356 1.0000 + 2.1225 1.0000 + 4.6697 1.0000 + 4.8109 1.0000 + 5.3294 1.0000 + 6.3879 1.0000 + 9.7035 0.0000 + 10.0257 0.0000 + 11.6040 0.0000 + 12.6587 0.0000 + 14.9940 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2901 1.0000 + -65.7382 1.0000 + -30.0297 1.0000 + -30.0168 1.0000 + -30.0004 1.0000 + 1.7553 1.0000 + 2.3064 1.0000 + 4.4915 1.0000 + 4.7800 1.0000 + 5.5639 1.0000 + 6.1473 1.0000 + 9.0130 0.0000 + 10.2004 0.0000 + 11.5878 0.0000 + 13.4966 0.0000 + 14.8358 0.0000 + + + -91.8807 1.0000 + -91.4258 1.0000 + -91.2907 1.0000 + -65.7381 1.0000 + -30.0293 1.0000 + -30.0162 1.0000 + -30.0097 1.0000 + 1.9268 1.0000 + 2.6143 1.0000 + 4.2587 1.0000 + 4.8639 1.0000 + 5.7056 1.0000 + 5.8972 1.0000 + 8.2193 0.0000 + 10.4809 0.0000 + 11.5381 0.0000 + 13.9612 0.0000 + 14.5546 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7379 1.0000 + -30.0288 1.0000 + -30.0204 1.0000 + -30.0154 1.0000 + 2.1305 1.0000 + 3.0221 1.0000 + 4.0628 1.0000 + 5.0039 1.0000 + 5.4474 1.0000 + 5.9945 1.0000 + 7.4712 1.0000 + 10.6874 0.0000 + 11.3421 0.0000 + 13.4783 0.0000 + 15.3783 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2909 1.0000 + -65.7377 1.0000 + -30.0306 1.0000 + -30.0283 1.0000 + -30.0147 1.0000 + 2.3416 1.0000 + 3.4734 1.0000 + 3.9279 1.0000 + 5.1088 1.0000 + 5.2297 1.0000 + 6.1260 1.0000 + 6.8189 1.0000 + 10.4946 0.0000 + 11.1842 0.0000 + 13.1952 0.0000 + 15.7397 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2912 1.0000 + -65.7376 1.0000 + -30.0385 1.0000 + -30.0280 1.0000 + -30.0141 1.0000 + 2.5238 1.0000 + 3.8199 1.0000 + 3.9375 1.0000 + 4.8268 1.0000 + 5.4778 1.0000 + 6.2123 1.0000 + 6.3224 1.0000 + 9.8991 0.0000 + 11.2407 0.0000 + 13.1926 0.0000 + 15.5369 0.0000 + + + -91.8814 1.0000 + -91.4264 1.0000 + -91.2914 1.0000 + -65.7375 1.0000 + -30.0429 1.0000 + -30.0278 1.0000 + -30.0137 1.0000 + 2.6290 1.0000 + 3.8380 1.0000 + 4.2279 1.0000 + 4.5865 1.0000 + 5.6574 1.0000 + 6.0663 1.0000 + 6.2635 1.0000 + 9.4409 0.0000 + 11.2887 0.0000 + 13.2397 0.0000 + 15.7505 0.0000 + + + -91.8809 1.0000 + -91.4259 1.0000 + -91.2908 1.0000 + -65.7382 1.0000 + -30.0295 1.0000 + -30.0285 1.0000 + -29.9909 1.0000 + 1.6678 1.0000 + 2.2476 1.0000 + 4.6819 1.0000 + 5.0573 1.0000 + 5.2677 1.0000 + 6.2372 1.0000 + 9.6320 0.0000 + 9.9258 0.0000 + 11.6498 0.0000 + 11.7641 0.0000 + 15.1177 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2910 1.0000 + -65.7382 1.0000 + -30.0294 1.0000 + -30.0284 1.0000 + -29.9931 1.0000 + 1.7064 1.0000 + 2.3241 1.0000 + 4.6780 1.0000 + 4.8714 1.0000 + 5.4482 1.0000 + 6.1821 1.0000 + 9.3944 0.0000 + 9.7662 0.0000 + 11.6283 0.0000 + 12.2592 0.0000 + 15.0447 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7380 1.0000 + -30.0291 1.0000 + -30.0279 1.0000 + -29.9994 1.0000 + 1.8197 1.0000 + 2.5512 1.0000 + 4.5747 1.0000 + 4.7174 1.0000 + 5.6795 1.0000 + 6.0408 1.0000 + 8.5996 0.0000 + 9.8664 0.0000 + 11.6305 0.0000 + 13.1616 0.0000 + 14.9422 0.0000 + + + -91.8802 1.0000 + -91.4252 1.0000 + -91.2902 1.0000 + -65.7378 1.0000 + -30.0287 1.0000 + -30.0272 1.0000 + -30.0087 1.0000 + 2.0020 1.0000 + 2.9149 1.0000 + 4.3358 1.0000 + 4.7172 1.0000 + 5.7999 1.0000 + 5.9420 1.0000 + 7.7512 0.9686 + 10.0198 0.0000 + 11.6232 0.0000 + 14.2345 0.0000 + 15.3681 0.0000 + + + -91.8805 1.0000 + -91.4255 1.0000 + -91.2905 1.0000 + -65.7376 1.0000 + -30.0283 1.0000 + -30.0265 1.0000 + -30.0194 1.0000 + 2.2449 1.0000 + 3.3771 1.0000 + 4.1205 1.0000 + 4.7396 1.0000 + 5.6457 1.0000 + 6.0882 1.0000 + 6.9514 1.0000 + 10.1586 0.0000 + 11.4369 0.0000 + 13.6407 0.0000 + 15.4695 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7374 1.0000 + -30.0297 1.0000 + -30.0278 1.0000 + -30.0258 1.0000 + 2.5344 1.0000 + 3.8121 1.0000 + 3.9855 1.0000 + 4.8087 1.0000 + 5.5213 1.0000 + 6.1981 1.0000 + 6.2633 1.0000 + 10.2073 0.0000 + 11.0454 0.0000 + 13.0519 0.0000 + 15.5984 0.0000 + + + -91.8811 1.0000 + -91.4261 1.0000 + -91.2911 1.0000 + -65.7373 1.0000 + -30.0377 1.0000 + -30.0274 1.0000 + -30.0252 1.0000 + 2.8336 1.0000 + 3.8000 1.0000 + 4.1712 1.0000 + 4.9751 1.0000 + 5.5168 1.0000 + 5.6776 1.0000 + 6.3079 1.0000 + 9.9354 0.0000 + 10.7127 0.0000 + 12.8003 0.0000 + 15.8356 0.0000 + + + -91.8814 1.0000 + -91.4264 1.0000 + -91.2914 1.0000 + -65.7372 1.0000 + -30.0421 1.0000 + -30.0272 1.0000 + -30.0249 1.0000 + 3.0541 1.0000 + 3.7465 1.0000 + 4.2239 1.0000 + 5.1222 1.0000 + 5.2997 1.0000 + 5.6922 1.0000 + 6.3453 1.0000 + 9.5016 0.0000 + 10.6605 0.0000 + 12.7227 0.0000 + 15.5675 0.0000 + + + -91.8803 1.0000 + -91.4253 1.0000 + -91.2903 1.0000 + -65.7380 1.0000 + -30.0345 1.0000 + -30.0292 1.0000 + -29.9902 1.0000 + 1.6740 1.0000 + 2.4018 1.0000 + 4.6707 1.0000 + 5.0946 1.0000 + 5.3522 1.0000 + 6.1117 1.0000 + 9.6010 0.0000 + 9.7207 0.0000 + 11.5419 0.0000 + 11.6546 0.0000 + 14.9372 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7380 1.0000 + -30.0344 1.0000 + -30.0291 1.0000 + -29.9926 1.0000 + 1.7129 1.0000 + 2.4847 1.0000 + 4.6554 1.0000 + 4.9171 1.0000 + 5.5191 1.0000 + 6.0879 1.0000 + 9.2253 0.0000 + 9.6369 0.0000 + 11.6608 0.0000 + 12.0478 0.0000 + 14.9557 0.0000 + + + -91.8807 1.0000 + -91.4257 1.0000 + -91.2907 1.0000 + -65.7379 1.0000 + -30.0339 1.0000 + -30.0288 1.0000 + -29.9989 1.0000 + 1.8315 1.0000 + 2.7302 1.0000 + 4.6082 1.0000 + 4.6655 1.0000 + 5.7492 1.0000 + 6.0255 1.0000 + 8.3737 0.0000 + 9.6738 0.0000 + 11.6583 0.0000 + 12.9796 0.0000 + 15.0184 0.0000 + + + -91.8808 1.0000 + -91.4258 1.0000 + -91.2908 1.0000 + -65.7377 1.0000 + -30.0333 1.0000 + -30.0284 1.0000 + -30.0082 1.0000 + 2.0272 1.0000 + 3.1247 1.0000 + 4.4101 1.0000 + 4.5557 1.0000 + 5.9249 1.0000 + 5.9750 1.0000 + 7.4900 1.0000 + 9.7287 0.0000 + 11.6418 0.0000 + 13.9974 0.0000 + 15.0437 0.0000 + + + -91.8804 1.0000 + -91.4254 1.0000 + -91.2904 1.0000 + -65.7375 1.0000 + -30.0326 1.0000 + -30.0279 1.0000 + -30.0189 1.0000 + 2.2989 1.0000 + 3.6250 1.0000 + 4.2181 1.0000 + 4.4835 1.0000 + 5.8518 1.0000 + 6.1331 1.0000 + 6.6571 1.0000 + 9.7868 0.0000 + 11.4865 0.0000 + 14.5147 0.0000 + 15.4164 0.0000 + + + -91.8806 1.0000 + -91.4256 1.0000 + -91.2905 1.0000 + -65.7373 1.0000 + -30.0318 1.0000 + -30.0291 1.0000 + -30.0275 1.0000 + 2.6408 1.0000 + 3.9091 1.0000 + 4.2522 1.0000 + 4.5325 1.0000 + 5.7034 1.0000 + 5.9787 1.0000 + 6.2621 1.0000 + 9.8299 0.0000 + 11.0556 0.0000 + 13.0395 0.0000 + 15.4657 0.0000 + + + -91.8810 1.0000 + -91.4260 1.0000 + -91.2910 1.0000 + -65.7372 1.0000 + -30.0372 1.0000 + -30.0313 1.0000 + -30.0271 1.0000 + 3.0409 1.0000 + 3.8298 1.0000 + 4.2195 1.0000 + 5.0235 1.0000 + 5.2301 1.0000 + 5.8071 1.0000 + 6.3436 1.0000 + 9.8006 0.0000 + 10.3862 0.0000 + 12.6747 0.0000 + 15.4656 0.0000 + + + -91.8812 1.0000 + -91.4262 1.0000 + -91.2911 1.0000 + -65.7371 1.0000 + -30.0416 1.0000 + -30.0310 1.0000 + -30.0269 1.0000 + 3.4531 1.0000 + 3.7372 1.0000 + 4.0740 1.0000 + 4.7709 1.0000 + 5.5707 1.0000 + 5.7646 1.0000 + 6.3738 1.0000 + 9.5306 0.0000 + 10.0845 0.0000 + 12.5702 0.0000 + 15.4251 0.0000 + + + + + + + 0.00000000 0.00000000 0.00000000 + + + 7.88278638 + + + gridpoints + spin + energy + total + integrated + + + -98.7492 0.0000 0.0000 + -98.2456 0.0000 0.0000 + -97.7420 0.0000 0.0000 + -97.2383 0.0000 0.0000 + -96.7347 0.0000 0.0000 + -96.2311 0.0000 0.0000 + -95.7275 0.0000 0.0000 + -95.2239 0.0000 0.0000 + -94.7203 0.0000 0.0000 + -94.2166 0.0000 0.0000 + -93.7130 0.0000 0.0000 + -93.2094 0.0000 0.0000 + -92.7058 0.0000 0.0000 + -92.2022 0.0000 0.0000 + -91.6986 3.9514 1.9900 + -91.1949 7.6087 5.8219 + -90.6913 0.3536 6.0000 + -90.1877 0.0000 6.0000 + -89.6841 0.0000 6.0000 + -89.1805 0.0000 6.0000 + -88.6769 0.0000 6.0000 + -88.1732 0.0000 6.0000 + -87.6696 0.0000 6.0000 + -87.1660 0.0000 6.0000 + -86.6624 0.0000 6.0000 + -86.1588 0.0000 6.0000 + -85.6552 0.0000 6.0000 + -85.1515 0.0000 6.0000 + -84.6479 0.0000 6.0000 + -84.1443 0.0000 6.0000 + -83.6407 0.0000 6.0000 + -83.1371 0.0000 6.0000 + -82.6335 0.0000 6.0000 + -82.1299 0.0000 6.0000 + -81.6262 0.0000 6.0000 + -81.1226 0.0000 6.0000 + -80.6190 0.0000 6.0000 + -80.1154 0.0000 6.0000 + -79.6118 0.0000 6.0000 + -79.1082 0.0000 6.0000 + -78.6045 0.0000 6.0000 + -78.1009 0.0000 6.0000 + -77.5973 0.0000 6.0000 + -77.0937 0.0000 6.0000 + -76.5901 0.0000 6.0000 + -76.0865 0.0000 6.0000 + -75.5828 0.0000 6.0000 + -75.0792 0.0000 6.0000 + -74.5756 0.0000 6.0000 + -74.0720 0.0000 6.0000 + -73.5684 0.0000 6.0000 + -73.0648 0.0000 6.0000 + -72.5611 0.0000 6.0000 + -72.0575 0.0000 6.0000 + -71.5539 0.0000 6.0000 + -71.0503 0.0000 6.0000 + -70.5467 0.0000 6.0000 + -70.0431 0.0000 6.0000 + -69.5394 0.0000 6.0000 + -69.0358 0.0000 6.0000 + -68.5322 0.0000 6.0000 + -68.0286 0.0000 6.0000 + -67.5250 0.0000 6.0000 + -67.0214 0.0000 6.0000 + -66.5178 0.0000 6.0000 + -66.0141 0.0002 6.0001 + -65.5105 3.9689 7.9989 + -65.0069 0.0021 8.0000 + -64.5033 0.0000 8.0000 + -63.9997 0.0000 8.0000 + -63.4961 0.0000 8.0000 + -62.9924 0.0000 8.0000 + -62.4888 0.0000 8.0000 + -61.9852 0.0000 8.0000 + -61.4816 0.0000 8.0000 + -60.9780 0.0000 8.0000 + -60.4744 0.0000 8.0000 + -59.9707 0.0000 8.0000 + -59.4671 0.0000 8.0000 + -58.9635 0.0000 8.0000 + -58.4599 0.0000 8.0000 + -57.9563 0.0000 8.0000 + -57.4527 0.0000 8.0000 + -56.9490 0.0000 8.0000 + -56.4454 0.0000 8.0000 + -55.9418 0.0000 8.0000 + -55.4382 0.0000 8.0000 + -54.9346 0.0000 8.0000 + -54.4310 0.0000 8.0000 + -53.9273 0.0000 8.0000 + -53.4237 0.0000 8.0000 + -52.9201 0.0000 8.0000 + -52.4165 0.0000 8.0000 + -51.9129 0.0000 8.0000 + -51.4093 0.0000 8.0000 + -50.9057 0.0000 8.0000 + -50.4020 0.0000 8.0000 + -49.8984 0.0000 8.0000 + -49.3948 0.0000 8.0000 + -48.8912 0.0000 8.0000 + -48.3876 0.0000 8.0000 + -47.8840 0.0000 8.0000 + -47.3803 0.0000 8.0000 + -46.8767 0.0000 8.0000 + -46.3731 0.0000 8.0000 + -45.8695 0.0000 8.0000 + -45.3659 0.0000 8.0000 + -44.8623 0.0000 8.0000 + -44.3586 0.0000 8.0000 + -43.8550 0.0000 8.0000 + -43.3514 0.0000 8.0000 + -42.8478 0.0000 8.0000 + -42.3442 0.0000 8.0000 + -41.8406 0.0000 8.0000 + -41.3369 0.0000 8.0000 + -40.8333 0.0000 8.0000 + -40.3297 0.0000 8.0000 + -39.8261 0.0000 8.0000 + -39.3225 0.0000 8.0000 + -38.8189 0.0000 8.0000 + -38.3152 0.0000 8.0000 + -37.8116 0.0000 8.0000 + -37.3080 0.0000 8.0000 + -36.8044 0.0000 8.0000 + -36.3008 0.0000 8.0000 + -35.7972 0.0000 8.0000 + -35.2936 0.0000 8.0000 + -34.7899 0.0000 8.0000 + -34.2863 0.0000 8.0000 + -33.7827 0.0000 8.0000 + -33.2791 0.0000 8.0000 + -32.7755 0.0000 8.0000 + -32.2719 0.0000 8.0000 + -31.7682 0.0000 8.0000 + -31.2646 0.0000 8.0000 + -30.7610 0.0000 8.0000 + -30.2574 0.0062 8.0031 + -29.7538 11.6675 13.8791 + -29.2502 0.2401 14.0000 + -28.7465 0.0000 14.0000 + -28.2429 0.0000 14.0000 + -27.7393 0.0000 14.0000 + -27.2357 0.0000 14.0000 + -26.7321 0.0000 14.0000 + -26.2285 0.0000 14.0000 + -25.7248 0.0000 14.0000 + -25.2212 0.0000 14.0000 + -24.7176 0.0000 14.0000 + -24.2140 0.0000 14.0000 + -23.7104 0.0000 14.0000 + -23.2068 0.0000 14.0000 + -22.7031 0.0000 14.0000 + -22.1995 0.0000 14.0000 + -21.6959 0.0000 14.0000 + -21.1923 0.0000 14.0000 + -20.6887 0.0000 14.0000 + -20.1851 0.0000 14.0000 + -19.6815 0.0000 14.0000 + -19.1778 0.0000 14.0000 + -18.6742 0.0000 14.0000 + -18.1706 0.0000 14.0000 + -17.6670 0.0000 14.0000 + -17.1634 0.0000 14.0000 + -16.6598 0.0000 14.0000 + -16.1561 0.0000 14.0000 + -15.6525 0.0000 14.0000 + -15.1489 0.0000 14.0000 + -14.6453 0.0000 14.0000 + -14.1417 0.0000 14.0000 + -13.6381 0.0000 14.0000 + -13.1344 0.0000 14.0000 + -12.6308 0.0000 14.0000 + -12.1272 0.0000 14.0000 + -11.6236 0.0000 14.0000 + -11.1200 0.0000 14.0000 + -10.6164 0.0000 14.0000 + -10.1127 0.0000 14.0000 + -9.6091 0.0000 14.0000 + -9.1055 0.0000 14.0000 + -8.6019 0.0000 14.0000 + -8.0983 0.0000 14.0000 + -7.5947 0.0000 14.0000 + -7.0910 0.0000 14.0000 + -6.5874 0.0000 14.0000 + -6.0838 0.0000 14.0000 + -5.5802 0.0000 14.0000 + -5.0766 0.0000 14.0000 + -4.5730 0.0000 14.0000 + -4.0694 0.0000 14.0000 + -3.5657 0.0000 14.0000 + -3.0621 0.0000 14.0000 + -2.5585 0.0000 14.0000 + -2.0549 0.0009 14.0005 + -1.5513 0.1132 14.0574 + -1.0477 0.2483 14.1825 + -0.5440 0.3448 14.3561 + -0.0404 0.4543 14.5849 + 0.4632 0.5588 14.8664 + 0.9668 0.6103 15.1737 + 1.4704 0.8493 15.6014 + 1.9740 1.0615 16.1360 + 2.4777 1.1259 16.7031 + 2.9813 0.9778 17.1955 + 3.4849 0.7572 17.5768 + 3.9885 0.9446 18.0526 + 4.4921 2.2831 19.2023 + 4.9957 3.6694 21.0503 + 5.4994 2.8044 22.4627 + 6.0030 2.3933 23.6680 + 6.5066 1.9045 24.6271 + 7.0102 1.3513 25.3077 + 7.5138 0.8062 25.7137 + 8.0174 0.7272 26.0799 + 8.5211 0.8382 26.5020 + 9.0247 1.4316 27.2230 + 9.5283 1.9155 28.1877 + 10.0319 1.7300 29.0590 + 10.5355 1.5459 29.8375 + 11.0391 1.1419 30.4126 + 11.5427 1.3555 31.0952 + 12.0464 1.2953 31.7476 + 12.5500 0.5429 32.0210 + 13.0536 0.4473 32.2462 + 13.5572 0.8282 32.6634 + 14.0608 1.1877 33.2615 + 14.5644 1.1003 33.8156 + 15.0681 1.3090 34.4749 + 15.5717 1.4011 35.1805 + 16.0753 0.7368 35.5516 + 16.5789 0.3354 35.7205 + 17.0825 0.2344 35.8385 + 17.5861 0.0350 35.8561 + 18.0898 0.0355 35.8740 + 18.5934 0.0265 35.8874 + 19.0970 0.0000 35.8874 + 19.6006 0.0175 35.8962 + 20.1042 0.0059 35.8992 + 20.6078 0.0000 35.8993 + 21.1115 0.0000 35.8993 + 21.6151 0.0004 35.8995 + 22.1187 0.0043 35.9016 + 22.6223 0.0000 35.9016 + 23.1259 0.0000 35.9016 + 23.6295 0.0000 35.9016 + 24.1332 0.0047 35.9040 + 24.6368 0.0000 35.9040 + 25.1404 0.0000 35.9040 + 25.6440 0.0000 35.9040 + 26.1476 0.0000 35.9040 + 26.6512 0.0000 35.9040 + 27.1548 0.0000 35.9040 + 27.6585 0.0000 35.9040 + 28.1621 0.0000 35.9040 + 28.6657 0.0000 35.9040 + 29.1693 0.0000 35.9040 + 29.6729 0.0000 35.9040 + 30.1765 0.0000 35.9040 + 30.6802 0.0000 35.9040 + 31.1838 0.0001 35.9040 + 31.6874 0.0186 35.9134 + 32.1910 0.0092 35.9180 + 32.6946 0.0003 35.9182 + 33.1982 0.0094 35.9230 + 33.7019 0.0000 35.9230 + 34.2055 0.0107 35.9284 + 34.7091 0.0081 35.9324 + 35.2127 0.0000 35.9324 + 35.7163 0.0223 35.9437 + 36.2199 0.0077 35.9475 + 36.7236 0.0030 35.9490 + 37.2272 0.0047 35.9514 + 37.7308 0.0088 35.9558 + 38.2344 0.0020 35.9568 + 38.7380 0.0269 35.9704 + 39.2416 0.0102 35.9755 + 39.7453 0.0015 35.9763 + 40.2489 0.0000 35.9763 + 40.7525 0.0047 35.9787 + 41.2561 0.0000 35.9787 + 41.7597 0.0178 35.9876 + 42.2633 0.0114 35.9934 + 42.7670 0.0038 35.9953 + 43.2706 0.0000 35.9953 + 43.7742 0.0000 35.9953 + 44.2778 0.0000 35.9953 + 44.7814 0.0000 35.9953 + 45.2850 0.0000 35.9953 + 45.7886 0.0094 36.0000 + 46.2923 0.0000 36.0000 + 46.7959 0.0000 36.0000 + 47.2995 0.0000 36.0000 + 47.8031 0.0000 36.0000 + 48.3067 0.0000 36.0000 + 48.8103 0.0000 36.0000 + 49.3140 0.0000 36.0000 + 49.8176 0.0000 36.0000 + 50.3212 0.0000 36.0000 + 50.8248 0.0000 36.0000 + 51.3284 0.0000 36.0000 + 51.8320 0.0000 36.0000 + 52.3357 0.0000 36.0000 + + + + + + + + + + 3.66961100 0.00000000 0.00000000 + 0.00000000 3.55744000 0.00000000 + 0.00000000 0.00000000 3.17678100 + + 41.47103646 + + 0.27250845 0.00000000 0.00000000 + 0.00000000 0.28110102 0.00000000 + 0.00000000 0.00000000 0.31478405 + + + + 0.00000000 0.00000000 0.00000000 + 0.00000000 0.50000000 0.50000000 + 0.50000000 0.00000000 0.50000000 + 0.50000000 0.50000000 0.00000000 + + + diff --git a/examples/README b/examples/README index a8dfe63d923f211598141b76a5ec892ea4e48d60..3c9c299819db13b27f3152cc8496e9ed2f90aaa1 100644 --- a/examples/README +++ b/examples/README @@ -59,6 +59,7 @@ sub-directories: accelerate: use of all the various accelerator packages airebo: polyethylene with AIREBO potential +atm: Axilrod-Teller-Muto potential balance: dynamic load balancing, 2d system body: body particles, 2d system cmap: CMAP 5-body contributions to CHARMM force field @@ -82,6 +83,7 @@ kim: use of potentials in Knowledge Base for Interatomic Models (KIM) latte: use of LATTE density-functional tight-binding quantum code meam: MEAM test for SiC and shear (same as shear examples) melt: rapid melt of 3d LJ system +message: client/server coupling of 2 codes micelle: self-assembly of small lipid-like molecules into 2d bilayers min: energy minimization of 2d LJ melt mscg: parameterize a multi-scale coarse-graining (MSCG) model diff --git a/examples/SPIN/bfo/in.spin.bfo b/examples/SPIN/bfo/in.spin.bfo index de23ba87ba2b825c129b88fd55fcfcb33703eb01..e3c88b0f0668a73073e72afd908dd647dc7ddbdc 100644 --- a/examples/SPIN/bfo/in.spin.bfo +++ b/examples/SPIN/bfo/in.spin.bfo @@ -36,7 +36,7 @@ fix 3 all nve/spin lattice no timestep 0.0002 -compute out_mag all compute/spin +compute out_mag all spin compute out_pe all pe compute out_ke all ke compute out_temp all temp diff --git a/examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc b/examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc index fd6833727bebf8b13f795cfdec73100f8fc8a6f2..ea98eeba94184b614add63f49a76991a5d907da4 100644 --- a/examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc +++ b/examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc @@ -40,7 +40,7 @@ timestep 0.0001 # compute and output options -compute out_mag all compute/spin +compute out_mag all spin compute out_pe all pe compute out_ke all ke compute out_temp all temp diff --git a/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp b/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp index 35aa1df86c4a2c2bdfff40f3e35f032939311b90..3ff0b1cadf67b5f729ddac8876141a8930a8a799 100644 --- a/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp +++ b/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp @@ -40,7 +40,7 @@ fix 3 all nve/spin lattice yes timestep 0.0001 -compute out_mag all compute/spin +compute out_mag all spin compute out_pe all pe compute out_ke all ke compute out_temp all temp diff --git a/examples/SPIN/iron/in.spin.iron b/examples/SPIN/iron/in.spin.iron index c2d5082cb6a27751627d72d850ed11ad8feade66..1db5007dffd87c33898acf752575ff3c31eaff49 100644 --- a/examples/SPIN/iron/in.spin.iron +++ b/examples/SPIN/iron/in.spin.iron @@ -37,7 +37,7 @@ timestep 0.0001 # compute and output options -compute out_mag all compute/spin +compute out_mag all spin compute out_pe all pe compute out_ke all ke compute out_temp all temp diff --git a/examples/SPIN/nickel/in.spin.nickel b/examples/SPIN/nickel/in.spin.nickel index ba447b077f24c4ee1213aca34325d370657b1f4e..0ed2fac410d43cbdb87b464616383f3c9825bc24 100644 --- a/examples/SPIN/nickel/in.spin.nickel +++ b/examples/SPIN/nickel/in.spin.nickel @@ -38,7 +38,7 @@ timestep 0.0001 # compute and output options -compute out_mag all compute/spin +compute out_mag all spin compute out_pe all pe compute out_ke all ke compute out_temp all temp diff --git a/examples/SPIN/read_restart/in.spin.read_data b/examples/SPIN/read_restart/in.spin.read_data index 80de0366616956ab9b505be148d19fadf3a0bdae..17343994b57bb775cf5a654f238c41a86c27da49 100644 --- a/examples/SPIN/read_restart/in.spin.read_data +++ b/examples/SPIN/read_restart/in.spin.read_data @@ -25,7 +25,7 @@ timestep 0.0001 # define outputs and computes -compute out_mag all compute/spin +compute out_mag all spin compute out_pe all pe compute out_ke all ke compute out_temp all temp diff --git a/examples/SPIN/read_restart/in.spin.restart b/examples/SPIN/read_restart/in.spin.restart index a1198ccf9351e07e8ae6784a49edece5dcbeab39..39157fdac42f8104a2c37bd4eff125925a43b158 100644 --- a/examples/SPIN/read_restart/in.spin.restart +++ b/examples/SPIN/read_restart/in.spin.restart @@ -29,7 +29,7 @@ timestep 0.0001 # define outputs -compute out_mag all compute/spin +compute out_mag all spin compute out_pe all pe compute out_ke all ke compute out_temp all temp diff --git a/examples/SPIN/read_restart/in.spin.write_restart b/examples/SPIN/read_restart/in.spin.write_restart index 84fea24611540156a0fdd9d1863d1b745aae67ef..42f07fd316b61bb1989b4affa85007a85be6c13c 100644 --- a/examples/SPIN/read_restart/in.spin.write_restart +++ b/examples/SPIN/read_restart/in.spin.write_restart @@ -34,7 +34,7 @@ timestep 0.0001 # compute and output options -compute out_mag all compute/spin +compute out_mag all spin compute out_pe all pe compute out_ke all ke compute out_temp all temp diff --git a/examples/USER/diffraction/BulkNi.in b/examples/USER/diffraction/BulkNi.in index 0fa9c1b74c2c41d9917d21b7167d4761403a2c2b..8315e57750b021c691ade481caccb1f727a44b3c 100644 --- a/examples/USER/diffraction/BulkNi.in +++ b/examples/USER/diffraction/BulkNi.in @@ -17,8 +17,9 @@ atom_modify sort 0 0 compute XRD all xrd 1.541838 Ni 2Theta 40 80 c 2 2 2 LP 1 echo -compute SAED all saed 0.0251 Ni Kmax 0.85 Zone 1 0 0 c 0.025 0.025 0.025 & - dR_Ewald 0.05 echo manual +compute SAED all saed 0.0251 Ni Kmax 0.85 & + Zone 0 0 0 c 0.025 0.025 0.025 & + dR_Ewald 0.01 echo manual fix 1 all ave/histo/weight 1 1 1 40 80 200 c_XRD[1] c_XRD[2] & mode vector file $A.hist.xrd diff --git a/examples/USER/diffraction/Output/BulkNi.in b/examples/USER/diffraction/Output/BulkNi.in deleted file mode 100644 index 8315e57750b021c691ade481caccb1f727a44b3c..0000000000000000000000000000000000000000 --- a/examples/USER/diffraction/Output/BulkNi.in +++ /dev/null @@ -1,35 +0,0 @@ -variable A string bulkNi -log $A.log - -boundary p p p - -units metal -timestep 0.001 - -lattice fcc 3.52 -region box block 0 20 0 20 0 20 -create_box 1 box -create_atoms 1 box - -pair_style none -mass * 58.71 -atom_modify sort 0 0 - -compute XRD all xrd 1.541838 Ni 2Theta 40 80 c 2 2 2 LP 1 echo - -compute SAED all saed 0.0251 Ni Kmax 0.85 & - Zone 0 0 0 c 0.025 0.025 0.025 & - dR_Ewald 0.01 echo manual - -fix 1 all ave/histo/weight 1 1 1 40 80 200 c_XRD[1] c_XRD[2] & - mode vector file $A.hist.xrd - -fix 2 all saed/vtk 1 1 1 c_SAED file $A_001.saed - -dump 1 all custom 1 $A.dump id x y z -run 0 - -unfix 1 -unfix 2 -uncompute XRD -uncompute SAED diff --git a/examples/USER/misc/mop/data.mop b/examples/USER/misc/mop/data.mop new file mode 100644 index 0000000000000000000000000000000000000000..7f158d7626f983cef1479763a80332344481d478 --- /dev/null +++ b/examples/USER/misc/mop/data.mop @@ -0,0 +1,2467 @@ +LAMMPS data file via write_data, version 31 Aug 2018, timestep = 0 + +1224 atoms +2 atom types + +0.0000000000000000e+00 9.5244063118091962e+00 xlo xhi +0.0000000000000000e+00 9.5244063118091962e+00 ylo yhi +-2.0e+00 1.6e+01 zlo zhi + +Masses + +1 1 +2 1 + +Atoms # atomic + +793 2 0.0000000000000000e+00 0.0000000000000000e+00 -1.5874010519681994e+00 0 0 0 +794 2 7.9370052598409979e-01 7.9370052598409979e-01 -1.5874010519681994e+00 0 0 0 +797 2 1.5874010519681996e+00 0.0000000000000000e+00 -1.5874010519681994e+00 0 0 0 +798 2 2.3811015779522990e+00 7.9370052598409979e-01 -1.5874010519681994e+00 0 0 0 +801 2 3.1748021039363992e+00 0.0000000000000000e+00 -1.5874010519681994e+00 0 0 0 +802 2 3.9685026299204984e+00 7.9370052598409979e-01 -1.5874010519681994e+00 0 0 0 +805 2 4.7622031559045981e+00 0.0000000000000000e+00 -1.5874010519681994e+00 0 0 0 +806 2 5.5559036818886973e+00 7.9370052598409979e-01 -1.5874010519681994e+00 0 0 0 +809 2 6.3496042078727983e+00 0.0000000000000000e+00 -1.5874010519681994e+00 0 0 0 +810 2 7.1433047338568993e+00 7.9370052598409979e-01 -1.5874010519681994e+00 0 0 0 +813 2 7.9370052598409968e+00 0.0000000000000000e+00 -1.5874010519681994e+00 0 0 0 +814 2 8.7307057858250960e+00 7.9370052598409979e-01 -1.5874010519681994e+00 0 0 0 +817 2 0.0000000000000000e+00 1.5874010519681996e+00 -1.5874010519681994e+00 0 0 0 +818 2 7.9370052598409979e-01 2.3811015779522990e+00 -1.5874010519681994e+00 0 0 0 +821 2 1.5874010519681996e+00 1.5874010519681996e+00 -1.5874010519681994e+00 0 0 0 +822 2 2.3811015779522990e+00 2.3811015779522990e+00 -1.5874010519681994e+00 0 0 0 +825 2 3.1748021039363992e+00 1.5874010519681996e+00 -1.5874010519681994e+00 0 0 0 +826 2 3.9685026299204984e+00 2.3811015779522990e+00 -1.5874010519681994e+00 0 0 0 +829 2 4.7622031559045981e+00 1.5874010519681996e+00 -1.5874010519681994e+00 0 0 0 +830 2 5.5559036818886973e+00 2.3811015779522990e+00 -1.5874010519681994e+00 0 0 0 +833 2 6.3496042078727983e+00 1.5874010519681996e+00 -1.5874010519681994e+00 0 0 0 +834 2 7.1433047338568993e+00 2.3811015779522990e+00 -1.5874010519681994e+00 0 0 0 +837 2 7.9370052598409968e+00 1.5874010519681996e+00 -1.5874010519681994e+00 0 0 0 +838 2 8.7307057858250960e+00 2.3811015779522990e+00 -1.5874010519681994e+00 0 0 0 +841 2 0.0000000000000000e+00 3.1748021039363992e+00 -1.5874010519681994e+00 0 0 0 +842 2 7.9370052598409979e-01 3.9685026299204984e+00 -1.5874010519681994e+00 0 0 0 +845 2 1.5874010519681996e+00 3.1748021039363992e+00 -1.5874010519681994e+00 0 0 0 +846 2 2.3811015779522990e+00 3.9685026299204984e+00 -1.5874010519681994e+00 0 0 0 +849 2 3.1748021039363992e+00 3.1748021039363992e+00 -1.5874010519681994e+00 0 0 0 +850 2 3.9685026299204984e+00 3.9685026299204984e+00 -1.5874010519681994e+00 0 0 0 +853 2 4.7622031559045981e+00 3.1748021039363992e+00 -1.5874010519681994e+00 0 0 0 +854 2 5.5559036818886973e+00 3.9685026299204984e+00 -1.5874010519681994e+00 0 0 0 +857 2 6.3496042078727983e+00 3.1748021039363992e+00 -1.5874010519681994e+00 0 0 0 +858 2 7.1433047338568993e+00 3.9685026299204984e+00 -1.5874010519681994e+00 0 0 0 +861 2 7.9370052598409968e+00 3.1748021039363992e+00 -1.5874010519681994e+00 0 0 0 +862 2 8.7307057858250960e+00 3.9685026299204984e+00 -1.5874010519681994e+00 0 0 0 +865 2 0.0000000000000000e+00 4.7622031559045981e+00 -1.5874010519681994e+00 0 0 0 +866 2 7.9370052598409979e-01 5.5559036818886973e+00 -1.5874010519681994e+00 0 0 0 +869 2 1.5874010519681996e+00 4.7622031559045981e+00 -1.5874010519681994e+00 0 0 0 +870 2 2.3811015779522990e+00 5.5559036818886973e+00 -1.5874010519681994e+00 0 0 0 +873 2 3.1748021039363992e+00 4.7622031559045981e+00 -1.5874010519681994e+00 0 0 0 +874 2 3.9685026299204984e+00 5.5559036818886973e+00 -1.5874010519681994e+00 0 0 0 +877 2 4.7622031559045981e+00 4.7622031559045981e+00 -1.5874010519681994e+00 0 0 0 +878 2 5.5559036818886973e+00 5.5559036818886973e+00 -1.5874010519681994e+00 0 0 0 +881 2 6.3496042078727983e+00 4.7622031559045981e+00 -1.5874010519681994e+00 0 0 0 +882 2 7.1433047338568993e+00 5.5559036818886973e+00 -1.5874010519681994e+00 0 0 0 +885 2 7.9370052598409968e+00 4.7622031559045981e+00 -1.5874010519681994e+00 0 0 0 +886 2 8.7307057858250960e+00 5.5559036818886973e+00 -1.5874010519681994e+00 0 0 0 +889 2 0.0000000000000000e+00 6.3496042078727983e+00 -1.5874010519681994e+00 0 0 0 +890 2 7.9370052598409979e-01 7.1433047338568993e+00 -1.5874010519681994e+00 0 0 0 +893 2 1.5874010519681996e+00 6.3496042078727983e+00 -1.5874010519681994e+00 0 0 0 +894 2 2.3811015779522990e+00 7.1433047338568993e+00 -1.5874010519681994e+00 0 0 0 +897 2 3.1748021039363992e+00 6.3496042078727983e+00 -1.5874010519681994e+00 0 0 0 +898 2 3.9685026299204984e+00 7.1433047338568993e+00 -1.5874010519681994e+00 0 0 0 +901 2 4.7622031559045981e+00 6.3496042078727983e+00 -1.5874010519681994e+00 0 0 0 +902 2 5.5559036818886973e+00 7.1433047338568993e+00 -1.5874010519681994e+00 0 0 0 +905 2 6.3496042078727983e+00 6.3496042078727983e+00 -1.5874010519681994e+00 0 0 0 +906 2 7.1433047338568993e+00 7.1433047338568993e+00 -1.5874010519681994e+00 0 0 0 +909 2 7.9370052598409968e+00 6.3496042078727983e+00 -1.5874010519681994e+00 0 0 0 +910 2 8.7307057858250960e+00 7.1433047338568993e+00 -1.5874010519681994e+00 0 0 0 +913 2 0.0000000000000000e+00 7.9370052598409968e+00 -1.5874010519681994e+00 0 0 0 +914 2 7.9370052598409979e-01 8.7307057858250960e+00 -1.5874010519681994e+00 0 0 0 +917 2 1.5874010519681996e+00 7.9370052598409968e+00 -1.5874010519681994e+00 0 0 0 +918 2 2.3811015779522990e+00 8.7307057858250960e+00 -1.5874010519681994e+00 0 0 0 +921 2 3.1748021039363992e+00 7.9370052598409968e+00 -1.5874010519681994e+00 0 0 0 +922 2 3.9685026299204984e+00 8.7307057858250960e+00 -1.5874010519681994e+00 0 0 0 +925 2 4.7622031559045981e+00 7.9370052598409968e+00 -1.5874010519681994e+00 0 0 0 +926 2 5.5559036818886973e+00 8.7307057858250960e+00 -1.5874010519681994e+00 0 0 0 +929 2 6.3496042078727983e+00 7.9370052598409968e+00 -1.5874010519681994e+00 0 0 0 +930 2 7.1433047338568993e+00 8.7307057858250960e+00 -1.5874010519681994e+00 0 0 0 +933 2 7.9370052598409968e+00 7.9370052598409968e+00 -1.5874010519681994e+00 0 0 0 +934 2 8.7307057858250960e+00 8.7307057858250960e+00 -1.5874010519681994e+00 0 0 0 +795 2 7.9370052598409979e-01 0.0000000000000000e+00 -7.9370052598409924e-01 0 0 0 +796 2 0.0000000000000000e+00 7.9370052598409979e-01 -7.9370052598409924e-01 0 0 0 +937 2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +938 2 7.9370052598409979e-01 7.9370052598409979e-01 0.0000000000000000e+00 0 0 0 +799 2 2.3811015779522990e+00 0.0000000000000000e+00 -7.9370052598409924e-01 0 0 0 +800 2 1.5874010519681996e+00 7.9370052598409979e-01 -7.9370052598409924e-01 0 0 0 +939 2 1.5874010519681996e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +940 2 2.3811015779522990e+00 7.9370052598409979e-01 0.0000000000000000e+00 0 0 0 +803 2 3.9685026299204984e+00 0.0000000000000000e+00 -7.9370052598409924e-01 0 0 0 +804 2 3.1748021039363992e+00 7.9370052598409979e-01 -7.9370052598409924e-01 0 0 0 +941 2 3.1748021039363992e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +942 2 3.9685026299204984e+00 7.9370052598409979e-01 0.0000000000000000e+00 0 0 0 +807 2 5.5559036818886973e+00 0.0000000000000000e+00 -7.9370052598409924e-01 0 0 0 +808 2 4.7622031559045981e+00 7.9370052598409979e-01 -7.9370052598409924e-01 0 0 0 +943 2 4.7622031559045981e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +944 2 5.5559036818886973e+00 7.9370052598409979e-01 0.0000000000000000e+00 0 0 0 +811 2 7.1433047338568993e+00 0.0000000000000000e+00 -7.9370052598409924e-01 0 0 0 +812 2 6.3496042078727983e+00 7.9370052598409979e-01 -7.9370052598409924e-01 0 0 0 +945 2 6.3496042078727983e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +946 2 7.1433047338568993e+00 7.9370052598409979e-01 0.0000000000000000e+00 0 0 0 +815 2 8.7307057858250960e+00 0.0000000000000000e+00 -7.9370052598409924e-01 0 0 0 +816 2 7.9370052598409968e+00 7.9370052598409979e-01 -7.9370052598409924e-01 0 0 0 +947 2 7.9370052598409968e+00 0.0000000000000000e+00 0.0000000000000000e+00 0 0 0 +948 2 8.7307057858250960e+00 7.9370052598409979e-01 0.0000000000000000e+00 0 0 0 +819 2 7.9370052598409979e-01 1.5874010519681996e+00 -7.9370052598409924e-01 0 0 0 +820 2 0.0000000000000000e+00 2.3811015779522990e+00 -7.9370052598409924e-01 0 0 0 +949 2 0.0000000000000000e+00 1.5874010519681996e+00 0.0000000000000000e+00 0 0 0 +950 2 7.9370052598409979e-01 2.3811015779522990e+00 0.0000000000000000e+00 0 0 0 +823 2 2.3811015779522990e+00 1.5874010519681996e+00 -7.9370052598409924e-01 0 0 0 +824 2 1.5874010519681996e+00 2.3811015779522990e+00 -7.9370052598409924e-01 0 0 0 +951 2 1.5874010519681996e+00 1.5874010519681996e+00 0.0000000000000000e+00 0 0 0 +952 2 2.3811015779522990e+00 2.3811015779522990e+00 0.0000000000000000e+00 0 0 0 +827 2 3.9685026299204984e+00 1.5874010519681996e+00 -7.9370052598409924e-01 0 0 0 +828 2 3.1748021039363992e+00 2.3811015779522990e+00 -7.9370052598409924e-01 0 0 0 +953 2 3.1748021039363992e+00 1.5874010519681996e+00 0.0000000000000000e+00 0 0 0 +954 2 3.9685026299204984e+00 2.3811015779522990e+00 0.0000000000000000e+00 0 0 0 +831 2 5.5559036818886973e+00 1.5874010519681996e+00 -7.9370052598409924e-01 0 0 0 +832 2 4.7622031559045981e+00 2.3811015779522990e+00 -7.9370052598409924e-01 0 0 0 +955 2 4.7622031559045981e+00 1.5874010519681996e+00 0.0000000000000000e+00 0 0 0 +956 2 5.5559036818886973e+00 2.3811015779522990e+00 0.0000000000000000e+00 0 0 0 +835 2 7.1433047338568993e+00 1.5874010519681996e+00 -7.9370052598409924e-01 0 0 0 +836 2 6.3496042078727983e+00 2.3811015779522990e+00 -7.9370052598409924e-01 0 0 0 +957 2 6.3496042078727983e+00 1.5874010519681996e+00 0.0000000000000000e+00 0 0 0 +958 2 7.1433047338568993e+00 2.3811015779522990e+00 0.0000000000000000e+00 0 0 0 +839 2 8.7307057858250960e+00 1.5874010519681996e+00 -7.9370052598409924e-01 0 0 0 +840 2 7.9370052598409968e+00 2.3811015779522990e+00 -7.9370052598409924e-01 0 0 0 +959 2 7.9370052598409968e+00 1.5874010519681996e+00 0.0000000000000000e+00 0 0 0 +960 2 8.7307057858250960e+00 2.3811015779522990e+00 0.0000000000000000e+00 0 0 0 +843 2 7.9370052598409979e-01 3.1748021039363992e+00 -7.9370052598409924e-01 0 0 0 +844 2 0.0000000000000000e+00 3.9685026299204984e+00 -7.9370052598409924e-01 0 0 0 +961 2 0.0000000000000000e+00 3.1748021039363992e+00 0.0000000000000000e+00 0 0 0 +962 2 7.9370052598409979e-01 3.9685026299204984e+00 0.0000000000000000e+00 0 0 0 +847 2 2.3811015779522990e+00 3.1748021039363992e+00 -7.9370052598409924e-01 0 0 0 +848 2 1.5874010519681996e+00 3.9685026299204984e+00 -7.9370052598409924e-01 0 0 0 +963 2 1.5874010519681996e+00 3.1748021039363992e+00 0.0000000000000000e+00 0 0 0 +964 2 2.3811015779522990e+00 3.9685026299204984e+00 0.0000000000000000e+00 0 0 0 +851 2 3.9685026299204984e+00 3.1748021039363992e+00 -7.9370052598409924e-01 0 0 0 +852 2 3.1748021039363992e+00 3.9685026299204984e+00 -7.9370052598409924e-01 0 0 0 +965 2 3.1748021039363992e+00 3.1748021039363992e+00 0.0000000000000000e+00 0 0 0 +966 2 3.9685026299204984e+00 3.9685026299204984e+00 0.0000000000000000e+00 0 0 0 +855 2 5.5559036818886973e+00 3.1748021039363992e+00 -7.9370052598409924e-01 0 0 0 +856 2 4.7622031559045981e+00 3.9685026299204984e+00 -7.9370052598409924e-01 0 0 0 +967 2 4.7622031559045981e+00 3.1748021039363992e+00 0.0000000000000000e+00 0 0 0 +968 2 5.5559036818886973e+00 3.9685026299204984e+00 0.0000000000000000e+00 0 0 0 +859 2 7.1433047338568993e+00 3.1748021039363992e+00 -7.9370052598409924e-01 0 0 0 +860 2 6.3496042078727983e+00 3.9685026299204984e+00 -7.9370052598409924e-01 0 0 0 +969 2 6.3496042078727983e+00 3.1748021039363992e+00 0.0000000000000000e+00 0 0 0 +970 2 7.1433047338568993e+00 3.9685026299204984e+00 0.0000000000000000e+00 0 0 0 +863 2 8.7307057858250960e+00 3.1748021039363992e+00 -7.9370052598409924e-01 0 0 0 +864 2 7.9370052598409968e+00 3.9685026299204984e+00 -7.9370052598409924e-01 0 0 0 +971 2 7.9370052598409968e+00 3.1748021039363992e+00 0.0000000000000000e+00 0 0 0 +972 2 8.7307057858250960e+00 3.9685026299204984e+00 0.0000000000000000e+00 0 0 0 +867 2 7.9370052598409979e-01 4.7622031559045981e+00 -7.9370052598409924e-01 0 0 0 +868 2 0.0000000000000000e+00 5.5559036818886973e+00 -7.9370052598409924e-01 0 0 0 +973 2 0.0000000000000000e+00 4.7622031559045981e+00 0.0000000000000000e+00 0 0 0 +974 2 7.9370052598409979e-01 5.5559036818886973e+00 0.0000000000000000e+00 0 0 0 +871 2 2.3811015779522990e+00 4.7622031559045981e+00 -7.9370052598409924e-01 0 0 0 +872 2 1.5874010519681996e+00 5.5559036818886973e+00 -7.9370052598409924e-01 0 0 0 +975 2 1.5874010519681996e+00 4.7622031559045981e+00 0.0000000000000000e+00 0 0 0 +976 2 2.3811015779522990e+00 5.5559036818886973e+00 0.0000000000000000e+00 0 0 0 +875 2 3.9685026299204984e+00 4.7622031559045981e+00 -7.9370052598409924e-01 0 0 0 +876 2 3.1748021039363992e+00 5.5559036818886973e+00 -7.9370052598409924e-01 0 0 0 +977 2 3.1748021039363992e+00 4.7622031559045981e+00 0.0000000000000000e+00 0 0 0 +978 2 3.9685026299204984e+00 5.5559036818886973e+00 0.0000000000000000e+00 0 0 0 +879 2 5.5559036818886973e+00 4.7622031559045981e+00 -7.9370052598409924e-01 0 0 0 +880 2 4.7622031559045981e+00 5.5559036818886973e+00 -7.9370052598409924e-01 0 0 0 +979 2 4.7622031559045981e+00 4.7622031559045981e+00 0.0000000000000000e+00 0 0 0 +980 2 5.5559036818886973e+00 5.5559036818886973e+00 0.0000000000000000e+00 0 0 0 +883 2 7.1433047338568993e+00 4.7622031559045981e+00 -7.9370052598409924e-01 0 0 0 +884 2 6.3496042078727983e+00 5.5559036818886973e+00 -7.9370052598409924e-01 0 0 0 +981 2 6.3496042078727983e+00 4.7622031559045981e+00 0.0000000000000000e+00 0 0 0 +982 2 7.1433047338568993e+00 5.5559036818886973e+00 0.0000000000000000e+00 0 0 0 +887 2 8.7307057858250960e+00 4.7622031559045981e+00 -7.9370052598409924e-01 0 0 0 +888 2 7.9370052598409968e+00 5.5559036818886973e+00 -7.9370052598409924e-01 0 0 0 +983 2 7.9370052598409968e+00 4.7622031559045981e+00 0.0000000000000000e+00 0 0 0 +984 2 8.7307057858250960e+00 5.5559036818886973e+00 0.0000000000000000e+00 0 0 0 +891 2 7.9370052598409979e-01 6.3496042078727983e+00 -7.9370052598409924e-01 0 0 0 +892 2 0.0000000000000000e+00 7.1433047338568993e+00 -7.9370052598409924e-01 0 0 0 +985 2 0.0000000000000000e+00 6.3496042078727983e+00 0.0000000000000000e+00 0 0 0 +986 2 7.9370052598409979e-01 7.1433047338568993e+00 0.0000000000000000e+00 0 0 0 +895 2 2.3811015779522990e+00 6.3496042078727983e+00 -7.9370052598409924e-01 0 0 0 +896 2 1.5874010519681996e+00 7.1433047338568993e+00 -7.9370052598409924e-01 0 0 0 +987 2 1.5874010519681996e+00 6.3496042078727983e+00 0.0000000000000000e+00 0 0 0 +988 2 2.3811015779522990e+00 7.1433047338568993e+00 0.0000000000000000e+00 0 0 0 +899 2 3.9685026299204984e+00 6.3496042078727983e+00 -7.9370052598409924e-01 0 0 0 +900 2 3.1748021039363992e+00 7.1433047338568993e+00 -7.9370052598409924e-01 0 0 0 +989 2 3.1748021039363992e+00 6.3496042078727983e+00 0.0000000000000000e+00 0 0 0 +990 2 3.9685026299204984e+00 7.1433047338568993e+00 0.0000000000000000e+00 0 0 0 +903 2 5.5559036818886973e+00 6.3496042078727983e+00 -7.9370052598409924e-01 0 0 0 +904 2 4.7622031559045981e+00 7.1433047338568993e+00 -7.9370052598409924e-01 0 0 0 +991 2 4.7622031559045981e+00 6.3496042078727983e+00 0.0000000000000000e+00 0 0 0 +992 2 5.5559036818886973e+00 7.1433047338568993e+00 0.0000000000000000e+00 0 0 0 +907 2 7.1433047338568993e+00 6.3496042078727983e+00 -7.9370052598409924e-01 0 0 0 +908 2 6.3496042078727983e+00 7.1433047338568993e+00 -7.9370052598409924e-01 0 0 0 +993 2 6.3496042078727983e+00 6.3496042078727983e+00 0.0000000000000000e+00 0 0 0 +994 2 7.1433047338568993e+00 7.1433047338568993e+00 0.0000000000000000e+00 0 0 0 +911 2 8.7307057858250960e+00 6.3496042078727983e+00 -7.9370052598409924e-01 0 0 0 +912 2 7.9370052598409968e+00 7.1433047338568993e+00 -7.9370052598409924e-01 0 0 0 +995 2 7.9370052598409968e+00 6.3496042078727983e+00 0.0000000000000000e+00 0 0 0 +996 2 8.7307057858250960e+00 7.1433047338568993e+00 0.0000000000000000e+00 0 0 0 +915 2 7.9370052598409979e-01 7.9370052598409968e+00 -7.9370052598409924e-01 0 0 0 +916 2 0.0000000000000000e+00 8.7307057858250960e+00 -7.9370052598409924e-01 0 0 0 +997 2 0.0000000000000000e+00 7.9370052598409968e+00 0.0000000000000000e+00 0 0 0 +998 2 7.9370052598409979e-01 8.7307057858250960e+00 0.0000000000000000e+00 0 0 0 +919 2 2.3811015779522990e+00 7.9370052598409968e+00 -7.9370052598409924e-01 0 0 0 +920 2 1.5874010519681996e+00 8.7307057858250960e+00 -7.9370052598409924e-01 0 0 0 +999 2 1.5874010519681996e+00 7.9370052598409968e+00 0.0000000000000000e+00 0 0 0 +1000 2 2.3811015779522990e+00 8.7307057858250960e+00 0.0000000000000000e+00 0 0 0 +923 2 3.9685026299204984e+00 7.9370052598409968e+00 -7.9370052598409924e-01 0 0 0 +924 2 3.1748021039363992e+00 8.7307057858250960e+00 -7.9370052598409924e-01 0 0 0 +1001 2 3.1748021039363992e+00 7.9370052598409968e+00 0.0000000000000000e+00 0 0 0 +1002 2 3.9685026299204984e+00 8.7307057858250960e+00 0.0000000000000000e+00 0 0 0 +927 2 5.5559036818886973e+00 7.9370052598409968e+00 -7.9370052598409924e-01 0 0 0 +928 2 4.7622031559045981e+00 8.7307057858250960e+00 -7.9370052598409924e-01 0 0 0 +1003 2 4.7622031559045981e+00 7.9370052598409968e+00 0.0000000000000000e+00 0 0 0 +1004 2 5.5559036818886973e+00 8.7307057858250960e+00 0.0000000000000000e+00 0 0 0 +931 2 7.1433047338568993e+00 7.9370052598409968e+00 -7.9370052598409924e-01 0 0 0 +932 2 6.3496042078727983e+00 8.7307057858250960e+00 -7.9370052598409924e-01 0 0 0 +1005 2 6.3496042078727983e+00 7.9370052598409968e+00 0.0000000000000000e+00 0 0 0 +1006 2 7.1433047338568993e+00 8.7307057858250960e+00 0.0000000000000000e+00 0 0 0 +935 2 8.7307057858250960e+00 7.9370052598409968e+00 -7.9370052598409924e-01 0 0 0 +936 2 7.9370052598409968e+00 8.7307057858250960e+00 -7.9370052598409924e-01 0 0 0 +1007 2 7.9370052598409968e+00 7.9370052598409968e+00 0.0000000000000000e+00 0 0 0 +1008 2 8.7307057858250960e+00 8.7307057858250960e+00 0.0000000000000000e+00 0 0 0 +189 1 1.3887035930193850e+00 9.6443047942402793e-01 9.8823228629224491e-01 0 1 0 +575 1 1.4274352200685940e+00 1.4930614363689618e+00 1.8570539853301360e+00 1 0 0 +349 1 5.5159299982031240e-01 4.9062844944486361e-01 1.5124564427742360e+00 1 1 0 +216 1 3.7830289542434192e-01 1.5639962540224992e+00 1.3432448374020345e+00 1 1 0 +55 1 1.9750287912689981e+00 2.5768305213803416e-01 1.7428116063841796e+00 1 1 0 +111 1 3.5827565707557794e+00 5.8906094545476617e-01 1.0489902856335147e+00 0 0 0 +624 1 4.4186537476094037e+00 1.4541308304734797e+00 9.9970278911426691e-01 0 1 0 +263 1 5.3856006768793039e+00 7.1992721677160187e-01 1.3730304119323515e+00 1 0 0 +31 1 7.1004544113457015e+00 4.3495991902128556e-01 1.0698214459037216e+00 0 1 0 +603 1 6.8561530718678396e+00 1.5052634400370188e+00 1.2333409979206125e+00 0 0 0 +281 1 8.0316719589679888e+00 1.1148324810573511e+00 1.1874606270746777e+00 -1 0 0 +22 1 8.4978329476281260e+00 1.7816953403041130e-01 8.8117126998247863e-01 0 1 0 +321 1 9.0561495847757367e+00 1.0599770851269745e+00 1.6617977211617008e+00 0 1 0 +251 1 8.4076590052596600e+00 2.6264447971193772e-01 1.9523618641599669e+00 -1 1 0 +470 1 3.0623665403758552e-02 2.8888641843142508e+00 1.0573831609786952e+00 0 0 0 +355 1 1.1418667595573984e+00 2.7317291917619326e+00 1.0575956147070533e+00 1 1 0 +417 1 5.1728619636257844e-01 2.8247604334794847e+00 1.9860684570268854e+00 0 1 0 +288 1 2.7306606801635556e+00 2.0303263423122875e+00 1.0034125464042467e+00 1 2 0 +375 1 3.6638789796655211e+00 1.9910854610863771e+00 1.6089477883631074e+00 0 2 0 +270 1 4.6698019383089129e+00 1.9976536501697884e+00 1.7975841437315547e+00 0 1 0 +398 1 4.8357658607360721e+00 3.0030359292308466e+00 1.6326889749121238e+00 0 0 0 +109 1 6.0507479267861530e+00 2.3986670597148758e+00 1.1358980440669157e+00 -2 2 0 +545 1 8.7844935973101475e+00 1.7445221456769211e+00 7.9088531583347665e-01 0 1 0 +700 1 8.4768197316002905e+00 2.8864260924251104e+00 8.9632509206101607e-01 0 0 0 +256 1 8.5259831487511288e+00 1.9604421933239242e+00 1.7018228825974882e+00 0 0 0 +57 1 1.0933484875703767e+00 3.7998605800826795e+00 1.1429284943096927e+00 1 0 0 +225 1 2.3118241109824997e+00 3.6931607591183542e+00 1.5347268814233106e+00 0 0 0 +211 1 2.1885116961775020e+00 4.7473637039361307e+00 7.7988125770797667e-01 1 1 0 +16 1 3.8414323228903053e+00 4.5056120156243464e+00 1.7620663491838218e+00 0 0 0 +435 1 3.9289905658849360e+00 3.4395497323463546e+00 1.6016151797402647e+00 0 0 0 +348 1 3.2728893199792326e+00 4.0839168747871373e+00 9.3000188487682001e-01 -1 2 0 +5 1 4.6895084948294565e+00 4.2253163250468511e+00 1.1454178205122150e+00 1 2 0 +358 1 5.9822540668934732e+00 4.5126426897365510e+00 1.0397200230047050e+00 0 0 0 +12 1 7.5137758076840582e+00 3.6363046735086306e+00 1.2107024140230909e+00 0 0 0 +654 1 6.4191256228277540e+00 3.4584416187056215e+00 1.6477573909581575e+00 -1 1 0 +49 1 9.3433668152451492e+00 4.3975516334041425e+00 9.9598726282789252e-01 -2 1 0 +467 1 8.7563012799208781e+00 3.7263584957281157e+00 1.6071254701217317e+00 1 0 0 +121 1 8.3019907531825741e+00 4.6679316223340175e+00 1.4269803695048098e+00 0 0 0 +311 1 1.1253134598153960e+00 5.2955997910576622e+00 1.0407061420624450e+00 1 1 0 +86 1 2.0826587216536308e-01 6.0033497866260008e+00 1.0761879585385754e+00 1 0 0 +745 1 2.7327751508308649e+00 5.9127188948638167e+00 1.8144177914745718e+00 1 2 0 +772 1 4.3942624541702076e+00 5.9381534188483167e+00 1.3371081244885088e+00 1 -1 0 +223 1 3.9014398620069439e+00 4.9586114728480748e+00 7.8698639307304208e-01 1 0 0 +269 1 5.8477373057172262e+00 6.3390843058440582e+00 1.0216969722334419e+00 0 1 0 +559 1 5.4112263683525139e+00 4.9616146148130511e+00 2.0251168676681193e+00 -1 0 0 +353 1 7.1980999583811389e+00 5.2120721130736047e+00 1.7642846736721687e+00 0 1 0 +446 1 6.9337656741605640e+00 4.9371290994370192e+00 8.1979862689016259e-01 -1 1 0 +147 1 6.8757723827470274e+00 6.0960387828984404e+00 1.0417633685962133e+00 -1 1 0 +439 1 7.9499072376016038e+00 5.7927233011342310e+00 9.2829236487336886e-01 -1 0 0 +310 1 9.0637386813346179e+00 5.3846767273485794e+00 1.5220764763824066e+00 1 1 0 +206 1 8.3239321468871399e+00 5.9477081144024257e+00 1.8730689221200649e+00 1 0 0 +648 1 7.2731145819607823e-01 6.9548750779884285e+00 1.4245507604120704e+00 1 0 0 +450 1 7.7227876647269833e-01 7.8978783354527193e+00 8.2143743781652134e-01 1 0 0 +237 1 1.7454870164695224e+00 6.4287841498637093e+00 1.4866685942109130e+00 0 0 0 +596 1 1.6937541784004966e+00 7.3340366171978326e+00 8.2760460250426027e-01 1 0 0 +604 1 2.9474328789783564e+00 7.3431778355630772e+00 7.5865868258650015e-01 1 0 0 +276 1 3.5124847815265685e+00 6.8606839648093034e+00 1.7477140758714809e+00 0 0 0 +36 1 4.7895791235676857e+00 7.7036197959871169e+00 1.8789056798312882e+00 0 0 0 +93 1 5.7510715090203846e+00 7.0218270658866695e+00 1.8643581649786207e+00 2 0 0 +240 1 6.4953476029508579e+00 7.2332071565243776e+00 9.0633447738259343e-01 1 -1 0 +466 1 7.1242895956139183e+00 6.8373838116304348e+00 1.8176104765424577e+00 0 0 0 +210 1 7.6579637923166022e+00 7.4930959054100832e+00 9.0137952281118905e-01 0 0 0 +333 1 7.4318434352029961e+00 7.8931702499038678e+00 1.8970764695591629e+00 0 0 0 +670 1 9.1743384857154133e+00 6.7167295329985501e+00 1.8496194667988226e+00 0 0 0 +140 1 8.1168335876890367e+00 7.1035370158455935e+00 1.6815571666814628e+00 0 -1 0 +7 1 8.8396630856634566e+00 6.5245074207441220e+00 8.2140076858251720e-01 0 -1 0 +285 1 9.3328207654552191e+00 7.4740298308622890e+00 9.5782337775250037e-01 1 1 0 +394 1 5.1457872724117593e-01 8.6570230435747106e+00 1.4948884742475501e+00 0 0 0 +781 1 1.4337244728262231e+00 7.9389594942882260e+00 1.5744948386030115e+00 0 0 0 +215 1 1.2820766291825116e+00 9.3717166628016262e+00 1.0242713597386390e+00 0 0 0 +390 1 2.2364061362708076e+00 8.5769643176543688e+00 9.4989967041278844e-01 1 0 0 +246 1 4.3399957962171740e+00 8.9675988871998236e+00 1.9524943766550396e+00 1 -1 0 +771 1 3.2171691456115421e+00 9.0801971536537636e+00 1.0831878959377768e+00 1 0 0 +87 1 3.6519569136416323e+00 8.2259842685587863e+00 9.3617337101880260e-01 1 -1 0 +4 1 6.0992855717412047e+00 9.4554965627199525e+00 1.5661204111131393e+00 1 -1 0 +185 1 4.7644125931431685e+00 8.7255182105977855e+00 9.0862128411093002e-01 1 0 0 +52 1 7.9048832790477466e+00 8.4292113107303361e+00 1.0717178640078862e+00 -2 0 0 +32 1 7.1598104648187668e+00 9.1623398862022043e+00 1.7914110874744249e+00 0 1 0 +744 1 6.3776087416876104e+00 8.2904484010795176e+00 1.4671598424621479e+00 0 0 0 +123 1 6.6886292334641260e+00 9.0277923974007823e+00 7.7417834757356474e-01 0 1 0 +320 1 9.0635014572589068e+00 8.9369737211061508e+00 1.6449201563374520e+00 -1 0 0 +679 1 9.4311364993561799e+00 8.7500509917944971e+00 7.0567771676283020e-01 -1 0 0 +112 1 8.7979918322451596e+00 7.9495506859490890e+00 1.8124150188207659e+00 1 0 0 +11 1 1.0145209042829710e+00 7.9335478589849673e-01 2.4900898528351889e+00 2 1 0 +497 1 1.3295783650342041e-01 1.5790009340823399e+00 2.4550141225692599e+00 0 0 0 +24 1 1.7655590649688384e+00 1.4956878333616819e-01 2.9414490101269788e+00 2 1 0 +709 1 3.1618598750338496e+00 5.0508100285035051e-01 2.0962224790357049e+00 0 1 0 +74 1 1.8233268244291132e+00 1.3237764198678328e+00 3.0617177829302129e+00 0 3 0 +318 1 2.4134590635154760e+00 1.4468576684067560e+00 2.1161841955970537e+00 0 1 0 +98 1 2.4924288931726166e+00 5.6395031809805674e-01 3.5283793802039405e+00 0 1 0 +89 1 4.3153945726262686e+00 1.1530563756605436e+00 2.4051898043193494e+00 1 0 0 +525 1 3.4900195939069745e+00 5.5237545553071976e-01 3.0844552541293870e+00 0 1 0 +151 1 5.3404116731464164e+00 1.4335822758490377e+00 2.2792817101081284e+00 -1 1 0 +110 1 5.8649860762759332e+00 1.5139451553819203e+00 3.5156745831285390e+00 0 2 0 +78 1 5.0152709663625910e+00 9.7395887278700266e-01 3.2611717912369640e+00 0 0 0 +341 1 4.9620176203028281e+00 4.8001241195484115e-02 2.6497246651476707e+00 2 1 0 +186 1 6.0629679506506715e+00 5.3796531236416001e-01 2.3943413109646041e+00 0 1 0 +650 1 7.3149139051488596e+00 2.3658998559164893e-01 2.6438017646284195e+00 0 2 0 +452 1 6.8257589586895877e+00 1.4453801996333135e+00 2.8731885344982246e+00 1 1 0 +617 1 7.8441222696672384e+00 1.4537305683183117e+00 3.4782324106065921e+00 0 0 0 +338 1 8.5689599869154733e+00 6.8820148303026085e-01 2.9864717191864139e+00 -1 1 0 +155 1 9.4744559846638676e+00 4.4517645648662807e-01 2.3963975137952005e+00 0 0 0 +107 1 9.5165319309882257e+00 1.3643541874905787e+00 3.4587891707434357e+00 -1 1 0 +402 1 7.9697660003834141e+00 1.0955238090760844e+00 2.3310566504065129e+00 -1 1 0 +168 1 1.1023487820467624e-01 2.5141657173398904e+00 3.2278579978294735e+00 0 1 0 +590 1 1.0124622460197308e+00 1.6926462057908869e+00 3.5247313853074091e+00 0 1 0 +454 1 1.1943807627584715e+00 2.1248561481758808e+00 2.5275355121828418e+00 0 1 0 +359 1 1.1494185547567330e+00 3.0231664821906148e+00 3.1310545282040505e+00 1 0 0 +451 1 1.5812396693566697e+00 2.8467904151251555e+00 2.0581733141682039e+00 0 0 0 +169 1 2.4534486491425214e+00 2.1191524764417085e+00 3.5667541093556809e+00 1 2 0 +28 1 2.3200710079191293e+00 2.9757357576128332e+00 2.9287749822556268e+00 0 1 0 +142 1 3.4362104229108374e+00 2.1329167895388879e+00 2.8128550656808957e+00 0 1 0 +582 1 4.4104788909120654e+00 2.0500877916185085e+00 3.0908316321543126e+00 1 1 0 +487 1 4.1882600596227810e+00 3.0794406548661750e+00 2.5647673178342285e+00 -1 -1 0 +611 1 5.5908713016738076e+00 2.7490836253512079e+00 2.9139390589286354e+00 0 1 0 +521 1 6.5777520460822183e+00 2.4136927960342183e+00 3.3000381807622063e+00 0 1 0 +268 1 7.7225700746201174e+00 2.5344936738002599e+00 3.5076572910547545e+00 0 1 0 +346 1 6.4289635168508967e+00 2.2509294267100763e+00 2.2840492570180602e+00 -1 0 0 +94 1 7.6415296501059480e+00 2.1006953221290114e+00 2.5920473559744179e+00 1 0 0 +542 1 8.7351946468515163e+00 3.0808384475592825e+00 3.5418505814821679e+00 -1 0 0 +83 1 8.9273427288853977e+00 2.9062377394139634e+00 2.1899911707240238e+00 0 0 0 +414 1 8.6816778784263917e+00 2.0723379410211100e+00 2.7551548221793625e+00 -1 1 0 +400 1 9.6130342870167917e-01 3.8236977590869063e+00 2.2685270746789916e+00 0 0 0 +407 1 2.9985481017602837e+00 3.6329317964354702e+00 2.4386197925305240e+00 1 -1 0 +97 1 1.9475855952147925e+00 3.8970675476184722e+00 2.7037011654404539e+00 -1 1 0 +18 1 2.0584006141172875e+00 4.4798395323459328e+00 3.4550074343313604e+00 1 0 0 +336 1 4.5635864841695541e+00 4.1191039908738851e+00 2.4236479217184610e+00 1 1 0 +350 1 3.6169419859916734e+00 3.1903807434360449e+00 3.4573904236944064e+00 0 0 0 +166 1 3.4159628958306967e+00 4.4607664710906700e+00 2.9023278314379759e+00 0 1 0 +460 1 5.5784078276070765e+00 3.9561240683938901e+00 2.3115081675748277e+00 -1 1 0 +301 1 6.0896289862752120e+00 3.8125387212455779e+00 3.4590911345902584e+00 0 0 0 +180 1 4.8914396531217434e+00 3.5347033299934107e+00 3.3869863914288154e+00 0 1 0 +196 1 7.3416833054813315e+00 4.4492466038004892e+00 2.8412960942673782e+00 -1 0 0 +242 1 6.9238548217609912e+00 3.4395381757550529e+00 2.8620369126406233e+00 0 1 0 +577 1 6.4652932747599552e+00 4.4694976882523703e+00 2.0532065486082640e+00 -1 0 0 +69 1 9.4886142998460503e+00 3.6449097868686460e+00 2.6888258674414240e+00 -1 0 0 +128 1 9.1672048315640069e+00 4.5841452188208223e+00 2.0962254317632105e+00 -2 1 0 +306 1 8.6986370579544747e+00 4.2288686116524508e+00 3.2663440218948301e+00 0 1 0 +81 1 8.0649194599742220e+00 3.4219105137745371e+00 2.5913927414064166e+00 0 0 0 +192 1 3.5558377146176995e-01 4.9082465452656390e+00 3.1313748020401913e+00 1 1 0 +297 1 9.3885465114263189e-01 5.8987460881713760e+00 2.0361671379843869e+00 1 1 0 +684 1 1.6261433589828072e+00 5.5082201127808874e+00 2.8722894508279078e+00 0 0 0 +43 1 2.7218578938795797e+00 5.5240179833725236e+00 2.7853713179959589e+00 0 1 0 +356 1 2.1322041152613509e+00 6.1897394417167924e+00 3.5317127591909570e+00 1 1 0 +354 1 2.8542298304454121e+00 4.8112106290695174e+00 2.0324274577995660e+00 0 1 0 +37 1 4.1441869750325253e+00 5.6178007662555931e+00 2.5691938612663225e+00 -1 1 0 +204 1 4.6568290943515764e+00 4.8626091539560781e+00 3.3828350412117763e+00 0 1 0 +309 1 3.3120632939711347e+00 6.0761143729420839e+00 3.5064195018734230e+00 -1 -1 0 +238 1 4.4941495103608089e+00 5.8964661400272700e+00 3.4552848880878479e+00 1 -1 0 +227 1 5.3013969510044614e+00 6.0656966769123111e+00 2.0686519696869272e+00 1 -1 0 +625 1 5.6618832708414244e+00 6.0530795647417239e+00 3.0980874609205342e+00 1 0 0 +768 1 6.3098116773747277e+00 5.0932070941727874e+00 3.2068846036046921e+00 0 0 0 +697 1 6.6600443880376385e+00 5.9379729561110102e+00 2.1574020450720930e+00 1 0 0 +253 1 7.4113249029239086e+00 5.5274323212837508e+00 2.9074714554179888e+00 0 0 0 +40 1 8.3678693819028691e+00 6.1762452039193834e+00 2.9253961797280166e+00 0 1 0 +235 1 8.2301809037008784e+00 5.0912650807468989e+00 2.4930754582752930e+00 0 1 0 +316 1 9.3152297032911182e+00 5.5585964040954297e+00 2.5757898233297958e+00 -1 0 0 +214 1 1.0956205719169889e+00 6.4300999478516943e+00 3.5512204580705844e+00 1 1 0 +27 1 6.2722011068795236e-01 7.5184325439544164e+00 3.0311819260676049e+00 0 0 0 +199 1 1.3248006058923947e+00 6.9186676649583427e+00 2.3378462317834621e+00 1 1 0 +600 1 5.9566750778975060e-02 6.4621931192877948e+00 3.3059208290062267e+00 1 1 0 +432 1 2.8495609210474276e-01 7.8280004900563274e+00 2.1211366572016019e+00 1 -1 0 +184 1 1.9152847611873729e+00 7.2775067581293316e+00 3.4565884727255796e+00 1 0 0 +732 1 2.1795350657371855e+00 7.7015284736248377e+00 2.5146758995936711e+00 1 1 0 +682 1 2.5291552148646916e+00 6.7574897798715794e+00 2.5350076737530389e+00 0 -1 0 +9 1 3.1326356868723129e+00 7.5544355566781878e+00 2.8194014331617439e+00 -1 0 0 +141 1 3.9966390150590652e+00 7.7983449779420164e+00 2.4362846613189721e+00 0 0 0 +455 1 4.0454192453147897e+00 7.0829620363369239e+00 3.3529276999076574e+00 1 0 0 +133 1 4.4503664931984117e+00 6.5418967508803201e+00 2.5118659931288563e+00 0 -1 0 +14 1 5.2699559983945798e+00 7.2119160251006358e+00 2.8224000515017305e+00 0 0 0 +289 1 6.3121527551004073e+00 6.8026546603903579e+00 2.6719242187173888e+00 -1 0 0 +494 1 5.9908335857487804e+00 7.3199216582521887e+00 3.5576680952952544e+00 0 0 0 +516 1 6.0120027487562933e+00 7.8939401212365423e+00 2.6578934258219071e+00 -1 0 0 +399 1 7.4001294343419479e+00 6.8132492520749537e+00 2.8992676931154184e+00 0 0 0 +148 1 6.9821104277059813e+00 7.6663786004948999e+00 3.3072413515158967e+00 0 0 0 +440 1 8.9557368164070148e+00 7.3093503385086498e+00 2.7118563018543562e+00 0 0 0 +64 1 7.9892107922995983e+00 7.6030818895848045e+00 2.9167600035875982e+00 0 1 0 +677 1 5.7474437037275539e-01 8.9266612935643579e+00 3.3795865123748459e+00 1 0 0 +420 1 7.3631037086804318e-01 9.2271399293461176e+00 2.3750178699146680e+00 0 1 0 +120 1 1.5307873589224676e+00 8.4934837372884324e+00 3.1650030871506263e+00 1 1 0 +580 1 2.7626382961326206e+00 9.2642545840705246e+00 2.7564699434847522e+00 2 0 0 +42 1 2.8688631056736837e+00 8.3576949835598793e+00 3.3110625548385144e+00 0 -1 0 +234 1 3.0785380308498151e+00 8.4478292565278625e+00 2.0565500495555002e+00 0 0 0 +139 1 1.8414493210923515e+00 8.8367897895804965e+00 2.0715523915828857e+00 1 -1 0 +20 1 3.9671234858026705e+00 9.0167258097137442e+00 2.9761737756353912e+00 0 -1 0 +622 1 3.9337861629433464e+00 8.1423622991165221e+00 3.5283848234112312e+00 0 1 0 +681 1 5.8009385715253234e+00 8.9067138494201021e+00 2.5252582306519988e+00 0 0 0 +381 1 4.9774604807682392e+00 8.1982719389109544e+00 2.7226516112669632e+00 0 0 0 +561 1 5.8243193326395426e+00 8.5377421253756012e+00 3.5491668429884182e+00 0 1 0 +266 1 6.7660820634560910e+00 8.7222089872246755e+00 2.8012662537071016e+00 0 0 0 +615 1 7.8061107197739039e+00 8.7044021107046490e+00 2.7100908714275165e+00 0 1 0 +493 1 9.3465365581621001e+00 8.2077798991700295e+00 3.1166863309246780e+00 0 1 0 +366 1 8.9490710895806078e+00 9.1157429494202855e+00 2.7152533658124147e+00 0 -1 0 +367 1 1.5371159380250645e+00 8.0013350944530248e-01 4.0174735967169637e+00 0 0 0 +730 1 4.0525094439037268e-01 5.7801747452397134e-01 4.0686817651137499e+00 0 1 0 +706 1 8.3899885831312415e-01 1.9911283054230983e-01 5.0854739306277619e+00 0 1 0 +386 1 1.5557898198562674e+00 9.9886803257319634e-01 5.0603502859364831e+00 0 0 0 +243 1 5.4716218889653245e-01 1.2906170344992416e+00 5.0080421946400131e+00 1 2 0 +373 1 2.3153289953485254e+00 1.4063726194661577e+00 4.2793352937660094e+00 1 0 0 +792 1 2.4751033475338966e+00 2.4787719642018615e-02 4.7648251345134245e+00 1 1 0 +79 1 4.1055296003436226e+00 1.4578078726618062e+00 4.3864808059803542e+00 -1 0 0 +46 1 3.3025986048983245e+00 7.5053507449689838e-01 4.5183631218635751e+00 0 1 0 +511 1 5.9480821556066434e+00 4.9343981664341292e-02 3.7019615967708592e+00 -1 0 0 +177 1 5.9069065708856909e+00 3.7063504575630296e-01 4.7405767318817569e+00 1 1 0 +261 1 4.9804281132802020e+00 7.0027247091491029e-01 4.2942915427997113e+00 1 1 0 +731 1 6.9456603400637551e+00 1.3613459094344985e-01 4.7524430294520394e+00 -1 1 0 +207 1 7.7023272343284326e+00 9.4911508307022829e-01 4.4451145359090960e+00 0 1 0 +503 1 6.7743997818592936e+00 7.9466357427693246e-01 3.8547848235820124e+00 0 1 0 +232 1 9.3184157643378853e+00 3.6397791504744065e-01 5.1041674643860855e+00 -1 1 0 +33 1 8.8109522791770143e+00 8.9438288943342126e-01 4.0752014237076830e+00 0 0 0 +131 1 8.3044543964415354e+00 2.9578585926015150e-01 5.0881229396705887e+00 0 0 0 +339 1 1.9832441493720848e-01 2.1872706935308108e+00 4.3535829815196161e+00 0 1 0 +65 1 1.0852892258511946e+00 2.8346187544471011e+00 4.9175573113624758e+00 1 2 0 +680 1 2.9589586216591890e+00 2.1683019892710749e+00 4.8170045225333364e+00 0 1 0 +413 1 1.8835289628872323e+00 2.2816112051016306e+00 4.5617800321338891e+00 0 1 0 +241 1 4.2587757837795577e+00 3.0274708533146009e+00 4.4406611511263003e+00 0 0 0 +298 1 3.5725917382875836e+00 2.1645100835146072e+00 3.8972101690098371e+00 0 1 0 +640 1 5.1107132600949230e+00 2.0583401930949883e+00 4.9877742026445890e+00 0 1 0 +538 1 6.3231468156913540e+00 1.7305651587300674e+00 4.5746954135889961e+00 -1 1 0 +113 1 5.3775794945841202e+00 2.4030531829007158e+00 4.0258087845703594e+00 0 1 0 +723 1 6.2880006851000303e+00 2.7470020231473922e+00 4.4343170130445388e+00 0 1 0 +412 1 7.2931643453061703e+00 2.0994337132826848e+00 4.3348346931263828e+00 0 1 0 +713 1 8.7105621592719995e+00 2.0677958355175066e+00 3.8004790949846057e+00 0 1 0 +103 1 8.8146820393915384e+00 1.7104069763390093e+00 5.0637839497224197e+00 -1 0 0 +607 1 8.1495500261893064e+00 2.7302398276246094e+00 4.5556220774027318e+00 -2 0 0 +15 1 1.1011371368310006e+00 4.5278733226319883e+00 4.1277189417838906e+00 1 -2 0 +711 1 5.3478310543332219e-01 3.2337445860831946e+00 4.0469604557370502e+00 1 1 0 +277 1 6.6090676871473436e-02 4.1448230400218131e+00 4.1010088064918637e+00 0 0 0 +409 1 1.7040099469781975e+00 3.7319953144942630e+00 4.1361287227988131e+00 1 1 0 +124 1 2.5861640988139887e+00 4.3867161358139137e+00 4.8913117400092094e+00 0 1 0 +221 1 4.4012199741619780e+00 4.3562158703311367e+00 4.5548781247166188e+00 1 1 0 +392 1 5.2358021379881814e+00 3.4232083147100458e+00 4.3147067773467978e+00 0 0 0 +319 1 6.3363502377081984e+00 4.3820451988020270e+00 4.4642725122041567e+00 0 1 0 +249 1 7.5190968723150826e+00 3.6941800401983143e+00 3.8270762937797627e+00 0 0 0 +125 1 7.4310948892802529e+00 4.5447962142400691e+00 4.7303666011685914e+00 0 0 0 +770 1 7.1109085926261777e+00 3.5290305536606179e+00 4.8059114364861051e+00 0 1 0 +174 1 8.4970224389785542e+00 4.1469395599246184e+00 4.3118837592061281e+00 0 1 0 +273 1 9.0188337900945630e+00 3.2667581972394810e+00 4.8365475104248965e+00 0 0 0 +343 1 3.8771862204752583e-01 4.9214993724811116e+00 4.9151072409465746e+00 0 1 0 +597 1 5.2564944912131262e-01 5.6211627194154774e+00 3.9241651626506693e+00 0 1 0 +95 1 1.2182379805696983e+00 5.8647139888607880e+00 4.6187784947569295e+00 1 0 0 +2 1 1.6347668010968486e+00 4.9371709949061220e+00 4.8318175341448901e+00 -1 0 0 +200 1 2.3896962966554445e+00 5.4859882389267725e+00 4.0806573052238466e+00 0 1 0 +591 1 3.3196912194268218e+00 5.2578107205424427e+00 4.5171123147453880e+00 1 1 0 +188 1 3.8825913226877926e+00 6.3271186727929258e+00 4.3372934934427985e+00 0 0 0 +173 1 4.3914416041042195e+00 5.3765203405867910e+00 5.0445414315695984e+00 0 0 0 +62 1 5.3300995770619117e+00 4.7988071753146304e+00 4.4433440011386240e+00 0 1 0 +209 1 5.0082377951503325e+00 6.0861871853591509e+00 4.6689788095467186e+00 1 1 0 +231 1 6.0973453040054135e+00 5.6895512297398181e+00 4.4519158197369588e+00 -1 1 0 +686 1 7.0266252470237260e+00 5.2891560406480380e+00 4.0939139504292053e+00 0 0 0 +605 1 7.7881948048447525e+00 5.9375977442160792e+00 4.3033153252163219e+00 0 1 0 +313 1 6.6363263472418490e+00 6.3193147360255715e+00 3.6257772831363129e+00 0 0 0 +194 1 7.8594735550913839e+00 4.8924597662391642e+00 3.6959247051428727e+00 0 2 0 +434 1 6.8544451356836769e+00 6.0922678643290542e+00 5.0361147725795083e+00 -1 0 0 +465 1 8.8963280065401644e+00 5.2544437897788265e+00 3.6845697474537924e+00 -1 1 0 +262 1 8.4933957185386344e+00 5.0530768467005327e+00 4.6860283443221595e+00 -1 0 0 +154 1 1.6751878563697153e+00 6.7476484335783500e+00 4.8158520203366866e+00 1 1 0 +704 1 2.3445801580217633e+00 7.6948359315025714e+00 4.4049485249726192e+00 -1 0 0 +550 1 2.7428864614971191e+00 6.3909688175701982e+00 4.3425567031894783e+00 0 0 0 +647 1 4.2691335778526787e+00 7.3048048702823518e+00 4.3783998930313439e+00 0 0 0 +152 1 3.1998826275564927e+00 7.1985616284260745e+00 4.8301479570140442e+00 1 0 0 +105 1 3.2102209483440771e+00 7.3545761447607649e+00 3.8533201473762935e+00 -1 0 0 +639 1 5.0943217087350465e+00 7.9039300980988179e+00 3.8172446426585296e+00 0 1 0 +335 1 4.9125072704244248e+00 6.7505950288125280e+00 3.8286559931783479e+00 1 0 0 +574 1 5.7013143009031797e+00 6.9132039036101798e+00 4.4689382147499872e+00 -1 0 0 +34 1 5.8501198931234306e+00 7.8912608697722399e+00 5.0297897786287606e+00 0 1 0 +378 1 6.7812713557448623e+00 7.6175655824407844e+00 4.4207491820540357e+00 0 0 0 +198 1 7.4798322063318032e+00 6.8815950763448654e+00 4.9092902945147028e+00 0 1 0 +144 1 7.9218322588784300e+00 7.1770805401482614e+00 3.8730637817863287e+00 0 -1 0 +317 1 8.7081393479317022e+00 6.3790511040832545e+00 4.0061257184470636e+00 0 0 0 +636 1 9.0498006903787651e+00 7.6698261735622593e+00 4.1163994907988162e+00 -1 0 0 +630 1 8.6626598853541701e+00 6.9469206818544382e+00 5.0115627528198790e+00 1 0 0 +735 1 1.3664001775417554e+00 9.3910921318969294e+00 3.9741627763501297e+00 1 0 0 +82 1 1.2651816700298459e+00 7.9939140789193539e+00 4.2773952960766941e+00 0 -1 0 +462 1 4.6678374955336083e-01 8.7793652406030258e+00 4.4390353737773340e+00 1 2 0 +379 1 3.0896653849564073e+00 9.3122184513309936e+00 3.7328587420458139e+00 -1 0 0 +634 1 2.0826592359669522e+00 8.7162099999248319e+00 4.1874012694108966e+00 -1 1 0 +397 1 3.2041665659229408e+00 8.4033356796254033e+00 4.4518860006179448e+00 0 0 0 +599 1 3.9437820925193252e+00 9.4886010882501992e+00 4.4262174011952213e+00 0 0 0 +438 1 4.8764899925657490e+00 9.2682338399134032e+00 4.9696476056505929e+00 0 -1 0 +431 1 4.8498636293917334e+00 9.1418722774414967e+00 3.6904553597830483e+00 0 -1 0 +674 1 5.7512093091155130e+00 8.8840356837721774e+00 4.5382098206638863e+00 1 0 0 +478 1 4.8944175632253879e+00 8.0802760310993573e+00 4.9076162796553220e+00 0 1 0 +360 1 6.7804286348011349e+00 8.6137697760429717e+00 3.9781235921100557e+00 0 1 0 +364 1 7.6980463084371751e+00 9.4085272153096184e+00 4.0003105458214314e+00 0 -2 0 +755 1 7.8116719234001275e+00 8.0811659118470818e+00 4.6079453720572801e+00 -1 0 0 +201 1 9.0963726357304644e+00 9.3594920650058189e+00 3.7750033007852832e+00 0 0 0 +44 1 8.3839805276903139e+00 8.6269924796042705e+00 3.6740530631134614e+00 0 1 0 +193 1 8.9645839347791743e+00 8.7132086048001032e+00 4.6373651049026261e+00 -1 0 0 +449 1 1.2563596023434844e+00 1.2607027383752052e+00 6.0800200393707531e+00 0 1 0 +729 1 9.2781367329314868e-01 4.3458408261828015e-02 6.1908938373628599e+00 1 1 0 +660 1 3.1005957952069934e+00 1.1140335709598939e+00 6.4825841246268832e+00 0 2 0 +100 1 1.8984468098674521e+00 5.6895310980439784e-01 6.5472878640316416e+00 -1 0 0 +138 1 2.6282954539068872e+00 7.6387899726619579e-01 5.5509681503464909e+00 1 0 0 +678 1 4.5482663069124625e+00 6.2681991161978767e-01 5.2792274230354392e+00 1 0 0 +161 1 4.0597617834848174e+00 6.9194764165990841e-01 6.2853666474969065e+00 2 0 0 +547 1 3.5630131851193365e+00 1.1879355330462376e+00 5.5272443403642706e+00 0 1 0 +159 1 3.5710745379238613e+00 1.2533142613900944e-01 5.4148082679837737e+00 1 0 0 +312 1 4.6869342059579120e+00 1.4716634331354459e+00 5.9130389946334008e+00 -1 0 0 +326 1 5.8530383981049789e+00 1.1415743918398429e+00 6.6273382620931693e+00 1 0 0 +208 1 5.5279352514856885e+00 9.0581456205446909e-01 5.4303789718241466e+00 1 1 0 +136 1 5.1596060328510633e+00 7.4072700025775484e-02 6.1379708121533758e+00 1 1 0 +190 1 7.5241816146403258e+00 5.6955294953884561e-01 5.8769912909825432e+00 0 1 0 +108 1 6.5807392166861352e+00 1.0184353767223318e+00 5.6146620350742857e+00 -1 1 0 +275 1 7.0408072954820664e+00 1.3162688459915808e+00 6.5967105899951815e+00 1 0 0 +385 1 9.3543934338675321e+00 1.1705255935707064e+00 5.9471709777509103e+00 -1 -2 0 +73 1 8.0426837119670083e+00 1.3968905255999493e+00 6.2095892943547986e+00 0 1 0 +722 1 3.0274374424819178e-01 2.2200321958427502e+00 5.5143189374605317e+00 0 1 0 +51 1 1.3485169027045256e+00 2.3513057580437238e+00 6.1526257444793790e+00 1 3 0 +775 1 4.7909989886420079e-01 1.7387373807444051e+00 6.6164567517542663e+00 0 2 0 +740 1 2.3521258310633386e+00 1.9374008189188761e+00 5.6671141821446982e+00 -1 1 0 +96 1 2.3068786714403728e+00 2.8835742598010889e+00 6.1738434246508795e+00 1 0 0 +498 1 3.2304689894806238e+00 2.4235937989695686e+00 6.0327726941811353e+00 1 1 0 +337 1 3.9580551016680969e+00 2.3797106423544170e+00 5.1935677462404488e+00 0 1 0 +601 1 3.9452301187371273e+00 1.7456623318277928e+00 6.5756081801839441e+00 1 1 0 +19 1 5.2958928399364211e+00 2.4879499994117489e+00 6.2109992610883937e+00 1 1 0 +651 1 6.3054568714784107e+00 3.1041356181900466e+00 5.5114618192753380e+00 0 1 0 +555 1 6.3152359745032074e+00 2.1584240371537575e+00 6.1113719169302403e+00 0 1 0 +160 1 7.1064369656828994e+00 2.4665497104656540e+00 5.2667862423677896e+00 0 1 0 +119 1 8.1332253976599347e+00 2.5814126258220531e+00 5.6345253264080277e+00 -1 2 0 +471 1 8.9226431942710978e+00 2.1575927365216776e+00 6.0642188068068670e+00 0 1 0 +48 1 5.7160110252284735e-01 4.6669087942294958e+00 5.9141809570304282e+00 0 1 0 +479 1 1.1940896081930039e-01 3.4923935413031528e+00 5.7357327923153001e+00 1 1 0 +712 1 1.1443238288230699e+00 4.0865786371865553e+00 5.2890238689728930e+00 -1 1 0 +421 1 1.1519208188702077e+00 3.3524255958683562e+00 6.0785391665455393e+00 0 1 0 +410 1 1.8912416319643324e+00 4.1259837277305254e+00 6.2395464539338130e+00 0 0 0 +25 1 3.0700866833455804e+00 3.8759397203957109e+00 6.0806953043341077e+00 1 0 0 +271 1 3.1391041527992947e+00 3.2303420994552585e+00 5.1615253540078125e+00 0 0 0 +122 1 2.0597287938317046e+00 3.4378240339330106e+00 5.1929291684519079e+00 0 2 0 +693 1 4.4699558600143972e+00 4.5343217503481572e+00 5.9178081042483202e+00 0 1 0 +512 1 3.4505267437715039e+00 4.7115643088461372e+00 5.3486455318597228e+00 0 -1 0 +613 1 4.2816281445057891e+00 3.6337214720246598e+00 5.3619419374678889e+00 0 0 0 +153 1 5.2177499622440058e+00 3.3330902840401988e+00 5.3835520412060962e+00 -1 0 0 +58 1 5.5267539795765348e+00 4.2899451871173229e+00 5.7721924536156690e+00 1 0 0 +70 1 4.9709511243862377e+00 3.6449918443647666e+00 6.6407026771342368e+00 0 1 0 +129 1 6.6981623028071784e+00 4.0876301772584460e+00 5.5805873771249761e+00 0 0 0 +565 1 7.2421186863477818e+00 4.3212747456367628e+00 6.6079337442290900e+00 1 2 0 +250 1 8.9050905058470260e+00 4.3968234053801067e+00 5.5029825736648608e+00 0 0 0 +102 1 8.6755473073925895e+00 3.5206852928586261e+00 6.0441797537177635e+00 -1 1 0 +675 1 7.9425527869456083e+00 3.7767315401169235e+00 5.3263740977778387e+00 -1 0 0 +645 1 9.3615202048557080e+00 4.2016718149034009e+00 6.6253885589316761e+00 0 1 0 +1 1 7.2613132119909052e-01 6.1742882638576049e+00 5.8707378653985689e+00 1 2 0 +195 1 1.4775371623645153e+00 5.1106201947835199e+00 6.0669764979864169e+00 0 1 0 +756 1 2.5871380015056900e-01 5.4722323670377753e+00 6.5265122598720140e+00 1 0 0 +552 1 3.0872224730942892e+00 6.1659759457169629e+00 5.5135877767119350e+00 0 1 0 +489 1 2.9494853727489909e+00 4.8919670366739449e+00 6.2600282657862252e+00 0 1 0 +23 1 1.7163040352804284e+00 6.2694138549703995e+00 6.3463483226889679e+00 1 0 0 +345 1 4.0961430486243309e+00 5.6149621429938126e+00 6.0119296483180893e+00 -1 2 0 +134 1 3.2596855857786902e+00 5.9097179890672180e+00 6.4982931638713897e+00 0 1 0 +539 1 6.2949569816343205e+00 6.0442521070970088e+00 6.2018657913150843e+00 0 0 0 +663 1 5.1680821248715763e+00 5.3773885873828844e+00 5.9155947543411607e+00 1 0 0 +29 1 5.9576389376192198e+00 5.1007053075295321e+00 5.3578494015281093e+00 0 -1 0 +570 1 7.0259260183422745e+00 5.3724688677739696e+00 5.8200916453725027e+00 0 1 0 +459 1 6.3843969412346846e+00 4.8805170535496796e+00 6.4311425951115355e+00 -2 -1 0 +247 1 8.1506179422939606e+00 6.0992433871947798e+00 5.3474394746809066e+00 0 0 0 +258 1 9.3058374079821675e+00 5.9151691509342763e+00 5.1322542659524881e+00 1 0 0 +584 1 8.7234982009332249e+00 5.0952639246480782e+00 6.6221248431582351e+00 0 0 0 +383 1 8.0660654233738622e+00 5.1118959670702200e+00 5.7089404958453445e+00 0 0 0 +80 1 7.9473401337955023e+00 5.9028966093861985e+00 6.3662496816670373e+00 -1 -1 0 +587 1 2.3425892837865681e-01 7.1394075953327532e+00 5.4876203479203651e+00 1 1 0 +750 1 1.1748058084556090e+00 7.3084771018113681e+00 6.1176208970835164e+00 0 0 0 +41 1 2.4148104144752641e-01 7.8552359064927257e+00 6.2173748177179124e+00 1 1 0 +178 1 1.0830908856767738e+00 7.7891809872661382e+00 5.2914082168271870e+00 1 0 0 +84 1 2.3260297881948242e+00 7.0100960061944049e+00 5.5740524395423234e+00 0 -1 0 +665 1 4.4560888600865063e+00 7.7458700293066993e+00 6.0360685503053002e+00 0 0 0 +628 1 4.4569457131095147e+00 6.6903324233263932e+00 6.4438777711369823e+00 1 0 0 +380 1 4.0612437326100093e+00 6.7774640616485264e+00 5.3575845789225491e+00 0 0 0 +401 1 3.3287242566605983e+00 7.2201779390987202e+00 5.9375275420909928e+00 0 -1 0 +391 1 5.4404255987572228e+00 7.6683436951041015e+00 6.4799200695664201e+00 0 0 0 +485 1 5.0423737052857343e+00 7.0290470638478082e+00 5.2616427211180676e+00 1 0 0 +644 1 5.9266192681483290e+00 6.9541531388968778e+00 5.7818309410552615e+00 -1 1 0 +99 1 7.2194740807872302e+00 6.6115257770938456e+00 6.0101293068505850e+00 0 0 0 +564 1 6.9289951935357506e+00 7.5997511319263129e+00 5.5747413929553442e+00 0 -1 0 +265 1 9.3182863307323256e+00 6.4062047906503414e+00 6.1432937099611449e+00 -1 0 0 +77 1 8.0920182070848892e+00 7.1886811280478948e+00 6.2478862606636296e+00 0 0 0 +219 1 8.8514564692023470e+00 7.7821869230034189e+00 5.7075175686418511e+00 -1 0 0 +330 1 1.5122464984577364e+00 8.9703182894146600e+00 5.4787708688223855e+00 1 0 0 +699 1 1.5665077884430352e+00 8.2018701061312491e+00 6.4933152396839677e+00 1 0 0 +377 1 2.5446766620124346e+00 8.4324902892066635e+00 5.6259371446358779e+00 -1 0 0 +504 1 2.9332790639392159e+00 9.4669870785342365e+00 6.3745761742131526e+00 0 0 0 +610 1 2.5441836453933053e+00 7.9425944681964955e+00 6.5548091918905795e+00 0 0 0 +742 1 4.3579545826452026e+00 9.0721335292042937e+00 5.9032349553818166e+00 0 0 0 +517 1 3.8968582525173732e+00 8.0302021876211285e+00 5.1175244452643840e+00 0 -1 0 +10 1 6.2123805191605577e+00 9.4790596423475435e+00 5.7130736846712491e+00 0 0 0 +254 1 5.5189504754614820e+00 8.5971188380068906e+00 5.8237623334268278e+00 0 0 0 +115 1 6.7328577212019116e+00 8.5559665097072042e+00 6.3831089299907626e+00 0 1 0 +228 1 6.6040994527136041e+00 8.5747309284205357e+00 5.2706964775943668e+00 0 0 0 +274 1 7.7381142461483234e+00 9.1452089435532695e+00 6.3693148708397986e+00 0 -1 0 +500 1 8.3632468297503486e+00 8.8446329811827695e+00 5.4662070658474722e+00 0 0 0 +492 1 8.9696597680110948e+00 9.2271568747524828e+00 6.5031334932038130e+00 -1 -1 0 +132 1 9.4819470171993583e+00 8.9947261884409659e+00 5.5995098706883120e+00 -1 0 0 +213 1 1.3925306202751084e+00 2.5838438541468872e-01 7.4614262319326103e+00 1 1 0 +572 1 1.1931621105796839e+00 1.4423929315842099e+00 7.2616222951299259e+00 1 1 0 +760 1 4.9752944262156185e-01 7.8925028339869807e-01 6.9387410175492805e+00 2 0 0 +785 1 1.5736930511823435e+00 1.1081231861019021e+00 8.1417228436194247e+00 1 0 0 +369 1 2.6600489629910054e+00 5.9869529745040639e-01 7.3935696005743576e+00 -1 -1 0 +776 1 2.6989781646416047e+00 1.5688991373404528e+00 7.7057324073715057e+00 0 1 0 +662 1 3.7921796167945239e+00 8.0298541957382663e-01 7.4927015502883219e+00 -1 0 0 +736 1 4.8862988346043270e+00 9.0546823941385302e-01 6.8340534249246927e+00 0 2 0 +406 1 5.2646250923474174e+00 6.1488532646958094e-01 8.1137022688991571e+00 0 1 0 +472 1 5.6113464600648237e+00 2.3712782822378964e-01 7.1556905242414794e+00 -1 2 0 +299 1 6.5751344057506822e+00 1.4578420966645451e+00 7.5779257431661415e+00 0 1 0 +295 1 7.1558346555978796e+00 3.7970935121149157e-01 7.6640505982064759e+00 1 0 0 +566 1 7.7022104783685945e+00 1.5230984667478131e+00 7.5060415640054892e+00 -1 1 0 +67 1 6.7331969541635868e+00 1.5731399736140156e-01 6.7620731873328843e+00 0 2 0 +491 1 9.2967444191457105e+00 1.1127933278467834e+00 7.8420134472482870e+00 -2 1 0 +284 1 8.3166944764266759e+00 8.3321543813555965e-01 8.0293798104217871e+00 0 0 0 +66 1 8.8550664241879407e+00 1.4796308837567147e+00 7.0547517375617481e+00 -1 2 0 +126 1 8.1833995396670662e+00 5.4727570135212744e-01 7.0001133864000300e+00 0 1 0 +179 1 1.1079755136877905e+00 2.5847015687710240e+00 7.2000270886313658e+00 1 2 0 +374 1 8.8371788402884066e-01 1.9450284815108789e+00 8.0814280153430857e+00 0 0 0 +536 1 1.6014162367793144e-01 2.9299199643059235e+00 6.6723913914846369e+00 0 1 0 +557 1 2.0468713941053367e+00 2.3844625463156555e+00 7.6646627670536969e+00 1 1 0 +137 1 2.1757702879825023e+00 1.6642721280692598e+00 6.7616389059737791e+00 0 1 0 +252 1 3.2281873297530357e+00 2.4364936143472034e+00 7.7760116621029818e+00 2 2 0 +181 1 4.2426051136051290e+00 1.7441734908702866e+00 7.6459507870915733e+00 0 1 0 +54 1 4.7611041016167892e+00 2.6062524316604629e+00 7.2309363142125607e+00 2 1 0 +340 1 5.3036056498617983e+00 1.6363483124943665e+00 7.6455519450737546e+00 1 1 0 +589 1 5.8803077353733979e+00 2.3825044085572364e+00 7.8201321002565223e+00 0 0 0 +408 1 7.4674362620922459e+00 2.5521138618120833e+00 8.1286559690547975e+00 0 1 0 +303 1 6.7378398907826389e+00 2.3247717259717522e+00 7.0953813537166317e+00 0 1 0 +21 1 9.4722428098946683e+00 2.2069189863470049e+00 7.5009415073247583e+00 1 1 0 +598 1 8.4703269900582683e+00 2.1209789861398747e+00 8.0841056507586657e+00 0 1 0 +157 1 8.6413551429515554e+00 2.5481617958855116e+00 7.0034286027530230e+00 -1 0 0 +447 1 5.7992766419215291e-01 3.5918350843017697e+00 7.5599640537820640e+00 0 0 0 +296 1 1.2470510083022788e+00 4.3912852541479364e+00 7.7581216110107292e+00 1 1 0 +560 1 1.0086868005074778e+00 4.2337192155638670e+00 6.7577163585767170e+00 0 -1 0 +286 1 2.7695346107461638e-01 4.7574603202657100e+00 7.3871991286846246e+00 1 1 0 +501 1 2.8282984885623574e+00 3.3650119119063127e+00 7.1697394839172555e+00 0 0 0 +61 1 2.0757307711565560e+00 4.4834505643375886e+00 7.2393142172880687e+00 1 0 0 +757 1 3.0326287936672909e+00 4.2752178390956157e+00 7.6102358463547626e+00 0 -1 0 +765 1 1.7327877865384942e+00 3.4262852198484310e+00 7.2270143371909219e+00 0 2 0 +578 1 4.1239490804234080e+00 4.2710565086853807e+00 7.9049082631735148e+00 0 1 0 +163 1 3.9546703064178357e+00 3.1977382420750722e+00 6.7579415063429176e+00 1 1 0 +508 1 3.9240387987944749e+00 4.2007654860669357e+00 6.8776274332102636e+00 0 0 0 +528 1 5.2995933386262219e+00 4.5893350875071501e+00 6.7937111264536396e+00 0 1 0 +233 1 5.5064089718876561e+00 3.5340756173497176e+00 7.7814457500991603e+00 0 -1 0 +212 1 6.1664273890889234e+00 3.8990447854418653e+00 6.8160000590927678e+00 -1 1 0 +419 1 5.7773195766566623e+00 4.6094227414515609e+00 7.9090066545002689e+00 -1 0 0 +376 1 7.1301495446791652e+00 3.3028680819771403e+00 6.7055846802991574e+00 0 2 0 +522 1 7.3683048501917137e+00 4.3074125995265602e+00 7.7843182596188196e+00 -1 -1 0 +191 1 6.6426291151903047e+00 3.4400608956619512e+00 7.6398505939180366e+00 0 1 0 +635 1 8.1592471619931768e+00 3.6456696304823821e+00 7.2952529769426793e+00 0 1 0 +779 1 9.1120199973146079e+00 3.3133073366334527e+00 7.5705839870509655e+00 1 1 0 +669 1 8.8041213050099003e+00 4.5750354533319424e+00 7.6041466482768225e+00 0 1 0 +101 1 2.4593183196872273e-01 5.9762027609167898e+00 7.8046784068988382e+00 1 0 0 +172 1 1.0224128826244248e+00 6.1421119133016795e+00 7.2079588701377384e+00 0 0 0 +481 1 3.0375712648914668e+00 6.0853759865801367e+00 7.7828604033203090e+00 0 1 0 +657 1 2.0392767214751042e+00 6.2735752195963448e+00 7.8241290253686229e+00 1 1 0 +244 1 2.3002858197586931e+00 5.5495600954288298e+00 6.9549223060999958e+00 1 1 0 +728 1 3.7793977652277779e+00 5.1464657149925008e+00 7.4363294732781231e+00 -1 0 0 +347 1 3.9789760299564341e+00 6.2492006758056631e+00 7.3377083678780854e+00 1 2 0 +505 1 4.8018188010592899e+00 5.3528019076635145e+00 7.9224067470871269e+00 1 0 0 +255 1 6.3077986858357615e+00 5.8068996234518453e+00 8.0185966410880969e+00 -1 0 0 +626 1 5.4832547101507396e+00 5.5222491674773968e+00 7.0617077962494310e+00 -1 1 0 +307 1 7.3038956982896757e+00 5.9526535980514277e+00 7.9833643845076274e+00 -1 1 0 +752 1 7.1165283303327627e+00 5.7478033777947655e+00 6.8744815234123466e+00 0 0 0 +202 1 6.6707000496869293e+00 4.9595628554896072e+00 7.4240788337099941e+00 1 1 0 +305 1 7.7560678103624898e+00 5.0520322179259205e+00 7.0426668752738948e+00 -1 0 0 +541 1 8.5724378446185590e+00 5.7568119794921317e+00 7.3802902203873622e+00 -1 -1 0 +187 1 7.7898170443790982e-01 7.0164854290075542e+00 8.0372855574678166e+00 -1 0 0 +405 1 5.1721544010339116e-01 6.8943040997657548e+00 6.7901326510351776e+00 1 0 0 +725 1 2.9453506910398013e+00 6.8498040861758671e+00 6.9956105716290677e+00 1 0 0 +39 1 1.6363410057731691e+00 7.0452529525748941e+00 7.3483353448337123e+00 -1 1 0 +667 1 3.8146161123259246e+00 7.5595969090571140e+00 6.9162710983348585e+00 0 -1 0 +283 1 4.4917106962846960e+00 7.2395436974472274e+00 7.6549688526966824e+00 0 0 0 +351 1 3.3295322954817546e+00 7.7730202856922013e+00 7.8194549873834038e+00 0 0 0 +739 1 5.5094442931604757e+00 6.4875094573648857e+00 7.2280441878579520e+00 0 1 0 +533 1 5.4303045873294087e+00 7.8075183682541143e+00 7.5708407295464628e+00 1 -1 0 +304 1 7.7365861474308435e+00 6.5782463271458713e+00 7.3472434776030058e+00 0 1 0 +689 1 7.3845088674284476e+00 7.6411262424914659e+00 6.8106479688926438e+00 0 2 0 +692 1 6.6572665201138381e+00 6.8477998793494441e+00 7.6041026465037875e+00 -1 1 0 +404 1 6.3573085648091663e+00 7.2853701565089635e+00 6.7040841294713163e+00 0 0 0 +743 1 8.7500932199006858e+00 6.8795824225106772e+00 7.2872422611784291e+00 0 0 0 +327 1 9.2950009426590317e+00 6.9582163994657487e+00 8.1008046832974525e+00 -1 1 0 +562 1 8.1315331191662938e+00 7.6236962266545714e+00 7.7493493816814336e+00 -1 0 0 +502 1 3.6698616895553815e-03 9.0077504316877164e+00 8.1548806489558476e+00 1 0 0 +205 1 5.4342780821157910e-01 8.7470075177899478e+00 6.8147670561669171e+00 1 1 0 +130 1 8.7867225506400815e-01 8.0917818948202722e+00 7.4564951519007083e+00 1 0 0 +3 1 2.0420699252466892e+00 9.1253982579213719e+00 6.9734040833331701e+00 1 -1 0 +176 1 2.0657755927951622e+00 8.0952757606550065e+00 7.5832981654669913e+00 0 1 0 +661 1 2.8642974803417447e+00 8.7114299779614477e+00 7.5063016958722732e+00 1 0 0 +558 1 4.6315586083875422e+00 8.3803549088636071e+00 6.8413753039398308e+00 0 0 0 +135 1 4.6495537440960941e+00 9.4768673540925707e+00 7.1662633920500953e+00 1 0 0 +331 1 3.9932685054318773e+00 8.7185300512544366e+00 7.6492745487686520e+00 0 0 0 +753 1 3.5655728188861624e+00 8.4997117127173674e+00 6.6973631095435504e+00 0 0 0 +222 1 5.7935944150392604e+00 8.7230905579932152e+00 6.8587341403990525e+00 0 -1 0 +114 1 5.5671378607131210e+00 8.7752853567962408e+00 8.0340831504601020e+00 0 0 0 +632 1 6.6123953695470084e+00 8.1177340275078542e+00 7.2940159197146972e+00 1 -1 0 +668 1 6.4709129558414995e+00 9.1238835053333727e+00 7.5465501821909386e+00 0 0 0 +554 1 7.8110314805554042e+00 8.5480190345167504e+00 7.3013724986497648e+00 0 1 0 +287 1 9.3179396673656569e+00 7.9447074741833985e+00 7.6023090503885173e+00 1 0 0 +718 1 8.4251953657789702e+00 9.3562571956870144e+00 7.9942275906497606e+00 1 0 0 +308 1 6.4230796176221250e-01 7.0386397296587233e-01 8.1782352118687953e+00 0 1 0 +780 1 4.4635951100432514e-01 2.2536427476614229e-01 9.3961226019474680e+00 0 1 0 +422 1 6.4517002998979311e-01 1.3846955596911104e+00 8.9514665255575938e+00 0 1 0 +790 1 2.6579235117034550e+00 9.6836166896544273e-01 8.6904531030830618e+00 -1 1 0 +474 1 2.6212086645839556e+00 1.1739798307809075e-01 9.2945902029867380e+00 0 0 0 +618 1 1.6199560412194853e+00 7.6720884147362822e-01 9.1771818461383603e+00 -1 0 0 +352 1 1.9209582651282846e+00 2.3546545473309408e-02 8.2834610681470799e+00 2 1 0 +551 1 3.2941710965292055e+00 1.0813165517138289e-01 8.2600257401256503e+00 0 1 0 +171 1 3.8917512668050134e+00 5.5540049887039006e-02 9.2077874105241264e+00 0 1 0 +702 1 3.6598481496815940e+00 1.1218324419166252e+00 8.6310118420991753e+00 1 0 0 +546 1 4.5473814452898509e+00 8.3799912384922992e-01 8.7512969134532224e+00 0 2 0 +567 1 5.5078921615772263e+00 1.4104169047157464e+00 9.0104461368733624e+00 0 0 0 +442 1 5.6528288629081329e+00 1.1034282412178091e-01 8.9668006445959971e+00 1 0 0 +293 1 7.4399692711221510e+00 1.4092639547711179e+00 8.5147710110036687e+00 -1 0 0 +370 1 7.3420832021336295e+00 4.2436249630945883e-01 8.7331525690012040e+00 0 0 0 +519 1 6.3922904557440017e+00 7.7858911074379999e-01 9.2355030280402204e+00 0 1 0 +117 1 8.2667960769191318e+00 1.3393022715481693e+00 9.1296658802598856e+00 -1 1 0 +746 1 9.1244392567314296e+00 4.0051715842179975e-01 8.7852152640126349e+00 1 1 0 +436 1 1.2406120168635810e+00 2.7600594860955132e+00 8.8607183052055785e+00 1 1 0 +368 1 8.9853396513752848e-02 2.9696674598085089e+00 8.5541816708148293e+00 1 0 0 +683 1 1.9925908803607148e-01 2.3533846445972020e+00 9.5413887413538969e+00 1 0 0 +282 1 2.4840014593032826e+00 3.1010067325165735e+00 8.5797438996983644e+00 1 0 0 +737 1 1.8874536811583404e+00 1.9255489058828710e+00 8.6655115743839470e+00 0 1 0 +71 1 2.6919439687212128e+00 1.7871552954642467e+00 9.5427677141560210e+00 0 1 0 +384 1 4.1857653097668956e+00 2.8159847242968818e+00 9.3526619412873213e+00 1 -1 0 +786 1 4.5196019200912350e+00 1.9030908999774716e+00 8.7083777047964563e+00 -1 0 0 +236 1 3.5484872278725543e+00 2.2382145447279016e+00 8.7698741323866329e+00 1 0 0 +104 1 3.1769652718944394e+00 2.8660158997913934e+00 9.6731034001877418e+00 -1 0 0 +218 1 4.0167882778363602e+00 1.6777195381320817e+00 9.6284949062760674e+00 -1 0 0 +698 1 5.1343734306377025e+00 3.0014314794508516e+00 8.5736164107969053e+00 0 1 0 +592 1 5.3062094745546657e+00 2.3637870082041661e+00 9.4510898171707058e+00 0 1 0 +443 1 6.7451543750489238e+00 2.6950178912329541e+00 8.8847484518830360e+00 0 1 0 +429 1 6.5096604579594430e+00 1.6664537796953245e+00 8.7168858835006127e+00 0 0 0 +532 1 7.8084585196303786e+00 2.2693890632402218e+00 9.4940216213599555e+00 -1 -1 0 +334 1 9.2253406386026526e+00 1.8243041254529595e+00 8.8209574032176903e+00 0 1 0 +543 1 9.6029664183819519e-01 3.7612303639706242e+00 8.6136128458846688e+00 0 0 0 +280 1 1.4407141564103426e-01 4.1802211586997879e+00 9.3213600725591466e+00 1 -1 0 +424 1 2.2877845159879708e+00 3.7366470730146273e+00 9.4120692512016095e+00 0 0 0 +468 1 1.6667054206276881e+00 4.4889728678044500e+00 9.0375663300796827e+00 0 0 0 +248 1 2.3443424401706472e+00 4.2957820940183833e+00 8.3375470757928554e+00 0 1 0 +116 1 3.6335191056867986e+00 3.3343511473059566e+00 8.5883425704115357e+00 2 0 0 +294 1 3.9942792598748365e+00 4.0252793097602391e+00 9.5349083139014965e+00 0 1 0 +344 1 3.2408987887003731e+00 4.4671216630742370e+00 9.1056432386201482e+00 0 1 0 +322 1 4.8906605189846424e+00 3.7345481349030676e+00 9.1897874603478567e+00 0 1 0 +540 1 6.1262501013147936e+00 3.8360364938748730e+00 8.6130842319970480e+00 1 0 0 +229 1 5.6798180828363813e+00 4.3482451660154595e+00 9.5948563156286859e+00 1 -1 0 +26 1 7.8515503389755246e+00 4.1035476068659982e+00 9.0099557393571690e+00 -1 1 0 +761 1 6.9011622547118678e+00 4.1067566458879270e+00 9.2557092722613348e+00 -1 0 0 +643 1 8.2300466950587854e+00 3.3780299031560745e+00 8.3108373845603865e+00 0 0 0 +791 1 8.7969082804633771e+00 4.2312980185062106e+00 8.7470322442547523e+00 0 2 0 +606 1 8.8030491771621868e+00 3.7886279174822390e+00 9.6603620933978984e+00 0 0 0 +655 1 7.2144362907977233e-01 5.0532598857271616e+00 9.0196239529961932e+00 0 2 0 +264 1 1.0286512615088337e+00 6.0899112878936279e+00 8.7635629087542775e+00 1 0 0 +6 1 1.5760187740659866e+00 5.6049692174244337e+00 9.5598308227731295e+00 1 0 0 +716 1 1.6075906486790708e+00 5.2594564718037962e+00 8.2012176410176796e+00 1 0 0 +411 1 2.4979793755662292e+00 5.5543226623504109e+00 8.9245135161086484e+00 1 0 0 +526 1 3.2518134069989717e+00 5.1847134665431716e+00 8.2804159689808898e+00 0 0 0 +433 1 4.1534063075914958e+00 5.9249301036068713e+00 8.7832215062378385e+00 -1 0 0 +488 1 3.7096091791980421e+00 5.1687207999795932e+00 9.5539047969153970e+00 0 1 0 +469 1 4.6718010290945760e+00 4.8045572453902752e+00 8.9564848067054061e+00 -1 1 0 +531 1 5.3642915548653844e+00 5.6410189510791486e+00 9.1355568582499647e+00 0 -2 0 +182 1 7.5552991533217124e+00 4.8532199373503637e+00 9.6144388209952432e+00 1 0 0 +13 1 6.4636692161569069e+00 4.9227034293330316e+00 8.6663349812896406e+00 -1 0 0 +499 1 6.8271918951381627e+00 5.9146384512385906e+00 8.9777907640804440e+00 0 1 0 +549 1 7.8332169920280794e+00 5.2581350612019326e+00 8.7199086514686943e+00 1 -1 0 +143 1 8.9630314553375978e+00 5.3672244411046535e+00 8.2956706084652403e+00 1 1 0 +332 1 8.4635735305083379e+00 5.8963656586299908e+00 9.2806887301286398e+00 1 1 0 +593 1 1.5301047276391477e+00 7.7344812272292005e+00 8.4380820828848115e+00 0 1 0 +415 1 1.7655244721913313e-01 7.8157901906411231e+00 8.4803183079706876e+00 1 0 0 +581 1 1.0147918629498232e+00 7.3044168229907962e+00 9.3251137997315912e+00 0 -1 0 +427 1 1.8758528054454902e+00 6.6514944253135466e+00 8.9593544884642426e+00 -1 -1 0 +762 1 2.5482381173344733e+00 7.0208065445820873e+00 8.2494198603999003e+00 -1 0 0 +513 1 3.0387266996697497e+00 6.6831306564776991e+00 9.2080841097935000e+00 0 0 0 +627 1 2.3767537414039421e+00 7.6778784887151739e+00 9.2062819136917593e+00 0 0 0 +314 1 3.6050340063176600e+00 6.7760034208890749e+00 8.2843463870505136e+00 -1 0 0 +576 1 4.4251347412673203e+00 7.6657492087887853e+00 8.6030134480343854e+00 0 0 0 +45 1 3.4939750461461716e+00 7.5435893156565026e+00 9.4122358544752664e+00 1 0 0 +461 1 5.2394546688127610e+00 6.4143332295673057e+00 8.5358978485175978e+00 0 1 0 +430 1 6.2359776073913222e+00 6.7404685978592438e+00 8.6241927860212577e+00 0 0 0 +145 1 6.2349557641383946e+00 7.7503188962390270e+00 8.2472264310403105e+00 0 0 0 +260 1 5.0983234976320180e+00 6.4660364915199349e+00 9.6678999554105296e+00 1 1 0 +514 1 5.4304367293168445e+00 7.3830000227090977e+00 9.2509081220229064e+00 0 -1 0 +387 1 7.2664420148783568e+00 7.8978687478528817e+00 8.1847193844632145e+00 0 1 0 +535 1 7.4507892492511072e+00 6.9002615154435176e+00 8.5890790642830854e+00 -1 0 0 +437 1 7.5153336558198003e+00 7.7417046384084864e+00 9.2024685859591546e+00 0 0 0 +441 1 8.3787135408579374e+00 6.5042799133745914e+00 8.2543026002829620e+00 0 0 0 +329 1 8.5163050552639294e+00 7.3105518487730752e+00 8.8366460682271608e+00 1 0 0 +90 1 9.4910362499753909e+00 7.0724508793401712e+00 9.5293786628353256e+00 0 0 0 +35 1 1.0053582315901892e+00 9.0040434424696105e+00 8.6463563137829453e+00 2 1 0 +747 1 3.1017866370866582e+00 8.5260504255134055e+00 8.8619585157298228e+00 0 1 0 +553 1 1.9385622236840496e+00 8.7436732912199968e+00 8.9638614701173545e+00 1 0 0 +530 1 4.5132142193887743e+00 9.3575728826376245e+00 8.4279098967000561e+00 -1 0 0 +685 1 5.1645825545105666e+00 8.4500906664303770e+00 9.3114057578036977e+00 0 -1 0 +428 1 6.5131976234778488e+00 9.0546724157987661e+00 8.5891972256808042e+00 0 0 0 +149 1 7.7248133099973213e+00 8.8555498053816972e+00 8.5612924718690113e+00 1 0 0 +453 1 6.3848564185760273e+00 9.1369866285926378e+00 9.4952353511491996e+00 0 0 0 +620 1 9.3151564071600585e+00 8.8012532140344000e+00 9.1198522152165804e+00 0 -1 0 +695 1 8.5927749230121684e+00 8.2669915590497780e+00 8.4548946505381650e+00 -1 -1 0 +197 1 7.9774918655087417e+00 8.6669717467239771e+00 9.6856125157612531e+00 1 1 0 +721 1 8.8757089479401792e+00 7.9757653027484929e+00 9.5091559009421989e+00 1 0 0 +464 1 9.3631721350086949e-01 8.4069896246527809e-01 1.0169946738608138e+01 0 2 0 +278 1 3.0792607845821869e+00 5.0518827457291482e-01 1.0977504046209381e+01 0 1 0 +486 1 2.0989376477470225e+00 8.3709249059671120e-01 1.0164725091837267e+01 0 0 0 +544 1 3.3100691533662543e+00 7.6825095334667570e-01 9.7266661196375246e+00 0 1 0 +63 1 4.0695981168644915e+00 6.4495876733387758e-01 1.0576835472314858e+01 0 2 0 +457 1 4.9317130109468028e+00 7.7346986192417955e-01 1.0007779503086008e+01 1 1 0 +764 1 6.1634631896791241e+00 6.7453300304424013e-01 1.0937479044804837e+01 -2 1 0 +365 1 7.6807772171639392e+00 7.3538061605074800e-01 1.0971747335069072e+01 0 -1 0 +726 1 7.3334205578661109e+00 2.1640004480700886e-01 9.7889315629061908e+00 0 1 0 +715 1 7.1677246478625225e+00 1.3305798742295996e+00 9.7307026634841449e+00 0 2 0 +767 1 8.7471079002298051e+00 1.0493417421270612e+00 1.1121431978619590e+01 -1 1 0 +569 1 9.2891619975154907e+00 2.6613031537040516e-01 1.0251030031122850e+01 -1 -1 0 +323 1 8.3293392763640810e+00 8.7344367503234688e-01 9.9926758957797652e+00 0 1 0 +664 1 9.4064886907175467e+00 1.1726528983167706e+00 9.7761209989475653e+00 -1 1 0 +748 1 1.0288150286947797e+00 2.6711255217360317e+00 1.0147196228599741e+01 1 0 0 +777 1 1.1034404740781938e+00 1.8404138902340297e+00 1.0966348233511615e+01 0 1 0 +529 1 4.3209223932585104e-02 1.7719984937431261e+00 1.0603191139846777e+01 1 0 0 +734 1 1.8720161338086414e+00 2.7668664589452678e+00 1.1053903993698277e+01 0 1 0 +423 1 1.6074691292042957e+00 1.8048270641949620e+00 9.7904754045607980e+00 1 1 0 +784 1 3.0604104589968708e+00 2.9266564815582861e+00 1.0729355184817827e+01 1 1 0 +88 1 2.1154683815913806e+00 2.7333307244713323e+00 9.7001368988844625e+00 0 0 0 +92 1 4.5379136705129790e+00 2.8824768472155111e+00 1.0276753892664670e+01 0 0 0 +17 1 3.2900737269872642e+00 1.7662221283342525e+00 1.0508686564576944e+01 0 -1 0 +476 1 3.9324463201727231e+00 2.3321960959542092e+00 1.1060504577629438e+01 1 0 0 +524 1 6.1681066432783895e+00 1.8377659524349197e+00 9.8592084026455566e+00 0 0 0 +475 1 4.9147531693180655e+00 1.6941269345430121e+00 1.0461005836653984e+01 1 0 0 +325 1 5.4834287643542128e+00 2.5701003784286591e+00 1.0542505269945226e+01 0 0 0 +259 1 6.9622595400687146e+00 1.6736406899200942e+00 1.0808332799795028e+01 1 -1 0 +456 1 6.5346585643057358e+00 2.5812204139121206e+00 1.0536224651113656e+01 0 0 0 +556 1 8.0269613595693805e+00 1.8077925161914699e+00 1.0508063971066365e+01 1 0 0 +85 1 8.7843780571012271e+00 2.6398750788479126e+00 9.7531863550959628e+00 1 0 0 +588 1 1.2216845703209767e+00 3.5726970365958843e+00 9.7052490054915239e+00 1 0 0 +527 1 1.3927626636665347e+00 4.6360913062412301e+00 1.0064892202420499e+01 0 0 0 +585 1 1.9747795538479274e-01 3.3786357281539074e+00 1.0128478114678101e+01 0 1 0 +162 1 3.6563645883503498e-02 4.3602525758458874e+00 1.0597138015605230e+01 1 1 0 +614 1 1.0635909947830469e+00 3.5793797890735481e+00 1.0697961840098770e+01 0 1 0 +583 1 2.7372080612976184e+00 4.3766114089807502e+00 1.1172797749831787e+01 -1 0 0 +473 1 2.5471572757982397e+00 4.6512705950374960e+00 1.0009734018325162e+01 0 0 0 +272 1 3.1256534472016271e+00 3.7539092728902079e+00 1.0138248982512387e+01 0 1 0 +59 1 2.2486981183736208e+00 3.6585415889916653e+00 1.0496309800103731e+01 1 1 0 +203 1 4.5724312226506063e+00 3.8541886140290949e+00 1.0559702580097170e+01 1 1 0 +146 1 3.7544847137527069e+00 4.7081328713875354e+00 1.0693161302350850e+01 1 0 0 +571 1 5.5198953819931464e+00 3.5176868683869209e+00 1.0141581423910276e+01 -1 -1 0 +719 1 5.7562152836036793e+00 4.3776644870066628e+00 1.0678357549793880e+01 1 0 0 +653 1 7.6671779585623616e+00 3.6262938308209840e+00 1.0321622325149908e+01 0 1 0 +633 1 6.7550933748277631e+00 4.4561036212729350e+00 1.0344205268182341e+01 0 1 0 +495 1 7.4903890013037797e+00 4.3979327556694621e+00 1.1144283604534237e+01 -1 2 0 +672 1 6.7411216068069946e+00 3.6646174035292858e+00 1.1141532796710901e+01 0 0 0 +563 1 8.3001139525860701e+00 4.6180741536707854e+00 1.0371820856642920e+01 -2 1 0 +738 1 8.5473280696251202e+00 3.3096582030868977e+00 1.0613659296265663e+01 -2 0 0 +506 1 9.4130329032452629e+00 3.3051253722417693e+00 1.1086891901193454e+01 -1 -1 0 +315 1 3.1406308406454897e-01 6.2926589891549778e+00 1.1143993619022757e+01 0 1 0 +788 1 6.3839545041818746e-01 5.2987162032777713e+00 1.0427530667786101e+01 0 1 0 +106 1 2.4019655990324216e+00 6.0510210580658956e+00 1.0100933476482769e+01 0 0 0 +609 1 2.5117907046333490e+00 5.5966460487322376e+00 1.1137150844367460e+01 0 0 0 +483 1 4.6328707194360641e+00 4.9462357025833512e+00 1.0032989437718189e+01 0 0 0 +165 1 3.4832444227190456e+00 5.7171397194751759e+00 1.0495555104782675e+01 0 2 0 +741 1 5.0902241916448965e+00 6.2225971277419250e+00 1.0765704785888415e+01 0 -1 0 +507 1 5.4957444342422095e+00 5.3912897091666361e+00 1.0140214589530009e+01 1 1 0 +783 1 6.4191553608974443e+00 5.8215856810063302e+00 1.0818314290784340e+01 0 1 0 +480 1 6.4911404666519834e+00 5.3398563411337214e+00 9.8097525856056453e+00 0 0 0 +72 1 7.3567415519283772e+00 5.3926887167597641e+00 1.0612264022272276e+01 1 0 0 +649 1 9.1128073982540521e+00 6.2322497059392559e+00 1.0280769426733112e+01 -2 1 0 +707 1 9.2348202408324678e+00 4.9225591824419901e+00 9.8629682365113336e+00 -1 1 0 +47 1 8.2063605488892275e+00 6.1483875484455597e+00 1.1126903970071494e+01 -1 1 0 +694 1 9.2009126332515372e+00 5.3743307513465775e+00 1.0962053177220636e+01 -1 0 0 +76 1 8.2197860316481677e+00 5.7534261880621536e+00 1.0209362832017579e+01 1 1 0 +537 1 4.8384296260943582e-01 7.3914916186217932e+00 1.0529218164912511e+01 1 0 0 +642 1 5.1716555038219636e-01 6.4522209627350904e+00 1.0021625633157353e+01 0 1 0 +371 1 2.2800335816326314e+00 7.4838713524294089e+00 1.0277372429065954e+01 0 -2 0 +789 1 2.3043007473551702e+00 6.8591831143101203e+00 1.1118274460406425e+01 -1 1 0 +220 1 3.1465568938996111e+00 6.8505496697316035e+00 1.0263862395607513e+01 1 -1 0 +127 1 1.6252029370475121e+00 6.6767063754646685e+00 1.0096713385701520e+01 1 0 0 +749 1 3.9153203026582868e+00 7.7112210281552880e+00 1.0612277127377881e+01 0 0 0 +175 1 4.0906724910843106e+00 6.4201134471330299e+00 9.7227891038851393e+00 0 0 0 +534 1 4.0971349206997214e+00 6.6975612440281607e+00 1.0719884063586589e+01 0 -1 0 +671 1 6.1422767521518482e+00 6.6656797804352674e+00 9.8009993074974151e+00 2 0 0 +658 1 4.9022796822710148e+00 7.5217800978485609e+00 1.0091634512661074e+01 0 0 0 +477 1 5.8707443296692148e+00 7.4501365946822915e+00 1.0458499327832017e+01 0 0 0 +118 1 5.0919617579708039e+00 7.1432131854456724e+00 1.1212680520476740e+01 0 0 0 +787 1 6.6067443654537161e+00 7.6465560502674359e+00 9.8376390214947413e+00 -2 0 0 +621 1 7.0933299220090378e+00 6.5180699907948538e+00 1.1141015410915253e+01 0 1 0 +257 1 7.4375850063920677e+00 6.7447474553693505e+00 1.0033539443194341e+01 0 0 0 +652 1 7.9376736285331999e+00 7.7553390443904817e+00 1.0660561170485973e+01 0 1 0 +170 1 9.1406672065952250e+00 7.9316765415843102e+00 1.0641109758352961e+01 -1 1 0 +302 1 8.4484666154566082e+00 7.0141861719251200e+00 1.0104351924706634e+01 0 0 0 +363 1 1.2537451644940942e+00 8.1551902566002408e+00 1.0607870361967809e+01 1 0 0 +183 1 3.7665617639834525e-01 8.2198726760403673e+00 9.7137233414681816e+00 1 0 0 +758 1 5.6285669731423427e-01 8.9277856261913531e+00 1.0400319913743951e+01 0 1 0 +463 1 1.3348970580775041e+00 9.4020273617135857e+00 9.7638257830413657e+00 -1 0 0 +717 1 1.2093123656559452e+00 9.2751319132854011e+00 1.1133999874703713e+01 1 0 0 +754 1 2.2401749056613216e+00 9.2806791193070204e+00 1.0383259430501484e+01 0 0 0 +720 1 2.9064408307904692e+00 8.3825506797151483e+00 1.0068815819468751e+01 1 0 0 +594 1 4.3108271408926759e+00 8.9526786121925390e+00 1.0690397407834688e+01 0 1 0 +673 1 3.3458129390138960e+00 9.3069563420258365e+00 1.0265699392278460e+01 0 0 0 +586 1 3.3271661080322725e+00 8.6373501057035913e+00 1.1152270251586238e+01 0 0 0 +509 1 4.0202447790510725e+00 8.4661426226422076e+00 9.7711764692632279e+00 0 -1 0 +403 1 4.8623296571647723e+00 9.2932710492134660e+00 9.7499695212845996e+00 0 0 0 +619 1 5.7993226850705666e+00 8.5855382266282287e+00 1.0120378571146386e+01 0 -1 0 +548 1 5.2326221992565207e+00 9.4729323456505270e+00 1.0702660822105823e+01 1 0 0 +759 1 5.2152067605840990e+00 8.4049550816307956e+00 1.1035013277822511e+01 0 0 0 +579 1 7.4280997786062342e+00 9.2799995420777197e+00 1.1002365771486751e+01 0 0 0 +167 1 7.1926617992285955e+00 8.4163482096902289e+00 1.0353682192828735e+01 0 0 0 +426 1 8.3625862919362817e+00 9.4998738000908975e+00 1.0581473497935047e+01 -1 0 0 +164 1 8.9854015466227377e+00 8.8774553757855887e+00 1.0079445399169751e+01 0 -1 0 +638 1 1.4464709183959017e+00 9.9671519504182238e-01 1.1688853991924486e+01 0 1 0 +703 1 4.4508638445730037e-01 9.8414547376707717e-01 1.1304221217957446e+01 0 2 0 +688 1 2.1734767953895000e+00 3.2829287465226359e-01 1.1510860180303913e+01 -1 0 0 +53 1 2.4551243185611269e+00 6.7594118133021008e-01 1.2471517980143950e+01 1 0 0 +510 1 2.2841646392329631e+00 1.2862167846373869e+00 1.1328167112411137e+01 0 2 0 +523 1 3.6680642343617849e+00 7.0862030613449278e-01 1.2284850802636328e+01 0 1 0 +782 1 4.1778858906170973e+00 1.3621772643375185e+00 1.1293910058127977e+01 0 1 0 +68 1 6.2535364814588323e+00 9.7262192233973421e-01 1.2571938545964279e+01 -1 1 0 +520 1 5.1069219627601568e+00 8.7702870723430049e-01 1.1221152127198661e+01 0 0 0 +382 1 7.1809614947309548e+00 2.4008376567462639e-01 1.2566477919341292e+01 -1 -1 0 +56 1 7.5836400225892246e+00 1.3861691869743975e+00 1.2518008128332459e+01 0 1 0 +612 1 9.2931674701862139e+00 7.6612673497752237e-01 1.2035791538039696e+01 0 1 0 +766 1 8.1364665387807804e+00 2.5752406891780194e-01 1.1894533299256317e+01 -2 0 0 +425 1 8.6077037963978054e+00 1.5638648815159502e+00 1.2556136602853028e+01 -1 1 0 +690 1 1.4159765337278347e+00 2.2600610497660707e+00 1.2596759621739688e+01 0 0 0 +568 1 2.4713568072917051e+00 1.7954455574949919e+00 1.2483588201267409e+01 0 1 0 +158 1 2.9822924509906472e+00 2.6619547601065583e+00 1.2397797303840820e+01 1 1 0 +705 1 4.0949109079482486e+00 1.8585198191925096e+00 1.2414880074736805e+01 0 0 0 +393 1 3.9468669981449032e+00 3.0352573583374189e+00 1.1984554731325577e+01 0 0 0 +727 1 3.2754206789228428e+00 1.6158368756830950e+00 1.1803244114364324e+01 -1 1 0 +362 1 5.8500043769999657e+00 2.2102038458953586e+00 1.2141330120258015e+01 0 1 0 +751 1 4.9886627527852001e+00 2.0302285120081187e+00 1.1490378420730869e+01 -1 0 0 +623 1 5.4213433780683626e+00 3.0805133211925684e+00 1.1612264594888595e+01 0 0 0 +328 1 5.9085176759459577e+00 1.7379459885124311e+00 1.1220814761345181e+01 0 1 0 +60 1 6.8131977593110458e+00 1.7036197128963195e+00 1.1795406590631861e+01 0 2 0 +708 1 6.5467429985312222e+00 2.9128589710499551e+00 1.1885321786473366e+01 -1 0 0 +389 1 7.3415215490286965e+00 2.5267196908080654e+00 1.2367675649085196e+01 0 0 0 +778 1 7.8700642475288589e+00 1.6475250790062441e+00 1.1545941943531719e+01 1 0 0 +666 1 7.3064313994301084e+00 2.4845057545017157e+00 1.1342465256275458e+01 0 0 0 +691 1 9.1122502264479195e+00 1.8220427493595692e+00 1.1684714189350380e+01 -1 1 0 +239 1 8.5314655684669045e+00 2.6596926159524932e+00 1.1478349759897576e+01 1 0 0 +324 1 6.3939635571909248e-01 3.3666198773727603e+00 1.2173340584023624e+01 2 0 0 +395 1 1.3109020166113339e+00 4.7484175539721605e+00 1.1287999686881664e+01 0 1 0 +279 1 1.8586203509760155e+00 3.7402769676225649e+00 1.1595812009474129e+01 2 0 0 +396 1 3.1053535808256956e+00 3.9853876156125256e+00 1.2419778077762665e+01 1 0 0 +388 1 2.0913135157350284e+00 4.7025809673976706e+00 1.1921057060985252e+01 2 0 0 +518 1 3.9970792229700720e+00 4.0894539766786009e+00 1.1737774397508662e+01 0 0 0 +91 1 3.9818292140619596e+00 4.6707509067880881e+00 1.2675615237405029e+01 0 1 0 +458 1 4.7614942504107312e+00 3.9565989441899769e+00 1.2373116340675375e+01 0 1 0 +342 1 5.7897169223622553e+00 4.6492241854501435e+00 1.2050215729466855e+01 -1 2 0 +156 1 5.5536251092613753e+00 3.2462006995589405e+00 1.2727553311805123e+01 1 0 0 +300 1 6.7442402170719964e+00 4.1554542849760994e+00 1.2148116893549334e+01 0 0 0 +75 1 7.6878881520819276e+00 3.3490344906646272e+00 1.1701525686639403e+01 0 1 0 +602 1 9.1986066478225776e+00 3.6487203270210560e+00 1.2252947869616280e+01 -1 1 0 +733 1 8.1160455886178227e+00 3.9625124770742821e+00 1.2434762318734350e+01 -1 0 0 +646 1 8.8218148815727631e+00 4.0996735318798496e+00 1.1415939154895847e+01 0 0 0 +701 1 1.8978011400568709e-01 4.8550385880920386e+00 1.1519696230126629e+01 0 0 0 +641 1 6.2405559758537421e-01 5.0441645445288081e+00 1.2414280867318325e+01 1 1 0 +372 1 1.5747975405031753e+00 6.0552281476530796e+00 1.1248587082049488e+01 0 0 0 +631 1 8.5456640064676304e-01 6.0223876598732975e+00 1.2084642790240274e+01 0 0 0 +676 1 2.8208488188621370e+00 5.7295725451913277e+00 1.2574508063903540e+01 1 0 0 +710 1 3.1296911977834352e+00 5.0771547029977935e+00 1.1870140199082691e+01 0 0 0 +490 1 3.2950005755253784e+00 6.2349949422133761e+00 1.1461715563311607e+01 0 1 0 +361 1 4.2450343584785566e+00 5.5615827600980721e+00 1.1547800801107069e+01 1 -1 0 +444 1 5.5596163901997775e+00 5.4520703851988346e+00 1.1387284304881156e+01 1 1 0 +484 1 6.4913105757047402e+00 4.8000489913154594e+00 1.1372760413055012e+01 0 1 0 +608 1 7.6050769691111721e+00 4.7857922254780778e+00 1.2413189079143379e+01 -1 2 0 +595 1 6.5347055830923937e+00 5.3268499734341441e+00 1.2307733312212653e+01 0 0 0 +416 1 9.3199040246285669e+00 5.8302454683289717e+00 1.2016537076099244e+01 -1 1 0 +496 1 8.7659419156236495e+00 4.9142804171766032e+00 1.2217701429710132e+01 0 -1 0 +656 1 8.1699080868518905e+00 5.0645601792764090e+00 1.1392206926317959e+01 -1 0 0 +769 1 8.0771410352701629e+00 5.9629888432283504e+00 1.2108517399794067e+01 0 0 0 +714 1 1.4977463731246821e+00 6.7245435115163072e+00 1.2367269889898196e+01 0 0 0 +515 1 9.6667503272427679e-01 7.6428267981913045e+00 1.2428894827996329e+01 1 0 0 +637 1 1.1156610209757301e+00 6.9882224209926873e+00 1.1417409797102584e+01 0 1 0 +217 1 2.5469182593352322e+00 6.7637353468883994e+00 1.2375649393530658e+01 1 -1 0 +724 1 3.1115417357415822e+00 7.6144229095868647e+00 1.1523024942409867e+01 1 1 0 +687 1 4.5606665705771778e+00 6.6759912264998338e+00 1.1889500675521040e+01 -1 1 0 +763 1 3.6361010683416186e+00 6.9970226377508400e+00 1.2299199352584898e+01 0 0 0 +38 1 6.2969095921054707e+00 7.5886121713743862e+00 1.1533463720920876e+01 -1 1 0 +150 1 5.9835231931326289e+00 6.5118631535904070e+00 1.1394207199167626e+01 0 1 0 +290 1 4.8048747366998947e+00 7.8172889617077068e+00 1.2070072658798813e+01 0 1 0 +616 1 7.0721785230514795e+00 6.7139084766302402e+00 1.2256002088852011e+01 -1 1 0 +30 1 7.9232040376263555e+00 7.2489858100212539e+00 1.2593613076908625e+01 0 0 0 +445 1 6.9607704693330748e+00 7.7579999602324623e+00 1.2587407965321340e+01 0 0 0 +774 1 7.3265996102281452e+00 7.8499809130652132e+00 1.1626637060126168e+01 0 0 0 +357 1 9.2798444222596217e+00 6.8884143171007688e+00 1.1999596881166884e+01 0 1 0 +267 1 8.5888427956317628e+00 7.5075558360793977e+00 1.1442511024450438e+01 0 0 0 +448 1 5.0729926045181173e-01 9.4169241839016333e+00 1.2273031816782739e+01 1 1 0 +696 1 4.4102572902619946e-01 8.4077364711935427e+00 1.1354237690734895e+01 1 0 0 +573 1 2.7077350100212949e+00 8.2143979706357513e+00 1.2254040335171823e+01 0 0 0 +482 1 2.9133632885256744e+00 9.2553190061848607e+00 1.2113855896580169e+01 0 0 0 +8 1 2.3363159458219069e+00 8.4941185760762057e+00 1.1255019165067457e+01 1 -1 0 +226 1 4.0404895274146275e+00 9.3587935290798541e+00 1.2722652754505571e+01 0 -1 0 +659 1 3.8042795218377186e+00 8.1992884939159101e+00 1.2511233460275248e+01 0 0 0 +773 1 4.4005082650625322e+00 9.3360408950984475e+00 1.1605309542607051e+01 1 0 0 +224 1 5.7885790256070413e+00 8.3638196073469455e+00 1.2034051028518702e+01 1 -1 0 +291 1 5.8011096305830563e+00 9.3091320675606664e+00 1.1589499006797869e+01 1 -1 0 +418 1 4.8792330486746840e+00 8.7296341705453067e+00 1.2582911282267478e+01 0 0 0 +629 1 6.6463844718851961e+00 8.6054797216518057e+00 1.1243594701377456e+01 0 1 0 +50 1 7.7644426608845647e+00 8.4693859015524957e+00 1.2400182726922628e+01 -1 0 0 +245 1 9.4162702615322473e+00 7.9669800200480569e+00 1.2136721690567542e+01 0 -1 0 +292 1 8.1724889832104690e+00 8.6227131986618222e+00 1.1319221791131591e+01 -1 0 0 +230 1 9.3566937504146921e+00 9.5231671853970781e+00 1.1303156610043260e+01 0 0 0 +1009 2 0.0000000000000000e+00 0.0000000000000000e+00 1.3433401559507997e+01 0 0 0 +1010 2 7.9370052598409979e-01 7.9370052598409979e-01 1.3433401559507997e+01 0 0 0 +1011 2 7.9370052598409979e-01 0.0000000000000000e+00 1.4227102085492055e+01 0 0 0 +1012 2 0.0000000000000000e+00 7.9370052598409979e-01 1.4227102085492055e+01 0 0 0 +1013 2 1.5874010519681996e+00 0.0000000000000000e+00 1.3433401559507997e+01 0 0 0 +1014 2 2.3811015779522990e+00 7.9370052598409979e-01 1.3433401559507997e+01 0 0 0 +1015 2 2.3811015779522990e+00 0.0000000000000000e+00 1.4227102085492055e+01 0 0 0 +1016 2 1.5874010519681996e+00 7.9370052598409979e-01 1.4227102085492055e+01 0 0 0 +1017 2 3.1748021039363992e+00 0.0000000000000000e+00 1.3433401559507997e+01 0 0 0 +1018 2 3.9685026299204984e+00 7.9370052598409979e-01 1.3433401559507997e+01 0 0 0 +1019 2 3.9685026299204984e+00 0.0000000000000000e+00 1.4227102085492055e+01 0 0 0 +1020 2 3.1748021039363992e+00 7.9370052598409979e-01 1.4227102085492055e+01 0 0 0 +1021 2 4.7622031559045981e+00 0.0000000000000000e+00 1.3433401559507997e+01 0 0 0 +1022 2 5.5559036818886973e+00 7.9370052598409979e-01 1.3433401559507997e+01 0 0 0 +1023 2 5.5559036818886973e+00 0.0000000000000000e+00 1.4227102085492055e+01 0 0 0 +1024 2 4.7622031559045981e+00 7.9370052598409979e-01 1.4227102085492055e+01 0 0 0 +1025 2 6.3496042078727983e+00 0.0000000000000000e+00 1.3433401559507997e+01 0 0 0 +1026 2 7.1433047338568993e+00 7.9370052598409979e-01 1.3433401559507997e+01 0 0 0 +1027 2 7.1433047338568993e+00 0.0000000000000000e+00 1.4227102085492055e+01 0 0 0 +1028 2 6.3496042078727983e+00 7.9370052598409979e-01 1.4227102085492055e+01 0 0 0 +1029 2 7.9370052598409968e+00 0.0000000000000000e+00 1.3433401559507997e+01 0 0 0 +1030 2 8.7307057858250960e+00 7.9370052598409979e-01 1.3433401559507997e+01 0 0 0 +1031 2 8.7307057858250960e+00 0.0000000000000000e+00 1.4227102085492055e+01 0 0 0 +1032 2 7.9370052598409968e+00 7.9370052598409979e-01 1.4227102085492055e+01 0 0 0 +1033 2 0.0000000000000000e+00 1.5874010519681996e+00 1.3433401559507997e+01 0 0 0 +1034 2 7.9370052598409979e-01 2.3811015779522990e+00 1.3433401559507997e+01 0 0 0 +1035 2 7.9370052598409979e-01 1.5874010519681996e+00 1.4227102085492055e+01 0 0 0 +1036 2 0.0000000000000000e+00 2.3811015779522990e+00 1.4227102085492055e+01 0 0 0 +1037 2 1.5874010519681996e+00 1.5874010519681996e+00 1.3433401559507997e+01 0 0 0 +1038 2 2.3811015779522990e+00 2.3811015779522990e+00 1.3433401559507997e+01 0 0 0 +1039 2 2.3811015779522990e+00 1.5874010519681996e+00 1.4227102085492055e+01 0 0 0 +1040 2 1.5874010519681996e+00 2.3811015779522990e+00 1.4227102085492055e+01 0 0 0 +1041 2 3.1748021039363992e+00 1.5874010519681996e+00 1.3433401559507997e+01 0 0 0 +1042 2 3.9685026299204984e+00 2.3811015779522990e+00 1.3433401559507997e+01 0 0 0 +1043 2 3.9685026299204984e+00 1.5874010519681996e+00 1.4227102085492055e+01 0 0 0 +1044 2 3.1748021039363992e+00 2.3811015779522990e+00 1.4227102085492055e+01 0 0 0 +1045 2 4.7622031559045981e+00 1.5874010519681996e+00 1.3433401559507997e+01 0 0 0 +1046 2 5.5559036818886973e+00 2.3811015779522990e+00 1.3433401559507997e+01 0 0 0 +1047 2 5.5559036818886973e+00 1.5874010519681996e+00 1.4227102085492055e+01 0 0 0 +1048 2 4.7622031559045981e+00 2.3811015779522990e+00 1.4227102085492055e+01 0 0 0 +1049 2 6.3496042078727983e+00 1.5874010519681996e+00 1.3433401559507997e+01 0 0 0 +1050 2 7.1433047338568993e+00 2.3811015779522990e+00 1.3433401559507997e+01 0 0 0 +1051 2 7.1433047338568993e+00 1.5874010519681996e+00 1.4227102085492055e+01 0 0 0 +1052 2 6.3496042078727983e+00 2.3811015779522990e+00 1.4227102085492055e+01 0 0 0 +1053 2 7.9370052598409968e+00 1.5874010519681996e+00 1.3433401559507997e+01 0 0 0 +1054 2 8.7307057858250960e+00 2.3811015779522990e+00 1.3433401559507997e+01 0 0 0 +1055 2 8.7307057858250960e+00 1.5874010519681996e+00 1.4227102085492055e+01 0 0 0 +1056 2 7.9370052598409968e+00 2.3811015779522990e+00 1.4227102085492055e+01 0 0 0 +1057 2 0.0000000000000000e+00 3.1748021039363992e+00 1.3433401559507997e+01 0 0 0 +1058 2 7.9370052598409979e-01 3.9685026299204984e+00 1.3433401559507997e+01 0 0 0 +1059 2 7.9370052598409979e-01 3.1748021039363992e+00 1.4227102085492055e+01 0 0 0 +1060 2 0.0000000000000000e+00 3.9685026299204984e+00 1.4227102085492055e+01 0 0 0 +1061 2 1.5874010519681996e+00 3.1748021039363992e+00 1.3433401559507997e+01 0 0 0 +1062 2 2.3811015779522990e+00 3.9685026299204984e+00 1.3433401559507997e+01 0 0 0 +1063 2 2.3811015779522990e+00 3.1748021039363992e+00 1.4227102085492055e+01 0 0 0 +1064 2 1.5874010519681996e+00 3.9685026299204984e+00 1.4227102085492055e+01 0 0 0 +1065 2 3.1748021039363992e+00 3.1748021039363992e+00 1.3433401559507997e+01 0 0 0 +1066 2 3.9685026299204984e+00 3.9685026299204984e+00 1.3433401559507997e+01 0 0 0 +1067 2 3.9685026299204984e+00 3.1748021039363992e+00 1.4227102085492055e+01 0 0 0 +1068 2 3.1748021039363992e+00 3.9685026299204984e+00 1.4227102085492055e+01 0 0 0 +1069 2 4.7622031559045981e+00 3.1748021039363992e+00 1.3433401559507997e+01 0 0 0 +1070 2 5.5559036818886973e+00 3.9685026299204984e+00 1.3433401559507997e+01 0 0 0 +1071 2 5.5559036818886973e+00 3.1748021039363992e+00 1.4227102085492055e+01 0 0 0 +1072 2 4.7622031559045981e+00 3.9685026299204984e+00 1.4227102085492055e+01 0 0 0 +1073 2 6.3496042078727983e+00 3.1748021039363992e+00 1.3433401559507997e+01 0 0 0 +1074 2 7.1433047338568993e+00 3.9685026299204984e+00 1.3433401559507997e+01 0 0 0 +1075 2 7.1433047338568993e+00 3.1748021039363992e+00 1.4227102085492055e+01 0 0 0 +1076 2 6.3496042078727983e+00 3.9685026299204984e+00 1.4227102085492055e+01 0 0 0 +1077 2 7.9370052598409968e+00 3.1748021039363992e+00 1.3433401559507997e+01 0 0 0 +1078 2 8.7307057858250960e+00 3.9685026299204984e+00 1.3433401559507997e+01 0 0 0 +1079 2 8.7307057858250960e+00 3.1748021039363992e+00 1.4227102085492055e+01 0 0 0 +1080 2 7.9370052598409968e+00 3.9685026299204984e+00 1.4227102085492055e+01 0 0 0 +1081 2 0.0000000000000000e+00 4.7622031559045981e+00 1.3433401559507997e+01 0 0 0 +1082 2 7.9370052598409979e-01 5.5559036818886973e+00 1.3433401559507997e+01 0 0 0 +1083 2 7.9370052598409979e-01 4.7622031559045981e+00 1.4227102085492055e+01 0 0 0 +1084 2 0.0000000000000000e+00 5.5559036818886973e+00 1.4227102085492055e+01 0 0 0 +1085 2 1.5874010519681996e+00 4.7622031559045981e+00 1.3433401559507997e+01 0 0 0 +1086 2 2.3811015779522990e+00 5.5559036818886973e+00 1.3433401559507997e+01 0 0 0 +1087 2 2.3811015779522990e+00 4.7622031559045981e+00 1.4227102085492055e+01 0 0 0 +1088 2 1.5874010519681996e+00 5.5559036818886973e+00 1.4227102085492055e+01 0 0 0 +1089 2 3.1748021039363992e+00 4.7622031559045981e+00 1.3433401559507997e+01 0 0 0 +1090 2 3.9685026299204984e+00 5.5559036818886973e+00 1.3433401559507997e+01 0 0 0 +1091 2 3.9685026299204984e+00 4.7622031559045981e+00 1.4227102085492055e+01 0 0 0 +1092 2 3.1748021039363992e+00 5.5559036818886973e+00 1.4227102085492055e+01 0 0 0 +1093 2 4.7622031559045981e+00 4.7622031559045981e+00 1.3433401559507997e+01 0 0 0 +1094 2 5.5559036818886973e+00 5.5559036818886973e+00 1.3433401559507997e+01 0 0 0 +1095 2 5.5559036818886973e+00 4.7622031559045981e+00 1.4227102085492055e+01 0 0 0 +1096 2 4.7622031559045981e+00 5.5559036818886973e+00 1.4227102085492055e+01 0 0 0 +1097 2 6.3496042078727983e+00 4.7622031559045981e+00 1.3433401559507997e+01 0 0 0 +1098 2 7.1433047338568993e+00 5.5559036818886973e+00 1.3433401559507997e+01 0 0 0 +1099 2 7.1433047338568993e+00 4.7622031559045981e+00 1.4227102085492055e+01 0 0 0 +1100 2 6.3496042078727983e+00 5.5559036818886973e+00 1.4227102085492055e+01 0 0 0 +1101 2 7.9370052598409968e+00 4.7622031559045981e+00 1.3433401559507997e+01 0 0 0 +1102 2 8.7307057858250960e+00 5.5559036818886973e+00 1.3433401559507997e+01 0 0 0 +1103 2 8.7307057858250960e+00 4.7622031559045981e+00 1.4227102085492055e+01 0 0 0 +1104 2 7.9370052598409968e+00 5.5559036818886973e+00 1.4227102085492055e+01 0 0 0 +1105 2 0.0000000000000000e+00 6.3496042078727983e+00 1.3433401559507997e+01 0 0 0 +1106 2 7.9370052598409979e-01 7.1433047338568993e+00 1.3433401559507997e+01 0 0 0 +1107 2 7.9370052598409979e-01 6.3496042078727983e+00 1.4227102085492055e+01 0 0 0 +1108 2 0.0000000000000000e+00 7.1433047338568993e+00 1.4227102085492055e+01 0 0 0 +1109 2 1.5874010519681996e+00 6.3496042078727983e+00 1.3433401559507997e+01 0 0 0 +1110 2 2.3811015779522990e+00 7.1433047338568993e+00 1.3433401559507997e+01 0 0 0 +1111 2 2.3811015779522990e+00 6.3496042078727983e+00 1.4227102085492055e+01 0 0 0 +1112 2 1.5874010519681996e+00 7.1433047338568993e+00 1.4227102085492055e+01 0 0 0 +1113 2 3.1748021039363992e+00 6.3496042078727983e+00 1.3433401559507997e+01 0 0 0 +1114 2 3.9685026299204984e+00 7.1433047338568993e+00 1.3433401559507997e+01 0 0 0 +1115 2 3.9685026299204984e+00 6.3496042078727983e+00 1.4227102085492055e+01 0 0 0 +1116 2 3.1748021039363992e+00 7.1433047338568993e+00 1.4227102085492055e+01 0 0 0 +1120 2 4.7622031559045981e+00 7.1433047338568993e+00 1.4227102085492055e+01 0 0 0 +1117 2 4.7622031559045981e+00 6.3496042078727983e+00 1.3433401559507997e+01 0 0 0 +1118 2 5.5559036818886973e+00 7.1433047338568993e+00 1.3433401559507997e+01 0 0 0 +1119 2 5.5559036818886973e+00 6.3496042078727983e+00 1.4227102085492055e+01 0 0 0 +1123 2 7.1433047338568993e+00 6.3496042078727983e+00 1.4227102085492055e+01 0 0 0 +1124 2 6.3496042078727983e+00 7.1433047338568993e+00 1.4227102085492055e+01 0 0 0 +1121 2 6.3496042078727983e+00 6.3496042078727983e+00 1.3433401559507997e+01 0 0 0 +1122 2 7.1433047338568993e+00 7.1433047338568993e+00 1.3433401559507997e+01 0 0 0 +1128 2 7.9370052598409968e+00 7.1433047338568993e+00 1.4227102085492055e+01 0 0 0 +1127 2 8.7307057858250960e+00 6.3496042078727983e+00 1.4227102085492055e+01 0 0 0 +1125 2 7.9370052598409968e+00 6.3496042078727983e+00 1.3433401559507997e+01 0 0 0 +1126 2 8.7307057858250960e+00 7.1433047338568993e+00 1.3433401559507997e+01 0 0 0 +1132 2 0.0000000000000000e+00 8.7307057858250960e+00 1.4227102085492055e+01 0 0 0 +1131 2 7.9370052598409979e-01 7.9370052598409968e+00 1.4227102085492055e+01 0 0 0 +1129 2 0.0000000000000000e+00 7.9370052598409968e+00 1.3433401559507997e+01 0 0 0 +1130 2 7.9370052598409979e-01 8.7307057858250960e+00 1.3433401559507997e+01 0 0 0 +1136 2 1.5874010519681996e+00 8.7307057858250960e+00 1.4227102085492055e+01 0 0 0 +1135 2 2.3811015779522990e+00 7.9370052598409968e+00 1.4227102085492055e+01 0 0 0 +1133 2 1.5874010519681996e+00 7.9370052598409968e+00 1.3433401559507997e+01 0 0 0 +1134 2 2.3811015779522990e+00 8.7307057858250960e+00 1.3433401559507997e+01 0 0 0 +1140 2 3.1748021039363992e+00 8.7307057858250960e+00 1.4227102085492055e+01 0 0 0 +1139 2 3.9685026299204984e+00 7.9370052598409968e+00 1.4227102085492055e+01 0 0 0 +1137 2 3.1748021039363992e+00 7.9370052598409968e+00 1.3433401559507997e+01 0 0 0 +1138 2 3.9685026299204984e+00 8.7307057858250960e+00 1.3433401559507997e+01 0 0 0 +1144 2 4.7622031559045981e+00 8.7307057858250960e+00 1.4227102085492055e+01 0 0 0 +1143 2 5.5559036818886973e+00 7.9370052598409968e+00 1.4227102085492055e+01 0 0 0 +1141 2 4.7622031559045981e+00 7.9370052598409968e+00 1.3433401559507997e+01 0 0 0 +1142 2 5.5559036818886973e+00 8.7307057858250960e+00 1.3433401559507997e+01 0 0 0 +1148 2 6.3496042078727983e+00 8.7307057858250960e+00 1.4227102085492055e+01 0 0 0 +1147 2 7.1433047338568993e+00 7.9370052598409968e+00 1.4227102085492055e+01 0 0 0 +1145 2 6.3496042078727983e+00 7.9370052598409968e+00 1.3433401559507997e+01 0 0 0 +1146 2 7.1433047338568993e+00 8.7307057858250960e+00 1.3433401559507997e+01 0 0 0 +1152 2 7.9370052598409968e+00 8.7307057858250960e+00 1.4227102085492055e+01 0 0 0 +1151 2 8.7307057858250960e+00 7.9370052598409968e+00 1.4227102085492055e+01 0 0 0 +1149 2 7.9370052598409968e+00 7.9370052598409968e+00 1.3433401559507997e+01 0 0 0 +1150 2 8.7307057858250960e+00 8.7307057858250960e+00 1.3433401559507997e+01 0 0 0 +1153 2 0.0000000000000000e+00 0.0000000000000000e+00 1.5020802611476137e+01 0 0 0 +1154 2 7.9370052598409979e-01 7.9370052598409979e-01 1.5020802611476137e+01 0 0 0 +1155 2 1.5874010519681996e+00 0.0000000000000000e+00 1.5020802611476137e+01 0 0 0 +1156 2 2.3811015779522990e+00 7.9370052598409979e-01 1.5020802611476137e+01 0 0 0 +1157 2 3.1748021039363992e+00 0.0000000000000000e+00 1.5020802611476137e+01 0 0 0 +1158 2 3.9685026299204984e+00 7.9370052598409979e-01 1.5020802611476137e+01 0 0 0 +1159 2 4.7622031559045981e+00 0.0000000000000000e+00 1.5020802611476137e+01 0 0 0 +1160 2 5.5559036818886973e+00 7.9370052598409979e-01 1.5020802611476137e+01 0 0 0 +1161 2 6.3496042078727983e+00 0.0000000000000000e+00 1.5020802611476137e+01 0 0 0 +1162 2 7.1433047338568993e+00 7.9370052598409979e-01 1.5020802611476137e+01 0 0 0 +1163 2 7.9370052598409968e+00 0.0000000000000000e+00 1.5020802611476137e+01 0 0 0 +1164 2 8.7307057858250960e+00 7.9370052598409979e-01 1.5020802611476137e+01 0 0 0 +1165 2 0.0000000000000000e+00 1.5874010519681996e+00 1.5020802611476137e+01 0 0 0 +1166 2 7.9370052598409979e-01 2.3811015779522990e+00 1.5020802611476137e+01 0 0 0 +1167 2 1.5874010519681996e+00 1.5874010519681996e+00 1.5020802611476137e+01 0 0 0 +1168 2 2.3811015779522990e+00 2.3811015779522990e+00 1.5020802611476137e+01 0 0 0 +1169 2 3.1748021039363992e+00 1.5874010519681996e+00 1.5020802611476137e+01 0 0 0 +1170 2 3.9685026299204984e+00 2.3811015779522990e+00 1.5020802611476137e+01 0 0 0 +1171 2 4.7622031559045981e+00 1.5874010519681996e+00 1.5020802611476137e+01 0 0 0 +1172 2 5.5559036818886973e+00 2.3811015779522990e+00 1.5020802611476137e+01 0 0 0 +1174 2 7.1433047338568993e+00 2.3811015779522990e+00 1.5020802611476137e+01 0 0 0 +1173 2 6.3496042078727983e+00 1.5874010519681996e+00 1.5020802611476137e+01 0 0 0 +1175 2 7.9370052598409968e+00 1.5874010519681996e+00 1.5020802611476137e+01 0 0 0 +1176 2 8.7307057858250960e+00 2.3811015779522990e+00 1.5020802611476137e+01 0 0 0 +1177 2 0.0000000000000000e+00 3.1748021039363992e+00 1.5020802611476137e+01 0 0 0 +1178 2 7.9370052598409979e-01 3.9685026299204984e+00 1.5020802611476137e+01 0 0 0 +1179 2 1.5874010519681996e+00 3.1748021039363992e+00 1.5020802611476137e+01 0 0 0 +1180 2 2.3811015779522990e+00 3.9685026299204984e+00 1.5020802611476137e+01 0 0 0 +1182 2 3.9685026299204984e+00 3.9685026299204984e+00 1.5020802611476137e+01 0 0 0 +1181 2 3.1748021039363992e+00 3.1748021039363992e+00 1.5020802611476137e+01 0 0 0 +1184 2 5.5559036818886973e+00 3.9685026299204984e+00 1.5020802611476137e+01 0 0 0 +1183 2 4.7622031559045981e+00 3.1748021039363992e+00 1.5020802611476137e+01 0 0 0 +1186 2 7.1433047338568993e+00 3.9685026299204984e+00 1.5020802611476137e+01 0 0 0 +1185 2 6.3496042078727983e+00 3.1748021039363992e+00 1.5020802611476137e+01 0 0 0 +1188 2 8.7307057858250960e+00 3.9685026299204984e+00 1.5020802611476137e+01 0 0 0 +1187 2 7.9370052598409968e+00 3.1748021039363992e+00 1.5020802611476137e+01 0 0 0 +1190 2 7.9370052598409979e-01 5.5559036818886973e+00 1.5020802611476137e+01 0 0 0 +1189 2 0.0000000000000000e+00 4.7622031559045981e+00 1.5020802611476137e+01 0 0 0 +1191 2 1.5874010519681996e+00 4.7622031559045981e+00 1.5020802611476137e+01 0 0 0 +1192 2 2.3811015779522990e+00 5.5559036818886973e+00 1.5020802611476137e+01 0 0 0 +1193 2 3.1748021039363992e+00 4.7622031559045981e+00 1.5020802611476137e+01 0 0 0 +1194 2 3.9685026299204984e+00 5.5559036818886973e+00 1.5020802611476137e+01 0 0 0 +1195 2 4.7622031559045981e+00 4.7622031559045981e+00 1.5020802611476137e+01 0 0 0 +1196 2 5.5559036818886973e+00 5.5559036818886973e+00 1.5020802611476137e+01 0 0 0 +1198 2 7.1433047338568993e+00 5.5559036818886973e+00 1.5020802611476137e+01 0 0 0 +1197 2 6.3496042078727983e+00 4.7622031559045981e+00 1.5020802611476137e+01 0 0 0 +1200 2 8.7307057858250960e+00 5.5559036818886973e+00 1.5020802611476137e+01 0 0 0 +1199 2 7.9370052598409968e+00 4.7622031559045981e+00 1.5020802611476137e+01 0 0 0 +1201 2 0.0000000000000000e+00 6.3496042078727983e+00 1.5020802611476137e+01 0 0 0 +1202 2 7.9370052598409979e-01 7.1433047338568993e+00 1.5020802611476137e+01 0 0 0 +1204 2 2.3811015779522990e+00 7.1433047338568993e+00 1.5020802611476137e+01 0 0 0 +1203 2 1.5874010519681996e+00 6.3496042078727983e+00 1.5020802611476137e+01 0 0 0 +1206 2 3.9685026299204984e+00 7.1433047338568993e+00 1.5020802611476137e+01 0 0 0 +1205 2 3.1748021039363992e+00 6.3496042078727983e+00 1.5020802611476137e+01 0 0 0 +1208 2 5.5559036818886973e+00 7.1433047338568993e+00 1.5020802611476137e+01 0 0 0 +1207 2 4.7622031559045981e+00 6.3496042078727983e+00 1.5020802611476137e+01 0 0 0 +1209 2 6.3496042078727983e+00 6.3496042078727983e+00 1.5020802611476137e+01 0 0 0 +1210 2 7.1433047338568993e+00 7.1433047338568993e+00 1.5020802611476137e+01 0 0 0 +1212 2 8.7307057858250960e+00 7.1433047338568993e+00 1.5020802611476137e+01 0 0 0 +1211 2 7.9370052598409968e+00 6.3496042078727983e+00 1.5020802611476137e+01 0 0 0 +1214 2 7.9370052598409979e-01 8.7307057858250960e+00 1.5020802611476137e+01 0 0 0 +1213 2 0.0000000000000000e+00 7.9370052598409968e+00 1.5020802611476137e+01 0 0 0 +1215 2 1.5874010519681996e+00 7.9370052598409968e+00 1.5020802611476137e+01 0 0 0 +1216 2 2.3811015779522990e+00 8.7307057858250960e+00 1.5020802611476137e+01 0 0 0 +1217 2 3.1748021039363992e+00 7.9370052598409968e+00 1.5020802611476137e+01 0 0 0 +1218 2 3.9685026299204984e+00 8.7307057858250960e+00 1.5020802611476137e+01 0 0 0 +1220 2 5.5559036818886973e+00 8.7307057858250960e+00 1.5020802611476137e+01 0 0 0 +1219 2 4.7622031559045981e+00 7.9370052598409968e+00 1.5020802611476137e+01 0 0 0 +1221 2 6.3496042078727983e+00 7.9370052598409968e+00 1.5020802611476137e+01 0 0 0 +1222 2 7.1433047338568993e+00 8.7307057858250960e+00 1.5020802611476137e+01 0 0 0 +1223 2 7.9370052598409968e+00 7.9370052598409968e+00 1.5020802611476137e+01 0 0 0 +1224 2 8.7307057858250960e+00 8.7307057858250960e+00 1.5020802611476137e+01 0 0 0 + +Velocities + +793 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +794 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +797 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +798 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +801 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +802 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +805 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +806 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +809 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +810 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +813 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +814 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +817 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +818 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +821 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +822 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +825 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +826 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +829 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +830 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +833 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +834 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +837 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +838 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +841 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +842 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +845 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +846 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +849 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +850 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +853 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +854 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +857 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +858 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +861 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +862 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +865 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +866 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +869 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +870 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +873 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +874 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +877 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +878 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +881 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +882 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +885 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +886 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +889 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +890 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +893 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +894 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +897 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +898 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +901 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +902 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +905 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +906 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +909 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +910 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +913 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +914 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +917 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +918 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +921 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +922 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +925 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +926 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +929 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +930 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +933 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +934 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +795 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +796 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +937 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +938 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +799 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +800 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +939 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +940 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +803 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +804 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +941 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +942 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +807 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +808 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +943 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +944 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +811 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +812 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +945 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +946 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +815 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +816 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +947 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +948 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +819 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +820 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +949 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +950 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +823 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +824 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +951 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +952 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +827 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +828 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +953 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +954 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +831 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +832 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +955 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +956 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +835 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +836 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +957 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +958 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +839 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +840 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +959 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +960 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +843 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +844 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +961 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +962 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +847 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +848 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +963 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +964 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +851 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +852 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +965 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +966 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +855 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +856 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +967 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +968 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +859 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +860 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +969 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +970 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +863 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +864 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +971 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +972 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +867 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +868 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +973 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +974 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +871 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +872 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +975 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +976 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +875 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +876 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +977 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +978 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +879 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +880 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +979 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +980 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +883 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +884 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +981 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +982 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +887 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +888 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +983 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +984 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +891 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +892 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +985 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +986 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +895 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +896 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +987 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +988 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +899 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +900 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +989 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +990 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +903 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +904 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +991 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +992 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +907 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +908 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +993 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +994 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +911 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +912 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +995 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +996 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +915 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +916 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +997 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +998 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +919 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +920 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +999 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1000 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +923 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +924 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1001 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1002 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +927 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +928 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1003 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1004 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +931 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +932 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1005 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1006 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +935 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +936 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1007 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1008 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +189 8.9065044166550822e-01 -3.0329364915253565e-01 1.0679215267462405e+00 +575 7.5702468185925209e-01 6.7771813148312188e-01 -8.4042838053334989e-01 +349 -2.9856429366631826e-01 2.2705358776751275e-01 1.2298775462911316e-01 +216 -1.8375709238462921e+00 1.2758473585559087e+00 -7.4319621956044979e-01 +55 -1.0425609338388520e+00 9.9666923218683312e-01 5.4859783317370570e-01 +111 -1.5058145307400863e+00 1.2789536350513628e+00 1.4447805397593627e-03 +624 5.9299080218904265e-01 -1.5751985460513263e-01 1.7305850302998799e-01 +263 -1.4563772070137733e+00 1.0033193744887825e-01 1.5878389172302347e+00 +31 -7.2400960962402972e-01 -3.7160166656762633e-01 1.0619499649107538e+00 +603 -8.0037315294055755e-01 -1.2573917940712251e+00 7.1106441813475674e-01 +281 2.4392566216925702e+00 -4.0568783633665095e-01 -1.7485570804336370e+00 +22 4.4108399311205782e-01 -1.9887869444549811e-01 8.1425803620891260e-02 +321 -7.5173601246058375e-01 -2.3000154874310194e-01 9.8076050695803130e-01 +251 -1.2433987170130684e-01 3.1598222287477068e-01 -9.9327579816059386e-01 +470 -1.1571558831671556e+00 -1.0222832562727875e+00 1.3517610994051185e-01 +355 -5.6085167541969927e-01 -8.9344662636574990e-01 1.2155483209789271e+00 +417 -4.8614110065837240e-01 3.0555886179881769e-01 -5.1494968604816549e-01 +288 4.1053545341630066e-01 4.3011335615007723e-01 1.5208789888771264e-02 +375 -8.5640888859411360e-02 6.9179910643567544e-01 7.0188646695288504e-01 +270 -9.1800209271914179e-02 -1.0601697369196121e+00 -4.5956116225045973e-01 +398 -5.8082579784181365e-01 1.7293746104861294e+00 3.1063402410120861e-01 +109 9.0256138526324670e-01 -5.0680028409555725e-02 -1.2780133358936163e+00 +545 -3.1453540982039396e-01 4.9667882211814512e-01 1.8870478754908366e+00 +700 -3.5826408280847699e-01 -9.6820125963799386e-01 -3.5105748295483025e-01 +256 4.3937053228512490e-01 -1.2614025966540898e-01 -3.0913680686708861e-01 +57 7.6755547559143744e-01 2.4201807018204524e-01 -8.1935944233496327e-01 +225 -4.8410327164107797e-01 5.0771209523503202e-01 4.6668806281039876e-01 +211 5.6720717207414562e-01 1.9397848998633663e-01 -2.6085796574617015e-01 +16 5.3016226360158725e-01 -2.0966782195060376e+00 -1.1592930676717590e+00 +435 9.8181424735716005e-01 4.8649152631047399e-01 8.3589296532285784e-01 +348 1.4847478338502254e-01 -7.9459671486579819e-01 -1.6803895806698485e-01 +5 -1.5528145187353320e-01 6.8623583764847829e-01 -3.8743322021290560e-01 +358 -8.3284811388659852e-01 3.1279573766834745e-01 6.3624448842756209e-01 +12 1.9234244022757414e+00 6.4362379680431059e-01 9.6205702853952704e-02 +654 2.8942236645101636e+00 1.0750049496545326e+00 8.2755701048300112e-01 +49 -9.2426026702787001e-01 -8.9952466474419124e-01 7.7115564475631304e-01 +467 3.5617479130989294e-01 -3.5574110933962488e-01 1.8167915919237576e+00 +121 -5.6278137741537525e-02 6.8624408503589840e-01 1.9748584945967357e-01 +311 5.4257549610399092e-01 -4.0479806228382637e-01 1.3243383663411956e+00 +86 1.1332858224654894e+00 -6.1515773403178590e-02 7.3798233041208283e-01 +745 5.7712963484804869e-01 1.3343313422588279e+00 -1.5452025755382914e+00 +772 -7.4615056090558018e-01 8.1109689192150469e-01 1.3778195530274814e-01 +223 -2.0408007871147453e+00 -7.0296640824934475e-01 6.9282906749746032e-01 +269 2.1987062772649207e-01 1.3934946139555078e+00 -6.0282628798522508e-01 +559 -3.4601272145436890e-01 -6.5238326597019358e-01 1.4946595257118789e-01 +353 -1.2182565873946177e-01 -3.7296603127014555e-01 1.1323109838914189e-01 +446 1.6828783845242647e+00 -1.3960911806543974e+00 1.0199918073605949e+00 +147 5.5679678332316751e-01 -6.6487678586816368e-01 6.4729363062551004e-02 +439 8.2550739947349938e-01 -4.7040084223960738e-01 -9.4756616377431080e-01 +310 2.3581228002856225e+00 -5.0816319241878516e-01 -8.8384706337823993e-01 +206 2.2139436759690123e-01 -5.8610315536163589e-02 1.1901148501889818e+00 +648 -9.0113734035304593e-01 4.9810887042541649e-02 5.0105050562383058e-01 +450 -1.1964598387982500e-02 1.6508977505925826e-01 -5.2814348288443536e-01 +237 -1.4233595674481447e+00 -4.5653342168718525e-01 -2.3826158573105169e-01 +596 -3.8520582823121180e-01 8.5450723770154363e-02 -2.1771307702892298e-01 +604 -2.4702017472154378e-01 1.6453157723028125e-01 -4.0395265797591612e-01 +276 -5.9573953954425118e-01 -1.2626980875500804e+00 -9.2382752105589205e-01 +36 1.4942722049532775e+00 8.1610291166154619e-02 2.6664324998004935e-01 +93 -2.2798698561179815e+00 -5.1214687152655244e-02 -5.2544016322394815e-01 +240 2.0712009643379189e-01 3.6401864199874562e-01 -1.8066501816333996e-01 +466 -1.0256892998106072e-01 -1.1608456720783145e+00 5.3585081881016905e-01 +210 -5.1569311615749702e-01 1.3122168183579983e+00 -4.3542371972363575e-01 +333 1.2503355977961750e+00 6.3487112207963703e-01 5.0074377923319624e-01 +670 -1.1090651818373658e+00 -9.5779775722938321e-01 1.0897202003610205e+00 +140 5.0808710496183906e-01 8.6112600449979537e-01 1.6554037924848468e+00 +7 -2.1904890824193637e-01 -1.0080743962588485e+00 -8.4913184994439769e-02 +285 7.2029106534344467e-01 1.2784513404832591e+00 -2.2616002768149257e-01 +394 -2.0649297286002155e-01 1.1342513209706777e+00 -2.0492660329976112e-01 +781 -1.0395412257801953e+00 -1.0426300050987209e+00 -9.1570564855225678e-01 +215 4.6011097600126649e-01 -1.4399404714349018e+00 2.0620859102694853e+00 +390 8.0067573291835981e-01 6.9286946723315201e-01 -5.4490149878242344e-01 +246 5.1229018440246098e-02 -5.9836265923610010e-01 -7.6424122099955916e-01 +771 1.0515171922710300e+00 -1.3484298311495876e-01 -4.5678197552759162e-02 +87 1.7098682980252883e-01 9.1121741343861185e-01 5.2202787142179886e-02 +4 3.1086643583139967e-01 1.5516830660063543e+00 1.3054116812140419e+00 +185 4.4096707055921042e-01 -6.2727991183639009e-01 -1.5167390555795397e+00 +52 3.7840583134493422e-01 9.4736739323305774e-01 -5.7711662411838893e-01 +32 -1.0726422904177944e-01 1.6722436397929872e+00 -1.3658866403798424e+00 +744 1.1030029322392281e+00 5.1300091670756265e-01 2.2091583331612241e-01 +123 -1.9447065554291565e-01 -1.2680234246690043e+00 4.0269120815068943e-01 +320 -9.7799292523690268e-02 -9.6564296468470256e-01 2.1910782568275189e-01 +679 -2.2037042089080400e-01 3.7982053443901681e-01 -3.5657662792281114e-01 +112 3.5280937180061561e-01 1.0186750426665847e+00 -1.4567062002825375e+00 +11 -1.4301016375279629e+00 1.1072117954872813e+00 -4.3529919335997191e-01 +497 1.2253638869658754e+00 6.4747370743598687e-01 -3.3169310849108480e-01 +24 -1.4194415608729569e+00 2.1307349890860472e+00 -4.4461120633578527e-01 +709 7.2071071387295321e-02 1.1818167266520370e+00 -8.4557015086293630e-01 +74 -4.4858593998973234e-01 -8.7376982939829251e-03 1.2244115795682882e+00 +318 6.7660018671276956e-01 -1.0559334887860889e+00 2.9064941439310416e-01 +98 -5.7027244886422690e-01 1.2089395035269099e+00 -1.6935350952781041e+00 +89 1.9212856194688141e-01 -4.7161236738816847e-01 3.2934392654110067e-01 +525 7.7082628142352716e-01 -2.0710047719993846e-01 -1.2690421806106416e-02 +151 -1.2794649052947014e+00 4.0052003519350193e-01 4.0113379131810961e-01 +110 6.6638483517512059e-02 1.4564395877614422e+00 1.2401686326565792e-01 +78 -6.7838823836650436e-02 8.2664814167484513e-01 -7.3175846092422170e-01 +341 8.8587161186675280e-03 1.3930877059147737e-02 -5.8900831355755279e-01 +186 -1.2764113460560689e+00 -5.3534689233258215e-01 -7.5685435795522971e-01 +650 -1.3222118766852486e+00 6.9194895147199698e-01 -1.6077933171746039e+00 +452 2.6767990887774906e+00 3.0353039146968286e-01 -1.2351968185719038e+00 +617 5.1113554073635506e-02 -1.1167903077236906e-01 -4.7958796221681532e-03 +338 -1.0481832333243417e+00 -1.2017163057233589e+00 -2.7394284795483420e-01 +155 -1.6226341285804695e+00 -8.9155032595222239e-01 -3.2072032375980453e-01 +107 1.3187587880653706e+00 -7.3286761079880650e-02 -1.4741358109554283e+00 +402 1.6081922609505378e-01 -1.9691651330552912e-01 -1.4987229085684395e+00 +168 1.0068045439860067e+00 -1.4838535013042926e+00 1.3853580700174128e-01 +590 1.6260007307880178e+00 -1.1677446040294637e-01 -8.3925425851433400e-01 +454 -1.5146686654766139e+00 -8.5543827881279644e-01 1.8712830496148194e-01 +359 2.5054582967296657e-01 -5.6147514336486470e-01 8.6204197165576857e-01 +451 -2.6214835287177829e-01 1.0287106193348170e+00 6.4207355109561470e-01 +169 4.2239960256797726e-01 1.5125471291151156e+00 -5.7440165104194452e-01 +28 -1.5535135603318446e+00 -1.9745581242547214e+00 8.4271702298828799e-01 +142 -1.8440816457172464e+00 8.1986273685860001e-01 -1.7612247472640548e+00 +582 6.7692051868272107e-01 7.5001884444407474e-01 1.4554174515914051e+00 +487 4.7360144579688360e-02 2.9057663076466328e-01 3.0121398004415589e-01 +611 -3.6080223959094881e-01 3.5244555167660918e-01 1.2490322959575118e+00 +521 -8.1933166045672445e-01 -1.2861098860741962e+00 9.6800224354944697e-01 +268 7.3153150227747155e-01 1.2905765499499955e+00 2.8467299989729511e-01 +346 7.1963918568954621e-01 -7.9413774055888176e-01 -1.5125806307778891e+00 +94 -1.1128713978858953e-01 4.5036140616936754e-01 1.3008479698932351e+00 +542 -1.0845662683736816e+00 -1.7675513820566063e-01 -1.5913015558228499e-01 +83 1.3322753038865609e+00 4.3810091514658211e-01 -7.8521297759438036e-01 +414 -1.7207943684414159e-01 7.2297621659144176e-02 1.9211115462586001e+00 +400 -4.1782883097413265e-02 5.5313918553954611e-01 6.4370733118316548e-01 +407 -1.3322267736199871e+00 -1.3013250912156846e+00 5.7010302796454293e-01 +97 5.2721655796726830e-01 -2.6886554622635278e-01 -6.8011899457778857e-01 +18 1.0045655419529655e+00 -1.8899559720722827e+00 -9.8535490679344573e-01 +336 1.6162227639120594e-01 -1.9501124749327485e+00 -2.6019291878094736e-01 +350 -9.8194781797936148e-01 -8.1124911709012115e-01 2.7384617525399385e-01 +166 7.5493781643827318e-01 -6.6522147685369504e-01 -6.3054962115593227e-01 +460 3.6820709364713078e-01 7.7725751409816746e-01 -2.2942692261845257e-01 +301 1.2729172481938895e+00 -1.2019636462253822e+00 1.0439948705192719e+00 +180 2.3344756461073587e-01 7.8631915005432784e-01 4.2071142904924369e-01 +196 -3.6052699602431992e-01 -1.1346606487665813e+00 -1.9792931044211293e-01 +242 -7.3533474731565762e-01 7.1488700083763645e-01 3.4006974253743533e-01 +577 1.2834846956140535e+00 -5.1051689533881499e-02 9.0706745117435039e-01 +69 6.7850946254862188e-01 2.0496435543566957e-01 1.7796686923181274e-01 +128 5.2743374835244405e-01 5.1484378407854003e-01 -1.5750728024298602e-01 +306 2.7593376643219286e-01 -4.0243314630291221e-01 1.8154979989718195e-01 +81 8.6042431930527699e-02 -6.7150990235367347e-01 -4.7961053758310351e-01 +192 -9.6425464039678910e-01 -9.0484750817107495e-01 1.1557703435975080e+00 +297 8.0528223398454626e-02 3.0535253463845259e-02 -9.3232605515368147e-02 +684 1.7457528275783303e+00 -2.0870452041860852e+00 1.1407514196370685e+00 +43 8.3167771334226059e-01 -2.1540233753894862e+00 -7.7027548011835167e-01 +356 8.9130135615239792e-01 -2.5095536617214376e-01 7.6745408835484730e-01 +354 1.7100387490284955e-01 -2.6349789389385864e-01 -5.4288104496929901e-01 +37 1.5370975760310930e+00 1.6570536640068727e-02 -9.3025629124499881e-02 +204 1.0912158295409140e+00 -4.3865733627266873e-01 2.1869938792049637e-01 +309 4.8073485445872866e-01 -8.1786383548309582e-01 1.1230465129818381e+00 +238 -6.1171835742184022e-01 -2.0680707886739826e+00 -8.1070312992297755e-01 +227 -1.1852340060183721e+00 1.4773857885881173e-01 -3.6824643373243859e-01 +625 -3.7534288418583794e-01 -2.5750869490711092e-01 -1.9449877639974309e+00 +768 7.5090707606510398e-01 1.9453853223511504e+00 -7.6645007817907185e-01 +697 -1.0095269675395122e+00 1.8260739236390222e+00 -2.1000420360110589e-01 +253 -1.5745942640666339e+00 1.3981165419202051e+00 8.7724593186550931e-02 +40 8.3510142559017242e-01 -4.4088804207309107e-01 -4.8726058495915497e-01 +235 -4.3806825648861619e-01 1.2646451771945768e+00 -1.5292753905081513e+00 +316 1.6750053820157379e-01 -2.5039494118523531e-01 -5.9735822075076184e-01 +214 -1.9910048211309817e+00 -7.6261352605084798e-01 1.5824098452676345e+00 +27 -2.6990936377914143e+00 -1.9044577480888275e-01 2.0055134903984745e-01 +199 8.3532347377702498e-01 2.6537266772847962e-01 -9.7976230219790836e-02 +600 1.9617610218922195e+00 4.1846029678373181e-01 1.2762650441033618e+00 +432 1.9482798340729506e+00 -2.4918932399902832e-01 -1.2077171316069790e+00 +184 -8.7943804477850018e-01 4.7581257790573028e-01 1.7099567431300092e-01 +732 9.4065000950601418e-01 1.2766590721772890e+00 -1.5323751876972147e+00 +682 1.3267950262976025e+00 6.8309666869318400e-02 2.2476584113192039e-01 +9 2.8214196787650775e-01 9.6861418055536469e-02 -1.4157487159046309e-01 +141 2.0416448827228502e+00 -2.7145987906168856e-01 1.0200545530216258e+00 +455 -2.9792370613407393e-01 -3.7161070047607270e-01 -1.1568850503201134e+00 +133 -8.0819985062837452e-01 -1.4989575973524087e+00 -6.5315480177493757e-01 +14 -3.4933717488607108e-01 -9.9902597293258122e-01 -4.9851912505538637e-01 +289 -6.3221327652219794e-01 7.1097550653456743e-01 3.8053572588788531e-01 +494 -9.5502248679431423e-01 4.8978333544984054e-01 -1.3591539036257572e-01 +516 8.8016356298857490e-01 -1.4875128894995707e-01 3.3748678431849216e-01 +399 9.8023821318496407e-01 2.2694417127041082e+00 2.0356307299490453e-01 +148 -1.8238595147627643e-01 -4.2985433105050913e-01 3.2154630439566873e-01 +440 8.9310613263037975e-01 -9.0376775844891033e-01 2.3477000720386605e+00 +64 -9.4078220622822695e-01 3.0796810348513470e-01 -4.1451176374304227e-01 +677 1.1388665803316076e+00 5.0465996663243584e-01 -1.1515423795794770e+00 +420 -8.8740631405644599e-01 -8.5195753917143091e-01 6.8091403017686702e-01 +120 -1.3549506302141581e-01 -4.6478292223107853e-01 1.4974414950796666e+00 +580 5.9431625321407999e-01 -1.4339423734871251e-01 4.1223342523521583e-01 +42 -8.2695453684205653e-02 -3.1946128874935453e-01 4.3881492765301344e-01 +234 -4.9651372072534466e-01 7.7453082380528937e-01 -2.2158320623388247e-01 +139 2.3282894102330371e+00 -3.7539281568201704e-01 -1.8456070180491060e+00 +20 2.7951663552432311e-03 6.2591285032424748e-01 -1.6859637314012754e+00 +622 4.3240920660247484e-01 2.0363327470045673e-02 -7.6200126298764659e-03 +681 5.5380824583493116e-01 -1.0191542089478940e+00 -1.1130705800803331e+00 +381 -3.7458144853239872e-01 1.9461062592951897e-01 1.3288736834250652e+00 +561 3.3442668473881304e-01 -1.8297009280343335e+00 -2.0949369195610541e-02 +266 3.5458459284017618e-01 -1.0611829259064187e+00 -1.0653471617804056e+00 +615 7.9332863099939832e-01 2.8343416146694243e-02 8.2329021872665620e-01 +493 1.5936631320606651e+00 5.5752144043261431e-01 -1.2031204000013012e+00 +366 8.7956153602140952e-01 -2.2009417531847730e-01 -3.0533524062141920e-01 +367 7.9737933281181339e-01 1.3322320602951127e-01 1.5850970041294710e-01 +730 -9.3995864183540223e-01 6.4809065186807213e-01 -5.8546138622503863e-01 +706 7.2018572454284135e-01 -4.6367142757203916e-01 1.7079038278897349e+00 +386 -4.7553149487728186e-01 7.6219901342536134e-01 -1.7279260346223495e-02 +243 7.7079145264181581e-02 9.0453007120489470e-01 -6.6086791060119887e-01 +373 1.2957484435554185e+00 9.6500552338154133e-01 3.2748810579142096e-01 +792 -1.4042643541977227e+00 8.2143548610213047e-03 -1.8295660970122254e-01 +79 9.1614014553716372e-01 8.1673025274378896e-01 1.1095435103069158e+00 +46 1.1724148282936657e+00 7.5463312852740305e-01 2.3271682817667314e-01 +511 4.2926950486610777e-01 -4.6722052360121319e-01 4.5879382447751138e-01 +177 -7.9319130077649858e-01 -1.8620839355370603e-01 3.3727919500704789e-01 +261 -5.1430789823128942e-01 -1.1056909556234928e+00 1.9995100225707904e-01 +731 -1.7523371001592496e+00 -2.1193066968256860e-01 6.7620065439876520e-01 +207 3.0582386227180874e-01 -3.5579970431014335e-01 2.8943810817703371e-02 +503 1.1394779133468397e-02 -1.8362225965322662e-01 -1.9803971984623282e-03 +232 4.1252443200697014e-01 1.1423608787220687e+00 5.6733541131797804e-01 +33 1.8503569089764568e-01 5.4279343984937989e-01 -2.0311798241139001e-01 +131 1.7423922882925069e+00 1.0110372244701906e+00 8.0029725632365267e-01 +339 -3.7131347640150825e-01 -9.7828002843996376e-01 8.9396100428982150e-01 +65 -5.9648144540948755e-01 5.2281700293508671e-01 5.6713982486535579e-02 +680 5.3027854920715145e-01 1.5746086854928711e+00 2.7476343949619625e-01 +413 -3.1348023329080416e-01 -6.5721695066497909e-01 -1.6353377194664226e-01 +241 9.8572932859069284e-01 -7.1141856480691623e-01 -7.9403555662349801e-01 +298 -2.9502518394608823e-01 1.1310674053518852e+00 -1.8208710733324103e+00 +640 -7.0084875496249210e-01 1.2954475669453189e+00 -1.1636242656765599e+00 +538 -6.6406861311820753e-01 2.4028874742360648e-01 1.3971415099931637e+00 +113 -5.4162489738286169e-02 -2.0291581895212460e+00 -1.5985110257287318e+00 +723 -7.5456627055237491e-01 4.9903106747888554e-01 6.3359906707026759e-01 +412 3.3905428469690785e-01 -4.3195328362160001e-01 1.3767228472678388e+00 +713 2.8461785375695708e-01 4.2515774363710790e-01 8.5693932411097407e-01 +103 8.1483125197718831e-01 1.1997283817543161e+00 5.1954820777890109e-01 +607 -3.8384703485052202e-01 -3.1480074733535086e+00 5.2094138518003230e-01 +15 -8.2804154726067358e-01 6.5223773266943494e-02 -1.0130983592009206e+00 +711 -1.1393190500984862e+00 -7.5325915532409504e-01 -5.1353617259494899e-01 +277 -1.4920557967732104e+00 -1.4665477191904697e+00 4.3271124328345123e-01 +409 -1.8698341358358361e+00 6.2207190408674071e-03 -1.2266568610656396e+00 +124 -8.2412409471247450e-01 -8.5774455443881514e-01 -1.3080888189492332e-02 +221 3.5984330604701104e-01 2.1176342296582876e-01 -1.8450208593172597e+00 +392 6.6253879374555194e-02 -9.9422738111746645e-01 9.6014111514947509e-01 +319 2.8353536002648463e-02 -2.4244265909602020e-01 -1.2006198122340612e+00 +249 -2.5391646818076480e-01 -4.7739823809456960e-01 4.5980340291487409e-01 +125 2.2409015953583614e-01 -3.6475673908519148e+00 -5.9088775438987362e-01 +770 -3.0556019249697081e-01 -1.5936845196272417e-02 -2.0682167278144153e-01 +174 -1.7515368488589717e-01 -9.5349300095553002e-01 4.6877157540269521e-01 +273 -5.4912606580581225e-01 4.2329698285507361e-01 2.9911843015374479e-01 +343 1.7048850348895200e-01 9.6212330309837626e-02 1.1496375383283017e+00 +597 -1.2999733531175208e+00 -9.6359404594744102e-01 -1.7910688234815901e+00 +95 5.0032761940399140e-01 -1.2597974562749190e+00 -2.1170756585106953e-01 +2 1.0725193186637751e+00 1.3922686249322977e+00 -1.6259548445302988e-01 +200 -2.5207494566399047e-01 -8.6731542933312111e-01 -1.3334395725702470e+00 +591 -1.0927197363126600e+00 -1.3664374733632434e-01 -1.6316715862339881e+00 +188 4.5138955825073773e-01 1.8426807163818140e-01 3.3768234804718278e-01 +173 -1.4410244890630788e-01 8.0053283923189755e-01 -8.8494104263104112e-01 +62 3.2580176321557863e-01 1.7179823329187818e+00 -3.0252082356017762e-01 +209 -2.2164207876936741e+00 -3.4071105444095406e-01 -9.7678708116723134e-01 +231 -3.2319143672087181e-01 7.5400097423028811e-01 1.5214403927985978e+00 +686 -1.3069407377922715e+00 3.0626589500800167e-01 -9.8888840343240192e-01 +605 -1.0189969093502391e+00 4.7260627627281976e-01 -4.8653048072316368e-01 +313 -9.8862661168963128e-01 4.6697541007920834e-01 -8.6752724318831020e-01 +194 4.6874184324420204e-01 3.5370579919164041e-01 -3.5173169059982529e-01 +434 5.6575908780560391e-01 7.6060186435176202e-01 -3.5282790976043926e-01 +465 1.0970498949323255e+00 -8.8801729281729483e-02 -1.2456548232937976e+00 +262 8.8264822688033184e-01 -2.8990485680270622e-01 4.4061543861142660e-01 +154 -2.1894405314532442e-01 2.8617054736290309e-01 1.4573746962258829e+00 +704 6.7564780409443526e-01 3.4934242940901011e-01 -3.4313208811944235e-01 +550 -2.9893404867947165e-01 -1.8457010747808160e+00 4.2185337104903631e-01 +647 -1.8258244574429189e-01 4.6686507457253557e-01 -4.5416176567181171e-01 +152 -1.7495877211145869e+00 1.3987383364241341e+00 5.8032184957517341e-01 +105 -7.5592999650697545e-01 1.0759103901145686e+00 -2.7006489692984414e-01 +639 -2.8721087158595660e-01 -5.4411640086511615e-01 1.5989197027940798e+00 +335 -4.9954846196573299e-01 -8.1372069510167144e-01 2.5028701218070237e+00 +574 -2.4332936494934218e-01 -1.7336028342914696e+00 -4.8441727603702911e-01 +34 -9.3034906194733757e-01 -5.8378829698898826e-01 -4.6587668867943882e-01 +378 -1.3462616151135749e+00 -1.0400801943220933e-01 -5.4989384308617162e-01 +198 4.7090877199431802e-01 9.8680517254153144e-01 7.7693175173495554e-01 +144 8.9222980995404699e-01 3.1359235062766555e-02 4.3241112060437181e-01 +317 -5.2093068285014166e-01 5.9608701333070069e-01 -4.5215212209272110e-01 +636 8.5475108122524165e-02 -1.9324025999867721e-02 2.7831708730210425e-01 +630 -4.2622935760029934e-01 1.7801220944946026e+00 8.4853105270191032e-01 +735 -1.4463108202142074e+00 -1.2759542047669561e+00 1.6500436131126079e+00 +82 7.8178969179529223e-01 1.1061664513574117e+00 -2.3569727182411002e+00 +462 7.0937467125679943e-01 1.1326304642861040e+00 -1.8824277639823839e-01 +379 1.3828673656440935e-01 -1.9588513652541191e+00 5.8515646173286406e-01 +634 8.0580938302911687e-01 -1.0540828243581515e+00 1.0912806111042472e-01 +397 -6.7244349049378616e-01 1.8641600206353390e-01 -8.3045485267881455e-02 +599 -9.9600900017079097e-01 1.0640116468297485e+00 -1.3186438491371308e+00 +438 2.6699947215482328e-01 9.9263275501522985e-01 -9.6826111385386826e-01 +431 -1.8738057508554546e+00 5.0099987423722826e-02 4.6194369401920884e-02 +674 -9.8118552099670719e-01 6.8627335628823194e-01 1.0935772296489521e+00 +478 -1.0537130189255315e+00 1.7504205661250860e+00 -1.1959131373993770e+00 +360 1.0277526502726995e+00 -1.9605407376110273e-01 -8.0995119776628310e-01 +364 -1.3480007810106169e+00 -9.0768349403258064e-01 1.3510625252687793e+00 +755 -1.6120362187335976e-01 7.7625447392104840e-01 4.3992552869904339e-01 +201 4.9805062722070459e-01 -4.2146477772700142e-01 -4.2284898612697802e-01 +44 1.6914103982767659e-01 -1.2116065800864466e-01 9.2959719065379798e-01 +193 1.1479194112364430e+00 8.8240940176381089e-01 3.3983990575299583e-01 +449 -2.4331392414516326e-01 -7.2305857026844889e-01 9.8113573569485579e-01 +729 2.4741234851797489e+00 -9.0336037908641453e-01 2.1833355736821541e-01 +660 6.4983893850016350e-01 1.0332000419592400e+00 -9.7208511951042997e-01 +100 2.4292922392414246e-01 -5.4831227265637461e-01 2.9192516406601815e-01 +138 2.3124888452855816e+00 7.3175170987503446e-01 -9.0711826391841488e-01 +678 1.7140038564202615e+00 -6.1608004487326828e-01 -2.4303546330028616e-01 +161 1.6777955904119146e+00 4.9739298739931143e-01 7.5129710401227245e-01 +547 -4.5798902546528925e-01 2.9456903166187204e-01 -6.0691751342360767e-01 +159 9.8156524077379781e-01 -6.1066243092863204e-01 -4.4591217013350631e-01 +312 2.3010993726444167e-03 -1.2645013081201570e-01 2.4360650646932763e-01 +326 -9.6074050837859515e-01 6.1042561039339427e-01 1.3136570365999511e+00 +208 -1.7816198386332520e+00 -3.1656464334592083e-01 -1.6777341996459605e-01 +136 1.2531539350017353e+00 -3.0584097935819804e-01 -1.1690866685102326e+00 +190 3.5056769772367641e-01 -4.4255759560533031e-01 -1.0403614821210802e-01 +108 3.5699829329057903e-01 -7.4391082891509575e-01 1.2311528819717776e-01 +275 -1.3928545432187509e+00 1.3027460896675414e+00 1.2982646874474044e+00 +385 5.7672618537626941e-01 1.4702982318095221e+00 1.3361206358983531e+00 +73 -6.7713612777537335e-01 -3.5656815315089285e-01 6.5931336668306517e-01 +722 -1.8786874239694762e+00 -7.2921602950132436e-01 -4.3711359620350704e-01 +51 -4.9873208875340314e-01 9.5073289849764608e-01 3.0762848631302198e-01 +775 2.2290910384525955e-01 5.8902168630750096e-01 -1.0188469835539331e+00 +740 -1.8748743347159388e-01 7.3298084752507431e-01 7.9199906329399417e-01 +96 5.4799309433764465e-01 3.6098061207325444e-01 -7.5226358198877752e-01 +498 -7.8554177745076104e-01 6.9693513309140964e-01 1.1499191692202853e+00 +337 -2.9522574847931965e-01 1.3088792868448116e+00 6.5920203922828968e-01 +601 2.9309831115959029e-02 2.9078423283192395e-01 5.2870852808197577e-01 +19 -1.2145775791616717e+00 -7.0597884302932812e-01 -5.6292847338919072e-01 +651 3.5414773362284679e-01 -1.3514404762950596e-01 -4.9057335099733912e-01 +555 -2.3983691847198838e-01 3.6619471243309193e-02 -3.9402267745024150e-01 +160 6.6371277206829660e-01 -9.0993197278053284e-01 -2.5176694934913557e-01 +119 -1.6989208499184052e+00 -9.6787342435503812e-02 4.3730041558106170e-01 +471 9.7365452072699699e-01 -8.6302792242721316e-01 -1.2838562528599640e+00 +48 8.4532959230758542e-01 1.9734685390273771e-01 -4.2225033047582716e-01 +479 1.2414335547336863e+00 -1.4674307398354731e+00 8.5659064064917412e-01 +712 -6.3217992256191291e-01 2.5189948134684487e-01 -9.4816088087265304e-01 +421 -3.3225292930830869e-01 -1.1837785563742959e-01 -2.8328612016291410e-01 +410 -5.5003402375038446e-01 1.7338375438656628e+00 -9.5569564642822169e-01 +25 -1.3324540629508539e+00 4.9813846437222510e-02 -2.8553383059229026e-01 +271 6.6284341267546021e-01 1.6617401948259278e+00 8.1283990033393871e-01 +122 -4.7745827014934718e-02 1.1237765199895660e+00 -3.4988048238134045e-01 +693 -4.9552333169296567e-02 -3.3002479012952585e-01 -1.3617475423192507e+00 +512 -2.0597931783587806e+00 5.8540839456955407e-01 -4.3095643901834269e-01 +613 5.1233483346374598e-01 3.1220181560752652e-02 7.7573065305135025e-01 +153 7.1798062402905941e-02 9.8647790240531630e-01 -7.4224365066728404e-01 +58 -1.1970806192623149e+00 -1.0754795004297699e+00 1.3445059015620561e-01 +70 -6.0600585770068627e-01 -3.7918980351153653e-02 -3.1800139920702758e-01 +129 3.0477559050802122e-01 -7.1788276236221771e-01 -9.7011124406600890e-01 +565 -2.0226912346753759e-01 -2.0655202148104785e+00 9.2663171110637654e-02 +250 -6.2950059985502749e-01 7.2449204530740619e-01 5.3954329288358982e-01 +102 -8.8160023973499357e-01 2.1015424326185439e-01 1.8572602776057916e+00 +675 -9.5116238543030240e-01 1.8918523951419450e+00 3.7681206321142989e-02 +645 9.8847350569204862e-01 -2.0687513119445762e+00 2.3164358524142187e-01 +1 9.1248643591930823e-01 -1.2938786443901090e-01 -1.3383984486411532e-01 +195 2.3747607071427448e-01 1.0482000313216748e+00 -1.3713549398371638e-01 +756 -3.5288094289095140e-01 -9.5886553995560053e-01 4.5264197728414157e-01 +552 -3.7917824295292432e-02 1.6015075234158114e+00 -2.1726714839830943e+00 +489 1.0294013948389817e+00 -7.9820780177117501e-01 5.6364227342722277e-02 +23 6.9210315750465035e-01 3.7993942890602278e-01 -2.4361701414674794e-01 +345 -7.4214418933382875e-01 -6.5458244866982085e-01 6.3163206007812189e-01 +134 1.2673549428081321e+00 5.5491498549736518e-01 3.1027713221978048e-01 +539 -9.9929879965006230e-01 -1.0518010274501666e+00 1.8611602431879698e-01 +663 5.2722970161140337e-01 2.8130881595401568e-02 -2.0121405839867729e-01 +29 8.7224294459458407e-01 1.2686587214213185e-01 -1.8576708320430474e-01 +570 -6.7331728214972320e-01 -3.5286939975971487e-01 -7.6958865209583083e-01 +459 -1.3501549524473828e+00 -4.4718083586530195e-03 -1.5196720071707011e+00 +247 -5.8837865832088221e-01 5.6597442818684729e-01 -7.0396009855551489e-01 +258 -5.7641167126754567e-01 -2.2269107030615447e+00 5.8797695735829003e-01 +584 -1.1965924893495357e-01 -1.6790262492713317e+00 9.1881296786422872e-02 +383 -5.6215933081458080e-01 3.9233611175833433e-01 1.3295283535353727e-01 +80 1.1397305934497591e-01 -1.1988674931202135e+00 -1.3190468611521966e+00 +587 4.1893855927758450e-01 1.6418183835592124e+00 -7.5834028572473999e-01 +750 -1.4769086548742758e-01 3.2878715188088348e-01 -3.7514409185335174e-01 +41 -1.3027034264298296e-01 7.9080382640329794e-02 3.5477741012117830e-01 +178 -3.1221986436233490e-01 1.1092284083316828e+00 7.6472942752994237e-03 +84 3.6600955190536205e-01 7.5833573137951682e-01 1.9720345869136955e+00 +665 3.9857912832719594e-01 3.8922563991978221e-01 5.2565837255223469e-01 +628 1.2989270740664856e+00 2.8985468903825623e-01 -1.0711637165620229e+00 +380 1.2891871490559794e+00 8.8587572524922475e-01 -1.1953684075775846e+00 +401 1.1389187153811178e+00 1.0362749820988151e+00 2.7880579279218254e-01 +391 1.0766552173865467e+00 -1.0630955853979829e+00 -2.0125075011654242e-01 +485 6.8484272291415335e-02 -6.6821949827437152e-02 -5.6726732787370604e-01 +644 -1.8972613202593271e+00 2.8122617501584270e-02 3.2147496346714022e-01 +99 -9.1739533394527339e-01 3.5368612648445058e-01 -1.1899224679130795e-01 +564 -5.7966528507236847e-01 -2.4926491917566998e-01 -5.1971783176708608e-01 +265 3.3395232982807982e-01 -9.3200209967506786e-01 -1.1639613906309305e-02 +77 -7.9189481629077596e-01 1.2279743082303192e+00 -1.2691659278934788e+00 +219 -1.4887788284592388e-01 -4.7702126300794206e-01 1.5572046444288683e+00 +330 7.7748929603664377e-02 3.0835395788152514e-01 7.7609553763441641e-01 +699 1.0804254279625638e+00 -1.9258504358610140e+00 5.9779046041171868e-01 +377 -1.3136786823373048e+00 3.2458556685727302e-01 -4.4471819208329066e-01 +504 -1.1513990239449732e+00 9.9499001361123648e-02 -7.1628992989009799e-01 +610 5.8032634339715783e-01 3.6734457502997303e-01 1.1851209630129318e+00 +742 3.7762995471702071e-01 -7.0632507422588287e-01 1.0963540385626693e+00 +517 2.2536579363898257e-01 6.4492604466265346e-01 1.2386818414797647e+00 +10 -1.0586573799928611e+00 4.7438043471274305e-01 1.4641796507393634e+00 +254 8.0902987685274241e-01 -1.8463672312042531e-01 4.7539896051217367e-01 +115 -4.5057952023052028e-01 1.6529678288205402e-01 -3.3840576978390796e-01 +228 -5.3819908484960277e-01 3.0378045866469905e-01 -5.0634111124943582e-01 +274 8.3938491457539433e-01 4.6008184863883766e-01 -7.8585638079655740e-02 +500 5.0963397357748041e-01 4.1622411241314566e-01 8.8178504125961149e-02 +492 -8.1348036729637174e-01 -2.4466358255457452e-01 2.4209717147705814e-01 +132 6.3581818888976571e-01 -7.4503239986288605e-01 -5.7143179351456005e-02 +213 7.9284618033490362e-01 6.1587059393166366e-01 -8.6292729746998531e-01 +572 -1.0396203122799384e-01 2.1583187045827293e-01 3.8551148909315235e-02 +760 1.6126454147297514e-01 1.0831199607447020e+00 -1.4157551707866231e-01 +785 7.4157893083474091e-01 -1.3850849484607328e+00 9.8745937964551667e-01 +369 8.9493362210963018e-02 -8.2173331970223440e-01 -3.3730036721373519e-01 +776 -4.3059415169104920e-01 8.5102433897471708e-01 -2.0969757693912972e-01 +662 -1.1331370871371034e+00 -2.3192393640321360e-01 -8.0394611707531746e-02 +736 -1.1848805574480654e+00 -1.4434001396054252e+00 -3.5809354001469346e-01 +406 1.6664015209563326e-01 9.1249175406233074e-01 1.9383471433157904e+00 +472 1.9560278745794366e+00 1.4333733714909372e-01 -3.2385678603224621e-01 +299 3.8283126305749732e-02 -1.0188730050845995e+00 -4.8581996548006251e-01 +295 4.7128008483304751e-01 1.6933924063822241e+00 7.9166898545302056e-01 +566 -3.7963875251853135e-01 -3.0230131252031284e-01 3.2984795775063758e-01 +67 8.8991347138314714e-01 -1.9586080202891468e-01 1.0740919479787072e+00 +491 1.6101706377463687e-01 -4.9371482881731032e-01 -2.5396320181121901e-01 +284 -2.1143656171842862e-01 2.3391773935352778e-01 1.7536671474706117e-01 +66 -1.3637009238551721e+00 2.1027743946924132e-01 -9.9366409837983727e-01 +126 7.2817471744245055e-01 4.8791142574255514e-01 3.7113049869460829e-01 +179 1.5506027330574587e-01 -2.3137961545328731e+00 -6.6815656315728766e-01 +374 5.7470013557970157e-01 -8.6344293906638270e-01 -7.5445562502039751e-02 +536 -1.1331292571396754e+00 1.0179233917633335e+00 -1.7606615218982591e-01 +557 8.5769613289984475e-02 -5.9788772506129617e-01 -6.5119632295761187e-01 +137 1.1933208904995560e+00 5.6086336412112281e-01 -4.7051168542909050e-01 +252 -7.7444371232275000e-01 -6.5922786802672073e-01 -1.5566460023397239e+00 +181 -1.8849901335809864e+00 1.1049780507704556e+00 -1.3241998072310752e+00 +54 -1.0065485423810610e+00 -4.0049289089347767e-01 -6.5589992805329357e-03 +340 -7.0849991336615320e-02 4.6631843230427950e-01 2.2809641774972550e-01 +589 3.0284612857898235e-01 -2.6810601569025350e+00 -1.7745829579383763e+00 +408 1.5091475734980602e+00 -5.3565987127354120e-01 -5.5994649830771341e-02 +303 1.6370060662025265e+00 2.2536868133118417e-02 -5.3607568408691963e-01 +21 -3.2415055968433505e-02 -1.7768920604031566e+00 -5.6672737961774511e-01 +598 -7.7583809953830740e-01 -4.9169561799016914e-01 -4.9547454988128414e-01 +157 1.2307351494256755e+00 2.5979587996489967e-01 -1.6117352200315968e-01 +447 -1.8420312754662024e-01 7.5526994788302459e-01 1.4425142539363434e-01 +296 -1.0312090601373358e+00 9.2899609403277073e-01 -5.4541495703783016e-01 +560 -9.2293128163671134e-02 8.1489535688971326e-02 9.6480343952589565e-01 +286 -7.5837119114728224e-01 2.5869562144620240e-01 -1.1824114480729681e-01 +501 -2.7181324257350292e-01 -5.3743305930521812e-01 3.7630888025487508e-01 +61 1.1486520170541681e+00 1.3850179113022831e+00 -9.2496603577291436e-01 +757 1.5922192880615157e-01 7.7544813432653437e-01 -4.1762460118636130e-02 +765 3.9864308096435336e-01 -3.6544946595706096e-01 -5.3945191761440403e-01 +578 -8.8392545898551922e-01 -5.6072219148822078e-01 1.8360155395136735e+00 +163 8.5418258729543761e-01 -1.4316448374413802e+00 -9.8359638354331824e-03 +508 5.3784926333836303e-01 -1.7625955607073622e+00 -1.2142191054690950e+00 +528 -3.9662222974713096e-01 4.5230689153048634e-02 -1.7846796811831720e+00 +233 -8.2625961471122847e-02 -7.1931270732531338e-01 -1.2148284775129273e-01 +212 6.0668141452104307e-01 -1.8372088639934092e+00 2.2993673952864493e-01 +419 -2.8107708792143771e-01 4.9008025261950078e-01 3.0737821311126762e-01 +376 7.8609602845543503e-01 3.2051117043989186e-01 -3.0721385819737329e-01 +522 -8.5391323425894272e-01 4.6289550453876144e-01 -1.4861060297694129e+00 +191 3.0803187646018138e-01 1.1559740857558467e+00 -7.6127728534544670e-01 +635 7.7812823322618119e-01 1.4795080334185525e-02 -1.8534579198876016e+00 +779 -1.2139822223951446e+00 4.4004563471222619e-01 -8.1219348659078094e-01 +669 -1.4770039954418671e-01 4.9238623696294760e-02 -7.3950476805710363e-01 +101 -1.6667913572690447e+00 2.7158346241761305e-01 -1.2317598065423092e+00 +172 -3.6084577173038229e-01 -2.6371092070348462e-01 -2.4984964220691874e-01 +481 8.3820205609805254e-01 2.4836073011466558e-01 3.9907386134562892e-02 +657 -2.2811110719106670e-01 5.5779916529800955e-01 3.6691510482566841e-01 +244 9.0709476942842637e-01 3.2335981336364861e-01 4.8277068425979336e-01 +728 -4.3481628523554955e-01 1.0145068368245616e+00 -4.8530460786425123e-01 +347 -1.8649657776608739e+00 -1.4251729223981056e+00 -4.5544876749912527e-01 +505 -2.3968254735404315e-01 9.8227573825802730e-02 -6.0856860960407810e-01 +255 -7.5251359222689396e-01 -1.7237356692785785e-01 5.5007215632753270e-01 +626 -1.7136007652018692e-01 -4.9343117093792871e-01 1.3887052033495677e+00 +307 1.3009691130401499e+00 -1.4659745057722191e+00 1.7905217283196523e-01 +752 5.6568132832271606e-02 1.5538854453333224e+00 5.8870504925990363e-01 +202 -9.9805666271675267e-02 -3.0182267873557989e-01 9.3596674620334896e-01 +305 4.0981433834411174e-01 -6.9089736936901780e-01 6.8869509932071171e-01 +541 8.0403151084241553e-01 1.1391788128159959e+00 -8.7197101227356377e-01 +187 3.0449280619324219e-02 -4.8554657640192195e-01 4.8580161507265601e-01 +405 -1.7897550905108754e+00 3.2385735825816486e-01 1.0501956181354057e+00 +725 3.6172889489239296e-01 1.1535608640161732e+00 -1.0420232923264888e-01 +39 -8.7422789947309476e-01 -1.3677461254341532e+00 -1.6120248209859485e+00 +667 1.6425906367198495e-01 1.6522202850459569e-01 -8.2408153196984213e-01 +283 -5.3195799286944512e-01 6.2961424252659348e-01 -5.4129856096134799e-01 +351 -2.1516991518530937e-01 -9.3537874583492697e-01 -1.9897430133918463e+00 +739 8.8972080307062762e-01 6.9006276638427300e-01 8.9322925464279368e-01 +533 5.1558913325744626e-01 8.6641078433873420e-01 -7.1453755219010207e-01 +304 -1.3432315863833029e+00 -4.9864767705158985e-01 2.1623618147722171e-01 +689 2.6404371518041952e-01 4.6698500327434522e-01 1.9116444151760262e-01 +692 -5.9725174431023587e-01 -4.1317913616556667e-01 9.5918175173615583e-01 +404 1.0408309111350189e+00 1.9767535802446978e+00 -7.7479864422864697e-01 +743 9.1843906039796108e-01 -2.2954027954386935e-01 -2.1727397649071909e+00 +327 1.2519166606439294e-01 -2.2538028873444987e-01 1.5661540892896733e+00 +562 2.6986090867377593e-01 1.4518535947298683e+00 -1.1728602298185931e+00 +502 -3.4352005049193124e-01 -4.1151717334779242e-01 -3.7628550003639083e-01 +205 4.8080768784908073e-01 1.6846463212580856e-01 2.5617114525721449e+00 +130 -1.0727590579869530e+00 -1.2001489383294395e+00 4.9749873491600188e-01 +3 1.7197445868685817e+00 1.9549166047600297e-01 4.7359841319785773e-01 +176 -8.7632340588711125e-02 -3.1110674450688505e+00 -1.5874917787531931e-01 +661 -8.1349800262320882e-01 6.4748541534968973e-01 1.6261201242553192e+00 +558 8.7844723992369667e-01 1.4103546403853200e+00 -1.0161000100457043e+00 +135 -1.0032968014086500e-01 6.2837975555078873e-01 -1.0091363430990541e+00 +331 -7.8248723108305152e-01 -3.5585112405212665e-01 -8.3725815085542321e-01 +753 9.3711331699796097e-01 -1.8602107656904787e+00 -1.1129154025236696e+00 +222 3.7617052000537937e-01 9.4133675654502658e-01 4.3684503759095494e-01 +114 -1.6854827943857978e-01 7.4319182104400294e-01 1.5232780459212683e+00 +632 -5.4242080816461447e-01 -6.2030824222240222e-01 5.9619827878367981e-01 +668 1.0035333559733435e+00 1.0024103770133704e-01 -6.6293066273367651e-01 +554 -4.1393576135416660e-01 -1.3619110137568327e-01 1.7430099602022242e+00 +287 1.8771684304521863e-01 -2.3317113808316811e-01 -5.2801800378299668e-01 +718 1.9060262854960000e-01 5.3301490720285205e-01 -8.2349444419236653e-02 +308 8.1115401364081563e-01 -4.0489560762010635e-01 1.2988051041430455e+00 +780 -3.8477280114390039e-01 2.6277070391745083e-01 5.2223711641898807e-01 +422 5.7202619974897034e-02 6.0934165115517247e-01 4.0247081221553538e-01 +790 -9.0349610282676485e-01 1.0176476928061977e+00 -4.7982049155468987e-01 +474 -3.8793507555534579e-01 -2.8829485298959897e-02 1.2605605900397656e+00 +618 1.2422588318264125e+00 -2.9341549826475433e-01 -5.6996154778652508e-01 +352 3.9494031443683036e-01 5.2588313085940563e-01 1.0300214254910756e+00 +551 1.2195626914563338e+00 1.5947001012201542e-01 -6.5745461762656121e-01 +171 -1.1501258482443686e+00 7.6260814854021430e-01 -4.0556043603503766e-01 +702 -2.0695017189901406e+00 6.7856920011475907e-01 5.5290677139442301e-01 +546 -3.9328929372147453e-01 4.8847339526280809e-01 1.7757145413538027e+00 +567 4.1692954929664183e-01 2.0749078176824434e-01 1.8859525313740384e+00 +442 -3.1368642141724979e-03 -6.0048785656343662e-01 1.0284121661529235e+00 +293 3.6184159603026977e-01 2.1572223605046723e-01 -2.6302481920717707e-01 +370 -1.2257138514669768e+00 7.8294571821553083e-01 2.5562725861940233e-01 +519 1.3682055347130044e+00 -6.4070863843376658e-01 -2.2318099409036455e-02 +117 4.0223185799914840e-01 -3.0049700159242421e-01 -5.5499371705526612e-01 +746 -1.0684839802453423e+00 -8.6724889694067453e-01 1.4324412151585772e-01 +436 -1.0239607049832089e+00 -1.4201092250003636e-01 5.4999948707132307e-01 +368 -7.6861014777946834e-01 -5.8937689427695683e-01 -1.5354423125286110e-01 +683 -8.4426034411630657e-02 2.2827169796380065e-01 -4.9549031796777422e-02 +282 6.2931988222039559e-01 -1.9578163228815082e+00 -1.9662725778718612e-01 +737 -2.0342036270474080e+00 9.5857648722490774e-01 -9.1162684647973324e-01 +71 -3.0604288376082051e-01 -6.7442860428264784e-01 -7.5085522931417314e-01 +384 3.4706340767528467e-02 -1.2227473990207705e+00 7.0555162413763728e-01 +786 -7.2055852704541667e-01 1.5181531907133667e+00 1.2047611385930548e+00 +236 -3.9199282461578078e-01 -4.9830703331363146e-01 -8.4547508066445032e-01 +104 4.5586346302247355e-01 5.7540727722225538e-01 -6.2406023377897413e-01 +218 4.1880335079873023e-02 -7.2472627551187419e-01 -1.0732958713963579e-01 +698 -7.3922231914442849e-01 -1.6070470016506047e-01 -3.1865945945967900e-01 +592 1.0559518538823915e+00 4.6669700821788840e-02 1.9952471689705407e+00 +443 -1.9384817518325685e+00 -6.9619106689292631e-01 -4.3900085037326031e-01 +429 -1.6797758423493020e-01 5.2930468106113904e-01 1.2158590219369558e+00 +532 -4.5591390404644866e-01 1.1820280726510564e-01 6.4520324462408418e-01 +334 -6.6330447440689788e-01 1.4161224465038999e-01 -5.6087214894012871e-01 +543 9.3060078120730960e-01 -1.6264646351071388e+00 -3.0123936365589415e-01 +280 1.6247992109048895e-01 7.9302287008751482e-01 3.8501290036732272e-01 +424 2.4387266057114769e-02 -9.5690079714282084e-01 9.6680363050402585e-01 +468 3.8517428038246565e-01 -3.1451579008451677e-02 -8.8069942247942079e-01 +248 1.8424309311413353e-01 -1.6890812133181645e+00 8.1829778800726463e-02 +116 2.5162802475461610e-01 -1.1350247437690628e+00 -7.0033210626416087e-01 +294 1.8057563299529927e-01 -1.9756143766204673e-01 1.2907812292851537e-01 +344 2.0901504819938974e-01 8.2767436589193510e-01 -1.5940084686090024e+00 +322 1.3102341930842096e+00 -1.7164199305655672e+00 -1.0682074386627574e+00 +540 1.2277283760935920e+00 1.4733678099813654e+00 -4.7014235049199277e-01 +229 -3.5669584936671733e-01 1.1024159741212434e+00 -2.3395602408399205e-01 +26 -1.1324391879496691e+00 -1.1212102416823566e+00 -5.0050289636050294e-01 +761 -1.8058673776065786e+00 -5.2855088743362392e-03 1.5941597157342990e+00 +643 7.2721763638384440e-01 -7.1712533043349369e-01 -9.5249187299054339e-01 +791 6.5842720371958197e-01 -5.3369231160718143e-02 1.1614525679400947e+00 +606 7.0249623572961251e-01 -1.0006951564519172e-01 -6.5650522160638780e-01 +655 -4.3339602787847370e-01 -9.6073596686464602e-01 -7.5316452647779242e-01 +264 3.8305661001360808e-01 -3.0518891099941975e-01 -2.5177844403660554e-01 +6 -1.2973174148564008e+00 3.8968137168942041e-02 -4.4393443706210989e-01 +716 -4.8642427420061429e-01 -1.6652870559166291e+00 -1.4314832440574756e+00 +411 9.6269928605051813e-01 1.9686073078687749e-01 1.1367493436463378e+00 +526 -1.0162687509900299e+00 1.1239814514292061e+00 4.0965929612815241e-02 +433 1.1758496957642071e+00 -3.3660451208863101e-01 -2.7668032838012300e+00 +488 4.3613278912372533e-01 1.6396133419154284e+00 1.1597390251522925e+00 +469 -1.3991247236105240e+00 1.5082061302917529e-02 4.2674440918816359e-01 +531 5.1850879282449702e-01 -4.8575165908679824e-01 3.2685610004388830e-03 +182 1.9535806291760716e-01 2.1831255406036829e-01 8.8178212351766516e-01 +13 -1.3199446594241579e-01 -4.2237941458737216e-02 -1.2047466570929923e+00 +499 -1.9164606754984681e+00 1.1695242963957034e-01 -1.1749718635071765e-02 +549 -1.7841629166372822e-01 -1.1254682537072422e+00 7.7978434357604642e-01 +143 3.6131203718358934e-01 1.2911841748678148e+00 2.7416006209995691e-01 +332 2.4447298231470146e-01 3.3612772961332954e-01 1.4614847119466716e+00 +593 -6.6460733502337097e-02 3.9882422819915098e-01 -1.1372142874608375e+00 +415 -2.5978506554273867e-01 7.9372682191014643e-01 3.5257177127874996e-02 +581 -5.6729498215690854e-01 8.5807173876338105e-01 -7.7932123221354244e-01 +427 -4.4466964410599816e-02 -1.6777975376188031e-01 -3.3417136327398282e-02 +762 5.5388138712816082e-01 1.0766409734579585e+00 3.2418718860612789e-02 +513 -7.1409048074282999e-01 2.8069415082611177e-01 8.0449147645432306e-01 +627 -1.2845423226729149e+00 -4.6250296025134224e-01 -2.4715897767276485e-01 +314 4.5835600272341975e-01 1.9602490658849081e+00 -3.5090208816966846e-02 +576 5.0034083830128817e-01 8.3844640166974654e-02 -7.5563298393886381e-03 +45 1.3470142996633863e+00 9.7574512275501435e-01 -1.1537195966802027e+00 +461 2.3086863453728398e-01 2.0667371459329845e-01 6.6603186165981243e-01 +430 -1.1828313388782483e+00 7.2994735335268457e-01 1.6252167796281570e-02 +145 1.2036262178002963e+00 -1.2512715219433639e+00 -4.5084305213332987e-01 +260 1.0661205737399373e+00 1.2975639025735142e-01 5.5364746933503600e-02 +514 3.9905089839863545e-01 -3.0887534614362722e-01 7.7711212128085605e-01 +387 1.8683882304930197e-01 7.2416261982857055e-01 3.6690920123373039e-01 +535 8.6215654779978013e-01 -1.0495367208364774e+00 7.2612608491842690e-01 +437 1.7393722699546799e+00 3.2600193332510019e-02 1.7340933946670771e+00 +441 1.1401013827701021e+00 6.9486062723098452e-01 -5.6087301737579365e-01 +329 3.2355571401222066e-01 -2.2378065480033240e+00 -2.3330276313630209e+00 +90 -2.8120961652275256e-01 -8.4380896255266957e-01 -3.6458452104488664e-01 +35 -4.8735673387939149e-01 3.6567500610899889e-01 -1.0500640689813501e-01 +747 -4.9883386619028758e-01 4.1820782270156609e-01 6.7920571905530047e-01 +553 -6.2994431054806310e-01 -2.7451876865597752e-01 -1.3141301802618792e+00 +530 -8.5423633084753769e-01 6.1468089112683366e-01 5.2461332180113285e-01 +685 -9.6945794626648685e-01 -6.0065027851485453e-01 -5.5203165590682235e-01 +428 2.0220058073865022e-01 1.4594678851891787e-01 5.4272668864417439e-01 +149 -8.8090794724316890e-01 7.5502734309066899e-01 6.8209680807191508e-01 +453 2.8136652919298505e-01 1.2914095253198472e+00 1.5433752868418318e+00 +620 1.1840725918375024e+00 -7.7431198717237348e-01 -4.1068142679137520e-01 +695 -5.8516211164260135e-01 4.2502989950473641e-01 1.1192984497030434e-01 +197 -6.3803525485772083e-01 2.5552272036827492e+00 -8.3099176083238413e-01 +721 8.4493934601415766e-01 -1.2685995606722742e+00 3.6760215900157445e-01 +464 1.5546504085692217e+00 -1.9065553198796168e+00 2.1433829166998963e+00 +278 -2.9289281071496515e-01 2.3953172902708289e-01 -1.1556699321672184e+00 +486 9.9018236161873885e-01 -1.4608669541302763e-01 1.5711625099246205e+00 +544 -1.6141491842414504e-01 3.6231791182178313e-01 -2.1762321611644675e-01 +63 1.9211984159754694e-01 2.0106939364316747e+00 -5.5535870281444388e-01 +457 -9.9778853014974556e-01 2.6644414765144595e+00 -1.0706951392450550e+00 +764 -2.4801393456062532e-01 -3.6170220214307330e-01 -4.7932185144393535e-01 +365 1.1975226953738720e+00 4.9007913884828946e-01 2.1439787768754437e+00 +726 -1.9072728211123022e+00 1.2013385786024020e+00 8.0214869095396935e-01 +715 1.0660397663837804e+00 -7.0188531951805563e-02 7.8845049330795636e-01 +767 -1.4381067495828188e+00 -2.7304119201933550e+00 7.9133980757220812e-01 +569 1.6114169223682528e-01 -4.2247952670120159e-01 4.7010062546404013e-01 +323 -4.5850890674944703e-02 1.5663611907103835e-03 -6.1722066633138124e-02 +664 -1.0335339967078596e+00 1.6062964168096123e+00 -4.0812090436561765e-03 +748 -9.8004848687678048e-01 9.7984834757508465e-01 6.5727914629698670e-03 +777 -1.1209862985723142e+00 -9.8608589556503645e-01 4.6288373171566383e-01 +529 7.8411826689242259e-01 -6.2133068016757531e-01 2.1973913130625515e+00 +734 -4.1930865475980633e-01 -1.2054461120807893e+00 5.6611396079393750e-01 +423 -9.0015992888548446e-01 2.2115118473702630e-01 -6.8685474529552948e-01 +784 -3.1621165938815404e-01 6.4185571262673338e-02 -7.8458868157845529e-01 +88 -6.5353941754855938e-01 9.7348999822126481e-01 -6.7779247819985844e-01 +92 5.6636423095416544e-01 -1.2209663604361582e+00 1.0395976596838759e+00 +17 9.7708757103312019e-02 5.7768360155443801e-02 -1.8891794284860233e+00 +476 1.0071945593328315e+00 -3.3698743722601371e-01 6.0656857119299534e-01 +524 6.7308564972698537e-01 3.5374368618866503e-01 -1.4403576735878618e-02 +475 -8.4732118623410080e-01 -1.2491621694811346e+00 1.2730705598871936e+00 +325 -3.5054021689026110e-01 -6.5748947848590278e-01 -4.6303305085639046e-01 +259 1.5922385672947631e-01 1.5109687676553829e+00 -1.2932582896444125e+00 +456 1.2763653486952735e+00 -8.4111243235280864e-01 5.3413228729533835e-01 +556 1.4380133297809754e+00 1.5448560131100360e+00 7.4749330165536398e-01 +85 6.0045493629142699e-01 3.7687165133153594e-02 -1.7049212607040115e-01 +588 8.6952611070816710e-01 6.8475975227322614e-02 8.6736779588148627e-01 +527 1.3540620423887545e-01 -1.3354730194817532e+00 1.0798464180003648e+00 +585 2.5892846087054588e-01 -1.1106072370766200e+00 -6.4961358386123769e-02 +162 1.3880899604853956e+00 1.5095046987735230e+00 -2.0426760689020509e+00 +614 9.6420664200252870e-01 2.1558845523143880e-01 -4.5810294510077798e-01 +583 3.9441378738345678e-01 -1.5651874974780208e-01 -3.5857566488130999e-01 +473 -2.7007654978810619e-01 1.0548713849648159e+00 -6.8874649444281433e-01 +272 5.5314721916614640e-01 3.5527556308272840e-01 4.2008139304531827e-01 +59 -8.4062833243637280e-01 1.4545459978013813e+00 1.2377486794936352e+00 +203 7.1961238315252141e-01 3.6346975864928133e-01 -6.1073011686817258e-01 +146 -5.3411187085812772e-01 1.0830103562023823e-01 4.9332998157866259e-01 +571 -2.7119545663237798e-01 -4.5031218779868676e-01 1.0360211826465358e+00 +719 -1.0004796444069775e+00 -1.2591114045192533e+00 1.0536575737797367e+00 +653 1.0261426499825526e+00 -2.7977251205695435e+00 -3.5588228133283017e-01 +633 -1.2853709357516929e+00 3.9372257456016324e-01 -6.6203824391853749e-01 +495 2.8207431614980172e-01 -1.0408249085398091e+00 -6.2654996264814700e-01 +672 -2.2494584778094714e-01 5.2371618509033857e-01 -1.4944084995612006e+00 +563 -1.9479874112853063e-01 3.3741994908109918e-01 -1.8665068079762628e+00 +738 -4.9390038944078701e-01 2.1269714308881824e-01 -3.0618995845969682e-01 +506 -2.1279565569582957e+00 7.0418521098602427e-01 7.4413392688647731e-02 +315 -8.9169856034288486e-01 1.5653011050718855e+00 -9.2503338921206990e-01 +788 1.0199012935702305e+00 -2.5698316398476390e-01 -1.5535598269361028e-01 +106 4.4711566898919219e-01 1.0157218466951206e+00 -1.1575255957655894e-01 +609 1.8997692285168366e+00 1.3750389687423394e+00 -1.4694289823818252e+00 +483 -3.0251369507515911e-03 6.2758464359901278e-01 8.0430754196881160e-01 +165 5.7154974624410726e-01 1.2279381447049411e+00 1.5740895130865471e+00 +741 4.8110175276363776e-01 5.6850025651184632e-01 -5.0841712720416166e-01 +507 -1.0460978964707193e+00 -2.1132699942339495e-01 -1.8803551491333842e-01 +783 2.2383574428981542e-01 1.0319470793664820e+00 9.1572928706299617e-01 +480 -1.8941035200118683e+00 1.0216981989851719e+00 4.4586660725545041e-01 +72 -7.3848049964160956e-01 -1.9255466275035322e+00 1.2825312430198150e+00 +649 6.4885421152789857e-01 1.0795431665785247e+00 -5.1471139627070206e-01 +707 -3.1330080325569515e-01 1.5768296860678495e+00 -5.5079288558477879e-01 +47 -9.2083427940700224e-01 2.1335466575115021e+00 5.0665073777853553e-01 +694 -5.9925998947831871e-01 -3.8097203026584636e-01 -1.2706459379855790e+00 +76 2.0167780782699860e+00 -5.2020556347389259e-02 3.8476056544868564e-01 +537 4.7400641460887355e-01 -5.8038877043563386e-01 1.1448955844948341e+00 +642 -1.5624266823851214e+00 7.3272099877121732e-01 -3.2992647349883780e-01 +371 4.7376041760862170e-01 2.5392927408081994e-01 -4.6840256295705734e-01 +789 -2.8896593855703934e-01 1.0179343138366665e+00 1.9798288892036717e+00 +220 -1.1824565683165862e+00 -8.6629702369990358e-01 9.4403739167122136e-01 +127 -2.7632325341814307e-01 -6.7816904674099665e-01 1.3800959741073118e-01 +749 1.1158809393508613e+00 -4.8490207858755896e-01 1.4296506024074740e+00 +175 2.0309280540793220e-01 5.9785679999604768e-01 8.9139822191258555e-01 +534 -5.9606323178035270e-01 -9.2552973968998109e-01 1.1628766815404251e-01 +671 1.7248163973926206e-01 -1.4484668661854402e-01 -5.1806680257241200e-01 +658 -3.5377223184077017e-01 -5.0708252579691415e-01 5.7412272191442892e-01 +477 8.2253339620042526e-02 1.5064030679942444e-01 1.8067065169907379e+00 +118 8.9022805537628091e-01 -9.9417937911712329e-01 3.8993558022895103e-01 +787 -6.6042309993305082e-01 7.3822362915928541e-01 4.3201913686838461e-01 +621 -1.1180627994697352e+00 9.8477806705385584e-01 -1.8914767111877367e-01 +257 2.0968801208393308e-02 -5.1971002802601840e-01 6.6513718315012627e-01 +652 -1.2016434940094904e+00 -5.1504835019735784e-01 1.3975945405877739e-02 +170 2.4430267315622773e-02 -1.6098104237533568e+00 -1.8902903017076274e+00 +302 9.0655104305206999e-02 -5.2144984901477376e-01 -5.9423043617629023e-01 +363 1.4605093478156632e+00 1.2979379472989077e+00 1.1688293091559700e-01 +183 5.0521772889635319e-01 -7.7054751657598008e-02 -1.3979538898739510e-01 +758 4.9221334697476515e-01 -2.0226814795086923e+00 -4.0057661244796795e-02 +463 6.0264793955980034e-01 -1.1556233186055858e+00 -1.0897803762815012e-01 +717 7.9812853889464830e-01 1.1759853014260904e+00 1.2861926353313957e-01 +754 -9.9667920989749881e-01 -3.1461681942729647e-01 -2.8689919226589278e-01 +720 5.5160159783714946e-01 -6.2960779392840591e-03 -7.9504943535912986e-01 +594 7.5934702014393807e-01 2.7789294456840599e-02 3.4023994662919943e-01 +673 -6.4762393034415958e-02 9.5098843035940328e-01 1.4367174038415882e+00 +586 -7.4636222758040704e-01 -4.5062549245030054e-01 -2.1881327281712190e-01 +509 -4.7261618116483017e-01 -4.5921503224880722e-01 1.2567499675429696e+00 +403 -1.4646119788633716e+00 -1.8876794436884453e-01 -5.8759530243296021e-01 +619 2.6523912626590124e-01 -5.1547430823247131e-01 1.2526257091479718e+00 +548 -1.2571786712955793e+00 -1.9085342957588863e-01 -9.3353772551531788e-01 +759 2.0004108071494167e+00 -2.7214268228199662e-01 5.9643233323537506e-02 +579 8.0854384892086212e-02 -8.5540196810983593e-01 1.7766114598770726e+00 +167 3.6082367845777397e-01 2.7352097583434393e-01 -1.0242223746731212e+00 +426 -7.3557171191397885e-01 1.3081558705200964e+00 -6.4118569643434853e-01 +164 5.2945809513835362e-01 -2.2509867710862896e+00 -2.0133917847689687e-02 +638 1.3970931096210337e+00 3.3108587025748365e-01 1.2036606046598307e-01 +703 4.7936823798081157e-01 9.3996199522324697e-01 -8.9707999127947313e-01 +688 1.8244160453028204e+00 -9.6364568260582739e-01 2.2338208795335232e-01 +53 5.0457688186177108e-01 -4.0426168701915294e-01 -4.5874789658827514e-01 +510 2.7756942483244684e-01 1.4633263138364132e+00 -7.4694966723731060e-01 +523 -1.0151793324142813e+00 3.3280987384111194e-01 -1.1957168708853925e+00 +782 8.9609985778710533e-01 1.8844267681868465e-01 -1.5426525185135709e+00 +68 -1.1950234863577227e+00 8.7695604702288910e-01 8.3616804868302197e-01 +520 3.6042138689787101e-01 -2.1457225464074339e-01 -2.9386069187232633e-01 +382 3.3501789695091605e-01 1.8819548340473793e+00 8.1343119999858560e-01 +56 5.6667449507991907e-01 1.1883298693513791e+00 -4.8594225219730544e-02 +612 1.3833170635029854e+00 -1.0902490553940007e+00 5.4478480775778361e-02 +766 -2.0664184070099822e-01 1.8098525674952685e-02 -6.4721149203065209e-01 +425 1.0891870632407212e-01 -2.4705405788229759e-01 -1.9313099328057741e+00 +690 3.6634459533228225e-01 -2.3150113940863773e-01 5.4761541074840780e-01 +568 -1.3838869884561946e+00 -5.0751425998238975e-01 2.0344994066786345e-01 +158 -3.7059327383508778e-01 -4.6564873325163592e-01 1.0608791940035056e+00 +705 -1.6765807835786820e-01 1.1073925519455350e+00 8.8372977322060464e-01 +393 1.3336890830154857e-01 -5.9512382618730708e-01 -3.0223734051837936e-01 +727 -9.7072743317083099e-01 6.7266816725815477e-03 9.8607905313228139e-01 +362 2.8442242568618249e-02 -3.5229841170954701e-01 -7.0865487546601080e-01 +751 -6.3014039278218803e-01 -1.3694922499465878e+00 2.3346043257221546e-01 +623 6.3000721309413266e-01 -3.2855165195535069e-01 -2.4811057478186958e+00 +328 1.6275388949765370e+00 8.5334597526086597e-01 3.0260380154495942e-01 +60 -6.6669701080246457e-01 -3.9647370219823042e-01 -3.2915673084463049e-01 +708 3.8697703302747488e-01 2.4797284360589882e+00 -9.1145765715200146e-03 +389 8.5938103844077651e-01 1.4383565632076543e+00 8.3736212121080822e-01 +778 -5.6211279410670256e-01 -8.0885387707730350e-01 1.0400328918192672e+00 +666 1.6010601583611443e+00 2.7422412003698909e-01 -1.8925408300495268e+00 +691 -8.2437520478333789e-02 -6.9099567176488019e-01 4.8338039644047875e-01 +239 -8.3448809224150522e-01 1.2998495536942378e+00 1.3497346632439990e+00 +324 -8.0572489571499495e-01 5.3309898396279765e-01 2.2805403621969492e-01 +395 8.7626455337055709e-01 -8.0290346379206248e-02 1.1510363166851103e+00 +279 2.1955229726803735e-01 -6.6167055108258255e-01 -3.1250370619198414e-02 +396 2.5289959990653473e-02 -4.3329307985837194e-02 1.8096217917684070e+00 +388 2.0408766720929392e-01 5.5000604440725194e-03 1.0465386342050780e+00 +518 9.7371589782089407e-01 3.2114214434926647e-01 -2.9440807535172231e-01 +91 -1.4654318458336979e-02 -6.6416437735028455e-01 -3.8630009710132990e-01 +458 1.0423164923646606e+00 7.0516964588797304e-01 3.6788524361462666e-01 +342 -5.3504992710485622e-01 -1.0964369627913892e+00 1.1155344062467105e+00 +156 4.6238364382952463e-01 6.3364757230054292e-01 6.0391198303045024e-01 +300 2.9786169997108316e+00 -6.8712190349137212e-02 9.1162261503868702e-01 +75 2.8362931008851244e-01 -6.4977283351401738e-02 -1.5264007723886770e-02 +602 4.7501474030773302e-02 7.3787072316649727e-01 -1.1435302848761935e+00 +733 -1.7619298472582468e-01 3.4309721001400717e-01 7.6384886527805163e-01 +646 4.1678886122021919e-01 7.8814179984001731e-01 8.2175886043656543e-01 +701 -1.8322306067409282e+00 -1.3738234110843339e+00 1.9015996152236634e+00 +641 -2.7056786128378807e-01 -1.2534962078161704e+00 1.2686068624305151e+00 +372 -1.7140928794831717e-01 -9.1198058540268256e-01 -7.9200444867964848e-01 +631 5.2471915325613483e-01 -6.6987692741373528e-01 9.4340132334810156e-01 +676 4.7473304288834948e-03 -1.1137403279584026e+00 -5.0098387226006624e-01 +710 -1.2825547366219137e+00 5.5559320919020672e-01 -6.1495263514686233e-02 +490 1.3526648192110267e+00 6.9338052736846220e-02 -4.7864125965924466e-02 +361 -8.3486736735535183e-01 -4.8145737649658660e-01 4.3373493437452948e-01 +444 -7.1025151215082116e-01 -1.0047908433915400e+00 1.0369352094890738e+00 +484 8.6114710799795380e-01 1.5451032958124655e-01 -1.1897526878543283e+00 +608 1.4469434946163349e+00 3.8007700930723393e-02 4.7140481003967027e-01 +595 -1.0623232875394515e+00 1.0377278573110087e+00 3.6813126266496404e-01 +416 1.6663696844056788e+00 9.5505686185454616e-02 1.2341034316995452e+00 +496 1.0358236323904357e+00 -3.6887547891964279e-01 1.4563011835401568e-01 +656 -7.7156504605152942e-01 1.6531484175530348e-01 -2.0882324914614647e-01 +769 -7.0109491460006090e-01 4.9944777341864677e-01 1.3435291658854163e+00 +714 -1.8675931282433758e-01 5.4822226904145677e-01 1.0054730217886938e+00 +515 6.6742140446954712e-01 -5.7115618725611950e-01 -1.5337307317078869e-01 +637 -3.6619175427114840e-02 -6.7404420710587498e-01 -5.6812227267018491e-02 +217 -5.5824234830717223e-01 4.8399570856389712e-01 2.2146366419246633e+00 +724 -3.3221396408939075e-01 -1.6034062375819277e-01 -6.1150658600342767e-01 +687 6.9833380954270952e-01 -5.7353694197888783e-01 -1.3114967827667774e+00 +763 6.5648258684671523e-01 -9.3756129559233714e-01 4.2457673722135553e-01 +38 -9.0307697742767534e-01 1.3427502453055102e+00 1.7210189654966217e+00 +150 2.3404595488715403e+00 1.9583710507897552e+00 -4.0699948368273464e-01 +290 -3.8892503085707110e-02 2.1642346786025654e-01 7.5091700998114863e-01 +616 -1.5063130700782541e+00 -3.0915154603003352e-02 -4.1733051362622348e-01 +30 1.6424877391541486e+00 8.1278651233080701e-02 1.0960340788309897e+00 +445 5.9464073110889182e-01 1.3741846979461911e+00 -3.5332120998220702e-02 +774 6.1066749731064607e-01 -2.2535150461929190e-01 -6.7888686694111589e-01 +357 -1.8081470115025458e-01 1.2485875505364352e-01 3.4374946508062543e-01 +267 3.0628466889333505e-01 1.5741464566726635e-01 -5.9343868362037144e-01 +448 2.3539151884936245e+00 -7.7858158575274339e-01 9.0702137280831696e-01 +696 2.5171509267469738e-01 -8.0393682494075885e-02 -4.0135573832380872e-01 +573 5.6323856877172986e-02 -7.3754122497680957e-02 -7.7546903099448861e-01 +482 -3.7771805278735809e-01 -1.4314590429011360e+00 1.6531555870584028e-01 +8 -6.7802826645600212e-01 -5.3659924653957393e-02 2.8981102946098120e-01 +226 -6.5067733446416276e-01 -1.5467980074496174e-01 -7.4954844718816596e-02 +659 -1.9362517641646507e-01 -2.2154214860656558e+00 1.6295431021212279e+00 +773 7.9105482701169003e-02 -3.4089887972133520e-01 -1.6724235533585194e+00 +224 1.3683576830226889e+00 -1.4209965455466631e+00 -1.1811559122801989e+00 +291 -1.4807640231490171e-01 -2.4107460487877019e-01 7.1686784920197838e-02 +418 1.3389371819938123e-01 -1.1924548711075411e+00 -1.5021335145420248e-01 +629 -1.5481875731535886e+00 -8.2951377971845888e-02 -2.6371116264835776e-01 +50 3.6182631757791200e-01 2.6303384332732460e-01 -5.9226268825100781e-01 +245 -1.2552911037294894e+00 -1.7477855192154070e+00 -7.8185737984873294e-01 +292 -1.6444293511189008e+00 8.5445064068709764e-01 -1.4188004495275159e+00 +230 -7.9895549431121912e-02 -1.3014685557798513e+00 3.5351488855673269e-01 +1009 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1010 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1011 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1012 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1013 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1014 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1015 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1016 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1017 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1018 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1019 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1020 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1021 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1022 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1023 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1024 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1025 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1026 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1027 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1028 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1029 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1030 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1031 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1032 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1033 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1034 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1035 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1036 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1037 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1038 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1039 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1040 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1041 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1042 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1043 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1044 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1045 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1046 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1047 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1048 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1049 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1050 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1051 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1052 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1053 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1054 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1055 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1056 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1057 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1058 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1059 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1060 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1061 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1062 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1063 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1064 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1065 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1066 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1067 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1068 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1069 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1070 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1071 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1072 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1073 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1074 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1075 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1076 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1077 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1078 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1079 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1080 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1081 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1082 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1083 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1084 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1085 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1086 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1087 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1088 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1089 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1090 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1091 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1092 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1093 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1094 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1095 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1096 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1097 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1098 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1099 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1100 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1101 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1102 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1103 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1104 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1105 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1106 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1107 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1108 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1109 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1110 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1111 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1112 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1113 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1114 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1115 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1116 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1120 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1117 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1118 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1119 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1123 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1124 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1121 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1122 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1128 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1127 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1125 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1126 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1132 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1131 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1129 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1130 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1136 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1135 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1133 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1134 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1140 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1139 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1137 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1138 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1144 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1143 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1141 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1142 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1148 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1147 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1145 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1146 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1152 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1151 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1149 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1150 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1153 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1154 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1155 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1156 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1157 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1158 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1159 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1160 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1161 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1162 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1163 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1164 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1165 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1166 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1167 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1168 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1169 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1170 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1171 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1172 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1174 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1173 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1175 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1176 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1177 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1178 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1179 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1180 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1182 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1181 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1184 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1183 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1186 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1185 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1188 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1187 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1190 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1189 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1191 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1192 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1193 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1194 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1195 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1196 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1198 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1197 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1200 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1199 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1201 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1202 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1204 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1203 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1206 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1205 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1208 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1207 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1209 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1210 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1212 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1211 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1214 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1213 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1215 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1216 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1217 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1218 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1220 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1219 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1221 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1222 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1223 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 +1224 0.0000000000000000e+00 0.0000000000000000e+00 -2.6803696685654556e-02 diff --git a/examples/USER/misc/mop/in.compute_stress_mop b/examples/USER/misc/mop/in.compute_stress_mop new file mode 100644 index 0000000000000000000000000000000000000000..442596dcf1737510a2dcebf63a82f23480ef54d9 --- /dev/null +++ b/examples/USER/misc/mop/in.compute_stress_mop @@ -0,0 +1,40 @@ +variable T equal 0.8 +variable p_solid equal 0.05 + +read_data data.mop + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 +pair_coeff 1 2 0.5 1.0 +pair_coeff 2 2 0.0 0.0 +neigh_modify delay 0 + +group liquid type 1 +group solid type 2 +region bottom block INF INF INF INF INF 7.0 +group bottom region bottom +group solid_bottom intersect solid bottom +group solid_up subtract solid solid_bottom + +variable faSolid equal ${p_solid}*lx*ly/count(solid_up) +fix piston_up solid_up aveforce NULL NULL -${faSolid} +fix freeze_up solid_up setforce 0.0 0.0 NULL +fix freeze_bottom solid_bottom setforce 0.0 0.0 0.0 +fix nvesol solid nve +compute Tliq liquid temp +fix nvtliq liquid nvt temp $T $T 0.5 +fix_modify nvtliq temp Tliq + +thermo 1000 +thermo_modify flush yes temp Tliq + +fix fxbal all balance 1000 1.05 shift z 10 1.05 + +compute mopz0 all stress/mop z center kin conf +fix mopz0t all ave/time 1 1 1 c_mopz0[*] file mopz0.time + +compute moppz liquid stress/mop/profile z 0.0 0.1 kin conf +fix moppzt all ave/time 1 1 1 c_moppz[*] ave running overwrite file moppz.time mode vector + +run 0 + diff --git a/examples/USER/misc/mop/log.5Sep18.compute_stress_mop.g++.1 b/examples/USER/misc/mop/log.5Sep18.compute_stress_mop.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..7b3f24cf3863ce026eb8949075e44523797db417 --- /dev/null +++ b/examples/USER/misc/mop/log.5Sep18.compute_stress_mop.g++.1 @@ -0,0 +1,111 @@ +LAMMPS (5 Sep 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +variable T equal 0.8 +variable p_solid equal 0.05 + +read_data data.mop + orthogonal box = (0 0 -2) to (9.52441 9.52441 16) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 1224 atoms + reading velocities ... + 1224 velocities + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 +pair_coeff 1 2 0.5 1.0 +pair_coeff 2 2 0.0 0.0 +neigh_modify delay 0 + +group liquid type 1 +792 atoms in group liquid +group solid type 2 +432 atoms in group solid +region bottom block INF INF INF INF INF 7.0 +group bottom region bottom +630 atoms in group bottom +group solid_bottom intersect solid bottom +216 atoms in group solid_bottom +group solid_up subtract solid solid_bottom +216 atoms in group solid_up + +variable faSolid equal ${p_solid}*lx*ly/count(solid_up) +variable faSolid equal 0.05*lx*ly/count(solid_up) +fix piston_up solid_up aveforce NULL NULL -${faSolid} +fix piston_up solid_up aveforce NULL NULL -0.0209986841649146 +fix freeze_up solid_up setforce 0.0 0.0 NULL +fix freeze_bottom solid_bottom setforce 0.0 0.0 0.0 +fix nvesol solid nve +compute Tliq liquid temp +fix nvtliq liquid nvt temp $T $T 0.5 +fix nvtliq liquid nvt temp 0.8 $T 0.5 +fix nvtliq liquid nvt temp 0.8 0.8 0.5 +fix_modify nvtliq temp Tliq +WARNING: Temperature for fix modify is not for group all (src/fix_nh.cpp:1404) + +thermo 1000 +thermo_modify flush yes temp Tliq +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) + +fix fxbal all balance 1000 1.05 shift z 10 1.05 + +compute mopz0 all stress/mop z center kin conf +fix mopz0t all ave/time 1 1 1 c_mopz0[*] file mopz0.time + +compute moppz liquid stress/mop/profile z 0.0 0.1 kin conf +fix moppzt all ave/time 1 1 1 c_moppz[*] ave running overwrite file moppz.time mode vector + +run 0 +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 = 7 7 13 + 3 neighbor lists, perpetual/occasional/extra = 1 2 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + (2) compute stress/mop, occasional, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none + (3) compute stress/mop/profile, occasional, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 3.596 | 3.596 | 3.596 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 0.82011245 -3.0642111 0 -2.2692246 0.16906107 1632.8577 +Loop time of 1.19209e-06 on 1 procs for 0 steps with 1224 atoms + +167.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 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.192e-06 | | |100.00 + +Nlocal: 1224 ave 1224 max 1224 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 2975 ave 2975 max 2975 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 40241 ave 40241 max 40241 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 40241 +Ave neighs/atom = 32.8766 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/USER/misc/mop/log.5Sep18.compute_stress_mop.g++.4 b/examples/USER/misc/mop/log.5Sep18.compute_stress_mop.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..dd1dc0af0f551e19105bf88f427a5386c5e32505 --- /dev/null +++ b/examples/USER/misc/mop/log.5Sep18.compute_stress_mop.g++.4 @@ -0,0 +1,111 @@ +LAMMPS (5 Sep 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +variable T equal 0.8 +variable p_solid equal 0.05 + +read_data data.mop + orthogonal box = (0 0 -2) to (9.52441 9.52441 16) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 1224 atoms + reading velocities ... + 1224 velocities + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 +pair_coeff 1 2 0.5 1.0 +pair_coeff 2 2 0.0 0.0 +neigh_modify delay 0 + +group liquid type 1 +792 atoms in group liquid +group solid type 2 +432 atoms in group solid +region bottom block INF INF INF INF INF 7.0 +group bottom region bottom +630 atoms in group bottom +group solid_bottom intersect solid bottom +216 atoms in group solid_bottom +group solid_up subtract solid solid_bottom +216 atoms in group solid_up + +variable faSolid equal ${p_solid}*lx*ly/count(solid_up) +variable faSolid equal 0.05*lx*ly/count(solid_up) +fix piston_up solid_up aveforce NULL NULL -${faSolid} +fix piston_up solid_up aveforce NULL NULL -0.0209986841649146 +fix freeze_up solid_up setforce 0.0 0.0 NULL +fix freeze_bottom solid_bottom setforce 0.0 0.0 0.0 +fix nvesol solid nve +compute Tliq liquid temp +fix nvtliq liquid nvt temp $T $T 0.5 +fix nvtliq liquid nvt temp 0.8 $T 0.5 +fix nvtliq liquid nvt temp 0.8 0.8 0.5 +fix_modify nvtliq temp Tliq +WARNING: Temperature for fix modify is not for group all (src/fix_nh.cpp:1404) + +thermo 1000 +thermo_modify flush yes temp Tliq +WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:488) + +fix fxbal all balance 1000 1.05 shift z 10 1.05 + +compute mopz0 all stress/mop z center kin conf +fix mopz0t all ave/time 1 1 1 c_mopz0[*] file mopz0.time + +compute moppz liquid stress/mop/profile z 0.0 0.1 kin conf +fix moppzt all ave/time 1 1 1 c_moppz[*] ave running overwrite file moppz.time mode vector + +run 0 +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 = 7 7 13 + 3 neighbor lists, perpetual/occasional/extra = 1 2 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard + (2) compute stress/mop, occasional, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none + (3) compute stress/mop/profile, occasional, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 3.509 | 3.51 | 3.511 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 0.82011245 -3.0642111 0 -2.2692246 0.16906107 1632.8577 +Loop time of 4.06504e-05 on 4 procs for 0 steps with 1224 atoms + +65.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 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 4.065e-05 | | |100.00 + +Nlocal: 306 ave 320 max 295 min +Histogram: 1 1 0 0 0 0 1 0 0 1 +Nghost: 1450.25 ave 1485 max 1422 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Neighs: 10060.2 ave 10866 max 9507 min +Histogram: 2 0 0 0 0 1 0 0 0 1 + +Total # of neighbors = 40241 +Ave neighs/atom = 32.8766 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/examples/USER/misc/mop/moppz.time.reference b/examples/USER/misc/mop/moppz.time.reference new file mode 100644 index 0000000000000000000000000000000000000000..1550df422d80b540c58881a36ab4e93f9d560335 --- /dev/null +++ b/examples/USER/misc/mop/moppz.time.reference @@ -0,0 +1,185 @@ +# Time-averaged data for fix moppzt +# TimeStep Number-of-rows +# Row c_moppz[1] c_moppz[2] c_moppz[3] c_moppz[4] c_moppz[5] c_moppz[6] c_moppz[7] +0 181 +1 -2 0 0 0 0 0 0 +2 -1.9 0 0 0 0 0 0 +3 -1.8 0 0 0 0 0 0 +4 -1.7 0 0 0 0 0 0 +5 -1.6 0 0 0 0 0 0 +6 -1.5 0 0 0 -9.81273e-05 0.000228605 -0.00421138 +7 -1.4 0 0 0 -9.81273e-05 0.000228605 -0.00421138 +8 -1.3 0 0 0 -9.81273e-05 0.000228605 -0.00421138 +9 -1.2 0 0 0 -9.81273e-05 0.000228605 -0.00421138 +10 -1.1 0 0 0 -9.81273e-05 0.000228605 -0.00421138 +11 -1 0 0 0 -9.81273e-05 0.000228605 -0.00421138 +12 -0.9 0 0 0 -9.81273e-05 0.000228605 -0.00421138 +13 -0.8 0 0 0 -9.81273e-05 0.000228605 -0.00421138 +14 -0.7 0 0 0 -0.000370675 -0.00240125 -0.26848 +15 -0.6 0 0 0 -0.000370675 -0.00240125 -0.26848 +16 -0.5 0 0 0 -0.000370675 -0.00240125 -0.26848 +17 -0.4 0 0 0 -0.000370675 -0.00240125 -0.26848 +18 -0.3 0 0 0 -0.000370675 -0.00240125 -0.26848 +19 -0.2 0 0 0 -0.000370675 -0.00240125 -0.26848 +20 -0.1 0 0 0 -0.000370675 -0.00240125 -0.26848 +21 0 0 0 0 -0.000370675 -0.00240125 -0.26848 +22 0.1 0 0 0 0.190761 -0.491728 0.287704 +23 0.2 0 0 0 0.190761 -0.491728 0.287704 +24 0.3 0 0 0 0.190761 -0.491728 0.287704 +25 0.4 0 0 0 0.190761 -0.491728 0.287704 +26 0.5 0 0 0 0.190761 -0.491728 0.287704 +27 0.6 0 0 0 0.190761 -0.491728 0.287704 +28 0.7 0 0 0 0.190761 -0.491728 0.287704 +29 0.8 0 0 0 -0.181602 -0.198457 -0.0964774 +30 0.9 0 0 0 -0.15138 0.183353 0.206848 +31 1 0 0 0 0.174362 1.27701 0.600545 +32 1.1 0 0 0 0.160987 0.563442 0.494994 +33 1.2 0 0 0 0.218876 0.59796 0.398527 +34 1.3 0 0 0 0.187614 0.558909 0.372353 +35 1.4 0 0 0 0.118586 0.410013 0.331945 +36 1.5 0 0 0 -0.0514208 0.40381 0.128097 +37 1.6 3.08628 0.241189 5.90817 -0.198262 0.324128 -0.0449302 +38 1.7 0 0 0 -0.104542 0.256677 -0.332854 +39 1.8 0.222123 2.43524 1.10089 -0.324638 -0.168682 -1.06238 +40 1.9 0 0 0 -0.175732 -0.186846 -0.163062 +41 2 0 0 0 -0.137995 0.0920401 -0.260106 +42 2.1 -0.179621 -2.59775 1.80077 -0.480624 -0.0439511 -0.0824913 +43 2.2 0 0 0 -0.499868 -0.0106185 -0.108924 +44 2.3 0 0 0 -0.703301 0.124555 -0.0880158 +45 2.4 0 0 0 -0.581211 -0.244281 -0.250071 +46 2.5 1.05274 -2.86043 3.36339 -0.575104 -0.148715 -0.249092 +47 2.6 0 0 0 0.66061 -0.157649 -0.357141 +48 2.7 0 0 0 0.299971 -0.302298 -0.572714 +49 2.8 0 0 0 0.33107 -0.201699 -0.470466 +50 2.9 0 0 0 0.822686 1.08427 -0.390511 +51 3 0 0 0 0.716428 0.750998 -0.698174 +52 3.1 0.805189 0.571878 4.31938 0.121891 0.922727 -0.932582 +53 3.2 0 0 0 0.0442642 1.02537 -1.03066 +54 3.3 2.54289 -1.93701 4.88355 0.0731321 1.09091 -0.83075 +55 3.4 0 0 0 0.426589 0.821174 -0.765855 +56 3.5 0 0 0 0.445135 0.299996 -1.48972 +57 3.6 0 0 0 0.362916 -1.28673 -0.853897 +58 3.7 0.952867 -1.07044 1.04141 0.12517 -1.00353 -0.785272 +59 3.8 0.617661 0.991499 1.80973 -0.182369 -1.04057 -1.00435 +60 3.9 0.60295 -2.41888 3.98011 0.0347345 -1.01302 -0.88314 +61 4 -2.97421 -2.01531 2.98586 0.43463 -0.465643 -0.801128 +62 4.1 -3.23318 -3.31281 0.956525 0.732752 0.140718 -1.10583 +63 4.2 0 0 0 0.969872 0.298566 -0.823464 +64 4.3 0 0 0 0.7707 0.557002 -0.836549 +65 4.4 0 0 0 0.395828 0.66755 -1.53454 +66 4.5 0 0 0 0.104451 0.46777 -1.32358 +67 4.6 0 0 0 0.402084 0.464983 -1.22051 +68 4.7 0 0 0 0.352808 0.0794986 -1.31292 +69 4.8 0 0 0 0.0215512 0.284343 -0.975326 +70 4.9 0 0 0 -0.133637 0.250925 -1.33918 +71 5 0 0 0 -0.066208 0.104514 -1.27412 +72 5.1 0 0 0 -0.184391 0.479805 -1.15139 +73 5.2 0 0 0 -0.200251 0.527142 -1.34307 +74 5.3 0 0 0 0.043532 -0.0788824 -0.998406 +75 5.4 0 0 0 -0.531846 0.126289 -1.05818 +76 5.5 0 0 0 -0.259593 0.0818463 -1.58939 +77 5.6 0 0 0 -0.373828 -0.343977 -1.50908 +78 5.7 -0.294161 -1.07567 3.46536 -0.0644873 -0.424333 -1.28548 +79 5.8 0 0 0 -0.293233 -0.201133 -1.19085 +80 5.9 0.961568 -1.44949 2.42101 -0.632816 -0.0669315 -0.85119 +81 6 0 0 0 -0.0559892 -0.0194478 -1.04541 +82 6.1 0 0 0 -0.339753 0.286693 -1.24366 +83 6.2 0 0 0 -0.376208 0.444053 -1.7662 +84 6.3 0 0 0 -0.718923 0.555398 -1.93862 +85 6.4 0 0 0 -1.10631 0.263525 -1.79723 +86 6.5 0 0 0 -0.217948 -0.0489491 -2.07833 +87 6.6 0 0 0 -0.376248 -0.0588682 -2.45322 +88 6.7 -2.12742 4.22609 2.36568 -0.236703 -0.279582 -1.56434 +89 6.8 0.869072 -0.141389 3.92123 0.0540986 -0.00271606 -0.930143 +90 6.9 0 0 0 1.08829 -1.11737 -0.808187 +91 7 1.62633 1.08234 0.844097 1.18575 -0.408792 -0.752394 +92 7.1 0 0 0 1.03324 -0.470631 -0.486767 +93 7.2 0 0 0 0.950164 -0.112451 -0.479409 +94 7.3 -2.66121 -0.326607 7.83093 0.359 -0.482493 0.154384 +95 7.4 0 0 0 0.359089 -1.12337 0.409711 +96 7.5 -1.88971 1.34806 3.56893 0.394677 -1.0109 0.548348 +97 7.6 -1.34494 -0.896214 2.06959 0.231398 -0.728529 0.313513 +98 7.7 0 0 0 0.415681 -0.45268 0.507181 +99 7.8 0 0 0 0.259423 -0.11638 0.464208 +100 7.9 -1.97572 -1.20836 3.95731 0.252257 -0.0845701 -0.249345 +101 8 0 0 0 0.0688154 0.290386 -0.462467 +102 8.1 0.25925 -0.458269 3.33086 0.360399 -0.0409494 -0.656911 +103 8.2 0 0 0 -0.0587033 0.347698 -0.340604 +104 8.3 0 0 0 -0.377192 0.153096 -0.914654 +105 8.4 0 0 0 -0.431553 0.274996 -0.946252 +106 8.5 0 0 0 -0.898366 0.146653 -1.36383 +107 8.6 0 0 0 -0.889593 0.385951 0.125116 +108 8.7 0 0 0 -0.0139171 -0.162302 -0.0287854 +109 8.8 0 0 0 -0.266284 -0.148945 0.393533 +110 8.9 0 0 0 -0.00920376 -0.0770818 0.334642 +111 9 0 0 0 -0.0949156 0.0113352 -0.0761263 +112 9.1 0 0 0 0.0688045 0.104558 -0.101891 +113 9.2 3.79773 0.0255401 3.75032 0.419832 0.295402 0.652533 +114 9.3 0 0 0 0.594267 0.70396 0.836434 +115 9.4 0 0 0 0.174722 1.00483 1.42787 +116 9.5 0 0 0 0.0626835 0.518952 0.269158 +117 9.6 0 0 0 -0.302859 -0.265212 -0.0145578 +118 9.7 0 0 0 -0.114026 -0.201336 -0.539522 +119 9.8 0 0 0 0.104008 -0.30236 -0.0789062 +120 9.9 0 0 0 -0.0482778 -0.553118 0.45214 +121 10 0 0 0 -0.0554938 -0.402692 0.141112 +122 10.1 0 0 0 0.174338 0.556958 -0.0922154 +123 10.2 0 0 0 -1.06045 0.541565 -0.0409312 +124 10.3 0 0 0 -1.20782 0.464574 -0.413871 +125 10.4 0 0 0 -0.891701 0.327653 -0.286438 +126 10.5 0 0 0 0.231227 -0.064277 -0.89684 +127 10.6 -1.27989 -4.87365 9.40433 0.211278 0.230826 -1.23536 +128 10.7 -2.1001 -0.417817 1.17745 0.425856 0.078728 -1.44229 +129 10.8 0 0 0 0.30965 0.450884 -1.74985 +130 10.9 0 0 0 0.36735 0.990032 -1.19971 +131 11 0.253834 -1.84303 3.91828 1.01826 0.0660896 -0.481086 +132 11.1 0 0 0 0.744006 0.0906555 -0.897417 +133 11.2 0 0 0 0.339073 0.361038 -0.545084 +134 11.3 -1.9974 -0.431998 3.46296 0.611295 0.17282 0.0341483 +135 11.4 0 0 0 -0.491432 -0.958871 1.28001 +136 11.5 0 0 0 0.0431048 -1.50924 1.24037 +137 11.6 0 0 0 -0.684419 -0.0163951 1.06179 +138 11.7 0 0 0 -0.425278 -0.127741 0.757298 +139 11.8 -2.09164 0.00894897 2.22812 -0.0955178 -0.310572 0.661289 +140 11.9 0 0 0 0.156959 -0.233409 0.802568 +141 12 0 0 0 -0.05541 -0.346448 0.541571 +142 12.1 0 0 0 0.706767 0.182767 0.25767 +143 12.2 0 0 0 0.4791 0.464612 -0.212887 +144 12.3 0 0 0 0.81454 0.440323 -0.461359 +145 12.4 0 0 0 -0.110025 0.200698 -0.996706 +146 12.5 0 0 0 -0.149791 0.165599 -1.02233 +147 12.6 0 0 0 -0.170933 0.0644682 -0.866174 +148 12.7 0 0 0 -0.122869 -0.0196287 -0.801348 +149 12.8 0 0 0 -0.0693832 -0.0673091 -0.382802 +150 12.9 0 0 0 -0.0693832 -0.0673091 -0.382802 +151 13 0 0 0 -0.0693832 -0.0673091 -0.382802 +152 13.1 0 0 0 -0.0693832 -0.0673091 -0.382802 +153 13.2 0 0 0 -0.0693832 -0.0673091 -0.382802 +154 13.3 0 0 0 -0.0693832 -0.0673091 -0.382802 +155 13.4 0 0 0 -0.0693832 -0.0673091 -0.382802 +156 13.5 0 0 0 -0.000502433 0.000137492 -0.227425 +157 13.6 0 0 0 -0.000502433 0.000137492 -0.227425 +158 13.7 0 0 0 -0.000502433 0.000137492 -0.227425 +159 13.8 0 0 0 -0.000502433 0.000137492 -0.227425 +160 13.9 0 0 0 -0.000502433 0.000137492 -0.227425 +161 14 0 0 0 -0.000502433 0.000137492 -0.227425 +162 14.1 0 0 0 -0.000502433 0.000137492 -0.227425 +163 14.2 0 0 0 -0.000502433 0.000137492 -0.227425 +164 14.3 0 0 0 5.79042e-05 4.68687e-05 -0.00286094 +165 14.4 0 0 0 5.79042e-05 4.68687e-05 -0.00286094 +166 14.5 0 0 0 5.79042e-05 4.68687e-05 -0.00286094 +167 14.6 0 0 0 5.79042e-05 4.68687e-05 -0.00286094 +168 14.7 0 0 0 5.79042e-05 4.68687e-05 -0.00286094 +169 14.8 0 0 0 5.79042e-05 4.68687e-05 -0.00286094 +170 14.9 0 0 0 5.79042e-05 4.68687e-05 -0.00286094 +171 15 0 0 0 5.79042e-05 4.68687e-05 -0.00286094 +172 15.1 0 0 0 0 0 0 +173 15.2 0 0 0 0 0 0 +174 15.3 0 0 0 0 0 0 +175 15.4 0 0 0 0 0 0 +176 15.5 0 0 0 0 0 0 +177 15.6 0 0 0 0 0 0 +178 15.7 0 0 0 0 0 0 +179 15.8 0 0 0 0 0 0 +180 15.9 0 0 0 0 0 0 +181 16 0 0 0 0 0 0 diff --git a/examples/USER/misc/mop/mopz0.time.reference b/examples/USER/misc/mop/mopz0.time.reference new file mode 100644 index 0000000000000000000000000000000000000000..d6dbb2ff09a97938c1f4a85d8b550782e599a97a --- /dev/null +++ b/examples/USER/misc/mop/mopz0.time.reference @@ -0,0 +1,3 @@ +# Time-averaged data for fix mopz0t +# TimeStep c_mopz0[1] c_mopz0[2] c_mopz0[3] c_mopz0[4] c_mopz0[5] c_mopz0[6] +0 1.62633 1.08234 0.844097 1.18575 -0.408792 -0.752394 diff --git a/examples/USER/scafacos/data.NaCl b/examples/USER/scafacos/data.NaCl new file mode 100644 index 0000000000000000000000000000000000000000..2fd60779839ccfd13c2814d671fde8303005c902 --- /dev/null +++ b/examples/USER/scafacos/data.NaCl @@ -0,0 +1,25 @@ +LAMMPS Description + +8 atoms + +2 atom types + +0 1 xlo xhi +0 1 ylo yhi +0 1 zlo zhi + +Masses + +1 22.98976928 +2 35.45 + +Atoms + +1 2 1 0.25 0.25 0.25 +2 1 -1 0.75 0.25 0.25 +3 1 -1 0.25 0.75 0.25 +4 2 1 0.75 0.75 0.25 +5 1 -1 0.25 0.25 0.75 +6 2 1 0.75 0.25 0.75 +7 2 1 0.25 0.75 0.75 +8 1 -1 0.75 0.75 0.75 diff --git a/examples/USER/scafacos/data.cloud_wall b/examples/USER/scafacos/data.cloud_wall new file mode 100644 index 0000000000000000000000000000000000000000..1592ec666a85ef7895b71f62fa9948535d426cd7 --- /dev/null +++ b/examples/USER/scafacos/data.cloud_wall @@ -0,0 +1,316 @@ +LAMMPS Description + +300 atoms + +1 atom types + +0 10 xlo xhi +0 10 ylo yhi +0 10 zlo zhi + +Masses + +1 1.0 + +Atoms + +1 1 1 0 0 4.5 +2 1 -1 0 0 5.5 +3 1 1 0 1 4.5 +4 1 -1 0 1 5.5 +5 1 1 0 2 4.5 +6 1 -1 0 2 5.5 +7 1 1 0 3 4.5 +8 1 -1 0 3 5.5 +9 1 1 0 4 4.5 +10 1 -1 0 4 5.5 +11 1 1 0 5 4.5 +12 1 -1 0 5 5.5 +13 1 1 0 6 4.5 +14 1 -1 0 6 5.5 +15 1 1 0 7 4.5 +16 1 -1 0 7 5.5 +17 1 1 0 8 4.5 +18 1 -1 0 8 5.5 +19 1 1 0 9 4.5 +20 1 -1 0 9 5.5 +21 1 1 1 0 4.5 +22 1 -1 1 0 5.5 +23 1 1 1 1 4.5 +24 1 -1 1 1 5.5 +25 1 1 1 2 4.5 +26 1 -1 1 2 5.5 +27 1 1 1 3 4.5 +28 1 -1 1 3 5.5 +29 1 1 1 4 4.5 +30 1 -1 1 4 5.5 +31 1 1 1 5 4.5 +32 1 -1 1 5 5.5 +33 1 1 1 6 4.5 +34 1 -1 1 6 5.5 +35 1 1 1 7 4.5 +36 1 -1 1 7 5.5 +37 1 1 1 8 4.5 +38 1 -1 1 8 5.5 +39 1 1 1 9 4.5 +40 1 -1 1 9 5.5 +41 1 1 2 0 4.5 +42 1 -1 2 0 5.5 +43 1 1 2 1 4.5 +44 1 -1 2 1 5.5 +45 1 1 2 2 4.5 +46 1 -1 2 2 5.5 +47 1 1 2 3 4.5 +48 1 -1 2 3 5.5 +49 1 1 2 4 4.5 +50 1 -1 2 4 5.5 +51 1 1 2 5 4.5 +52 1 -1 2 5 5.5 +53 1 1 2 6 4.5 +54 1 -1 2 6 5.5 +55 1 1 2 7 4.5 +56 1 -1 2 7 5.5 +57 1 1 2 8 4.5 +58 1 -1 2 8 5.5 +59 1 1 2 9 4.5 +60 1 -1 2 9 5.5 +61 1 1 3 0 4.5 +62 1 -1 3 0 5.5 +63 1 1 3 1 4.5 +64 1 -1 3 1 5.5 +65 1 1 3 2 4.5 +66 1 -1 3 2 5.5 +67 1 1 3 3 4.5 +68 1 -1 3 3 5.5 +69 1 1 3 4 4.5 +70 1 -1 3 4 5.5 +71 1 1 3 5 4.5 +72 1 -1 3 5 5.5 +73 1 1 3 6 4.5 +74 1 -1 3 6 5.5 +75 1 1 3 7 4.5 +76 1 -1 3 7 5.5 +77 1 1 3 8 4.5 +78 1 -1 3 8 5.5 +79 1 1 3 9 4.5 +80 1 -1 3 9 5.5 +81 1 1 4 0 4.5 +82 1 -1 4 0 5.5 +83 1 1 4 1 4.5 +84 1 -1 4 1 5.5 +85 1 1 4 2 4.5 +86 1 -1 4 2 5.5 +87 1 1 4 3 4.5 +88 1 -1 4 3 5.5 +89 1 1 4 4 4.5 +90 1 -1 4 4 5.5 +91 1 1 4 5 4.5 +92 1 -1 4 5 5.5 +93 1 1 4 6 4.5 +94 1 -1 4 6 5.5 +95 1 1 4 7 4.5 +96 1 -1 4 7 5.5 +97 1 1 4 8 4.5 +98 1 -1 4 8 5.5 +99 1 1 4 9 4.5 +100 1 -1 4 9 5.5 +101 1 1 5 0 4.5 +102 1 -1 5 0 5.5 +103 1 1 5 1 4.5 +104 1 -1 5 1 5.5 +105 1 1 5 2 4.5 +106 1 -1 5 2 5.5 +107 1 1 5 3 4.5 +108 1 -1 5 3 5.5 +109 1 1 5 4 4.5 +110 1 -1 5 4 5.5 +111 1 1 5 5 4.5 +112 1 -1 5 5 5.5 +113 1 1 5 6 4.5 +114 1 -1 5 6 5.5 +115 1 1 5 7 4.5 +116 1 -1 5 7 5.5 +117 1 1 5 8 4.5 +118 1 -1 5 8 5.5 +119 1 1 5 9 4.5 +120 1 -1 5 9 5.5 +121 1 1 6 0 4.5 +122 1 -1 6 0 5.5 +123 1 1 6 1 4.5 +124 1 -1 6 1 5.5 +125 1 1 6 2 4.5 +126 1 -1 6 2 5.5 +127 1 1 6 3 4.5 +128 1 -1 6 3 5.5 +129 1 1 6 4 4.5 +130 1 -1 6 4 5.5 +131 1 1 6 5 4.5 +132 1 -1 6 5 5.5 +133 1 1 6 6 4.5 +134 1 -1 6 6 5.5 +135 1 1 6 7 4.5 +136 1 -1 6 7 5.5 +137 1 1 6 8 4.5 +138 1 -1 6 8 5.5 +139 1 1 6 9 4.5 +140 1 -1 6 9 5.5 +141 1 1 7 0 4.5 +142 1 -1 7 0 5.5 +143 1 1 7 1 4.5 +144 1 -1 7 1 5.5 +145 1 1 7 2 4.5 +146 1 -1 7 2 5.5 +147 1 1 7 3 4.5 +148 1 -1 7 3 5.5 +149 1 1 7 4 4.5 +150 1 -1 7 4 5.5 +151 1 1 7 5 4.5 +152 1 -1 7 5 5.5 +153 1 1 7 6 4.5 +154 1 -1 7 6 5.5 +155 1 1 7 7 4.5 +156 1 -1 7 7 5.5 +157 1 1 7 8 4.5 +158 1 -1 7 8 5.5 +159 1 1 7 9 4.5 +160 1 -1 7 9 5.5 +161 1 1 8 0 4.5 +162 1 -1 8 0 5.5 +163 1 1 8 1 4.5 +164 1 -1 8 1 5.5 +165 1 1 8 2 4.5 +166 1 -1 8 2 5.5 +167 1 1 8 3 4.5 +168 1 -1 8 3 5.5 +169 1 1 8 4 4.5 +170 1 -1 8 4 5.5 +171 1 1 8 5 4.5 +172 1 -1 8 5 5.5 +173 1 1 8 6 4.5 +174 1 -1 8 6 5.5 +175 1 1 8 7 4.5 +176 1 -1 8 7 5.5 +177 1 1 8 8 4.5 +178 1 -1 8 8 5.5 +179 1 1 8 9 4.5 +180 1 -1 8 9 5.5 +181 1 1 9 0 4.5 +182 1 -1 9 0 5.5 +183 1 1 9 1 4.5 +184 1 -1 9 1 5.5 +185 1 1 9 2 4.5 +186 1 -1 9 2 5.5 +187 1 1 9 3 4.5 +188 1 -1 9 3 5.5 +189 1 1 9 4 4.5 +190 1 -1 9 4 5.5 +191 1 1 9 5 4.5 +192 1 -1 9 5 5.5 +193 1 1 9 6 4.5 +194 1 -1 9 6 5.5 +195 1 1 9 7 4.5 +196 1 -1 9 7 5.5 +197 1 1 9 8 4.5 +198 1 -1 9 8 5.5 +199 1 1 9 9 4.5 +200 1 -1 9 9 5.5 +201 1 -1 9.28495 2.13839 8.88019 +202 1 1 4.99281 4.17459 9.83905 +203 1 -1 4.91265 6.89408 2.39989 +204 1 1 4.43647 3.68895 8.86086 +205 1 -1 0.659075 7.07271 0.179131 +206 1 1 7.791 3.40021 0.969703 +207 1 -1 1.18008 3.63874 7.28751 +208 1 1 8.51522 5.24681 6.37702 +209 1 -1 4.24226 9.60726 3.16084 +210 1 1 8.43745 8.23344 9.2883 +211 1 -1 8.48509 8.84988 9.43407 +212 1 1 2.81127 8.9903 0.00909212 +213 1 -1 6.38283 6.20858 9.92482 +214 1 1 4.59962 5.7925 7.52571 +215 1 -1 7.03797 7.09336 8.15957 +216 1 1 6.68103 8.04734 7.95661 +217 1 -1 2.531 8.47145 1.6209 +218 1 1 6.71915 8.79876 9.59581 +219 1 -1 4.96758 0.0381298 0.827927 +220 1 1 9.22955 1.04572 0.84722 +221 1 -1 2.3224 2.57084 8.07306 +222 1 1 1.94283 3.17375 3.92051 +223 1 -1 2.34735 1.91295 1.29127 +224 1 1 3.33928 3.30688 0.892089 +225 1 -1 1.19738 4.40402 8.70835 +226 1 1 7.44541 4.94803 8.28211 +227 1 -1 5.93272 1.18886 1.56518 +228 1 1 8.50709 8.70343 1.24939 +229 1 -1 5.54016 3.38865 8.61698 +230 1 1 9.47644 0.573085 3.05941 +231 1 -1 9.39695 4.46542 1.84205 +232 1 1 3.52268 5.60212 0.333999 +233 1 -1 3.69009 9.40954 6.10446 +234 1 1 3.96836 6.15307 7.57803 +235 1 -1 2.02535 0.0418407 3.21642 +236 1 1 2.97488 8.79711 8.33242 +237 1 -1 2.4122 1.79458 3.04173 +238 1 1 9.72355 3.67773 1.52435 +239 1 -1 8.55216 6.1623 1.53201 +240 1 1 4.98973 2.41459 9.84381 +241 1 -1 8.8901 5.9006 1.97649 +242 1 1 9.09932 2.23783 1.42554 +243 1 -1 6.70722 8.21769 1.21953 +244 1 1 6.83768 0.84508 3.25165 +245 1 -1 0.222115 3.07945 0.51825 +246 1 1 0.503918 9.34932 6.25278 +247 1 -1 0.803159 8.7017 9.46211 +248 1 1 4.88636 5.00147 9.65639 +249 1 -1 1.62258 0.767285 9.63596 +250 1 1 2.70143 3.01111 7.74859 +251 1 -1 4.41574 5.31824 0.538729 +252 1 1 1.64724 5.18097 3.59205 +253 1 -1 2.33672 3.21408 6.6081 +254 1 1 7.46603 1.53668 9.09844 +255 1 -1 3.61269 8.44556 6.99789 +256 1 1 6.95465 6.83045 9.31002 +257 1 -1 5.91831 9.01549 3.4626 +258 1 1 6.56503 8.42229 3.27105 +259 1 -1 4.50822 9.59753 3.47025 +260 1 1 4.17357 5.27384 7.34774 +261 1 -1 7.70968 6.5292 3.54779 +262 1 1 4.7977 4.94239 6.24947 +263 1 -1 9.24016 9.36994 6.71263 +264 1 1 7.36888 8.75922 0.52403 +265 1 -1 9.92895 5.87551 6.21586 +266 1 1 3.86308 6.71601 9.69083 +267 1 -1 8.90048 0.298719 0.573852 +268 1 1 6.58753 6.67768 1.83984 +269 1 -1 8.672 0.367497 2.21864 +270 1 1 3.44519 3.30359 6.52249 +271 1 -1 7.24717 3.25113 3.41567 +272 1 1 9.53447 5.81336 1.79208 +273 1 -1 1.01722 6.42534 0.715 +274 1 1 3.58808 4.92392 7.00979 +275 1 -1 1.21399 3.56951 6.34505 +276 1 1 3.50336 0.942722 2.76989 +277 1 -1 9.45475 6.06299 0.659023 +278 1 1 3.44464 4.03075 6.20179 +279 1 -1 0.949331 5.40183 8.51385 +280 1 1 6.41118 2.62135 2.31132 +281 1 -1 3.58837 9.78355 7.04966 +282 1 1 9.2267 3.19593 2.10384 +283 1 -1 1.83092 2.35627 3.93061 +284 1 1 4.97203 4.92287 1.8049 +285 1 -1 7.4097 4.757 8.604 +286 1 1 0.746575 7.69038 0.89134 +287 1 -1 8.54862 6.59135 2.18888 +288 1 1 2.18747 4.82994 0.761718 +289 1 -1 5.71622 2.51116 6.85522 +290 1 1 6.95554 1.83187 8.31157 +291 1 -1 7.31818 6.60081 2.63208 +292 1 1 0.744495 2.73429 9.86022 +293 1 -1 5.1573 8.70962 2.53418 +294 1 1 2.40385 1.54057 1.9297 +295 1 -1 3.42609 2.25856 2.28437 +296 1 1 6.66173 3.70851 9.70052 +297 1 -1 7.88966 1.4343 8.91223 +298 1 1 3.91118 5.22253 6.29642 +299 1 -1 9.17618 3.98313 9.82158 +300 1 1 4.95424 5.93521 1.3652 diff --git a/examples/USER/scafacos/data.hammersley_sphere b/examples/USER/scafacos/data.hammersley_sphere new file mode 100644 index 0000000000000000000000000000000000000000..0d238ebf8f0a836f0272355809ba975a227620c9 --- /dev/null +++ b/examples/USER/scafacos/data.hammersley_sphere @@ -0,0 +1,1016 @@ +LAMMPS Description + +1000 atoms + +1 atom types + +-51.5 51.5 xlo xhi +-51.5 51.5 ylo yhi +-51.5 51.5 zlo zhi + +Masses + +1 1.0 + +Atoms + +1 1 1 0.5 0.5 0 +2 1 1 0.468393 0.5 0.001 +3 1 1 0.5 0.544677 0.002 +4 1 -1 0.5 0.44531 0.003 +5 1 -1 0.544632 0.544632 0.004 +6 1 1 0.450125 0.450125 0.005 +7 1 1 0.445392 0.554608 0.006 +8 1 -1 0.558953 0.441047 0.007 +9 1 -1 0.582303 0.534091 0.008 +10 1 -1 0.412748 0.463859 0.009 +11 1 -1 0.461923 0.591925 0.01 +12 1 -1 0.539915 0.403637 0.011 +13 1 -1 0.541669 0.600597 0.012 +14 1 -1 0.456652 0.395348 0.013 +15 1 -1 0.391453 0.544962 0.014 +16 1 1 0.6123 0.453484 0.015 +17 1 1 0.623064 0.524479 0.016 +18 1 1 0.373213 0.47478 0.017 +19 1 1 0.474063 0.630397 0.018 +20 1 1 0.526635 0.366099 0.019 +21 1 1 0.57778 0.616406 0.02 +22 1 -1 0.42034 0.38078 0.021 +23 1 1 0.378037 0.581493 0.022 +24 1 -1 0.62464 0.416718 0.023 +25 1 1 0.627256 0.585029 0.024 +26 1 1 0.370187 0.413262 0.025 +27 1 1 0.411589 0.632316 0.026 +28 1 -1 0.590049 0.365233 0.027 +29 1 -1 0.532185 0.661803 0.028 +30 1 -1 0.467263 0.335418 0.029 +31 1 1 0.332691 0.53328 0.03 +32 1 -1 0.669987 0.466187 0.031 +33 1 -1 0.675153 0.517251 0.032 +34 1 1 0.322224 0.482491 0.033 +35 1 -1 0.482236 0.680356 0.034 +36 1 1 0.518014 0.317105 0.035 +37 1 -1 0.618181 0.644004 0.036 +38 1 1 0.380251 0.354085 0.037 +39 1 -1 0.352203 0.621294 0.038 +40 1 -1 0.649651 0.377185 0.039 +41 1 -1 0.672821 0.592375 0.04 +42 1 -1 0.325124 0.406527 0.041 +43 1 -1 0.405443 0.676904 0.042 +44 1 1 0.595626 0.321096 0.043 +45 1 -1 0.559536 0.696264 0.044 +46 1 1 0.439823 0.301622 0.045 +47 1 1 0.299535 0.56081 0.046 +48 1 -1 0.702526 0.438564 0.047 +49 1 1 0.704562 0.562053 0.048 +50 1 -1 0.293427 0.437337 0.049 +51 1 1 0.436734 0.70856 0.05 +52 1 -1 0.563862 0.289475 0.051 +53 1 -1 0.604663 0.69581 0.052 +54 1 1 0.394391 0.30242 0.053 +55 1 -1 0.30067 0.606544 0.054 +56 1 -1 0.701061 0.392531 0.055 +57 1 -1 0.677732 0.645861 0.056 +58 1 1 0.320783 0.352921 0.057 +59 1 1 0.351715 0.680686 0.058 +60 1 1 0.649479 0.31786 0.059 +61 1 -1 0.523278 0.736343 0.06 +62 1 1 0.476542 0.261822 0.061 +63 1 -1 0.260006 0.523637 0.062 +64 1 -1 0.741793 0.476185 0.063 +65 1 1 0.744458 0.512009 0.064 +66 1 1 0.253771 0.487904 0.065 +67 1 -1 0.487817 0.747983 0.066 +68 1 1 0.512268 0.250279 0.067 +69 1 -1 0.669062 0.686531 0.068 +70 1 1 0.329791 0.312203 0.069 +71 1 -1 0.310949 0.671346 0.07 +72 1 1 0.690295 0.327527 0.071 +73 1 1 0.73367 0.610518 0.072 +74 1 -1 0.264839 0.388777 0.073 +75 1 1 0.388079 0.736638 0.074 +76 1 -1 0.612614 0.261897 0.075 +77 1 -1 0.589275 0.749507 0.076 +78 1 1 0.410188 0.248992 0.077 +79 1 1 0.247505 0.590344 0.078 +80 1 -1 0.753971 0.409128 0.079 +81 1 1 0.763163 0.565919 0.08 +82 1 -1 0.235341 0.433706 0.081 +83 1 -1 0.433335 0.766142 0.082 +84 1 -1 0.567034 0.232386 0.083 +85 1 1 0.642606 0.737923 0.084 +86 1 -1 0.356626 0.260795 0.085 +87 1 -1 0.259524 0.644136 0.086 +88 1 -1 0.741738 0.355108 0.087 +89 1 -1 0.727545 0.668759 0.088 +90 1 -1 0.271292 0.330378 0.089 +91 1 1 0.329522 0.729863 0.09 +92 1 1 0.671329 0.26899 0.091 +93 1 -1 0.542409 0.785898 0.092 +94 1 -1 0.457385 0.212711 0.093 +95 1 -1 0.21133 0.54282 0.094 +96 1 -1 0.790041 0.456976 0.095 +97 1 -1 0.791403 0.543226 0.096 +98 1 1 0.207246 0.456574 0.097 +99 1 -1 0.456375 0.794097 0.098 +100 1 1 0.543823 0.204571 0.099 +101 1 -1 0.67871 0.740962 0.1 +102 1 -1 0.320499 0.25797 0.101 +103 1 -1 0.256911 0.680287 0.102 +104 1 1 0.744142 0.318932 0.103 +105 1 1 0.761831 0.656935 0.104 +106 1 -1 0.23706 0.3424 0.105 +107 1 -1 0.34174 0.764041 0.106 +108 1 1 0.658916 0.234865 0.107 +109 1 1 0.575416 0.801079 0.108 +110 1 1 0.424278 0.1977 0.109 +111 1 1 0.196487 0.576026 0.11 +112 1 -1 0.804718 0.423672 0.111 +113 1 1 0.796931 0.606244 0.112 +114 1 -1 0.201914 0.393343 0.113 +115 1 1 0.392933 0.799233 0.114 +116 1 -1 0.607475 0.199627 0.115 +117 1 -1 0.636914 0.78948 0.116 +118 1 1 0.362575 0.20944 0.117 +119 1 1 0.208366 0.637933 0.118 +120 1 1 0.792701 0.361563 0.119 +121 1 1 0.740781 0.718231 0.12 +122 1 -1 0.258356 0.280986 0.121 +123 1 1 0.280208 0.742503 0.122 +124 1 -1 0.720565 0.256644 0.123 +125 1 1 0.516172 0.829185 0.124 +126 1 1 0.483772 0.169679 0.125 +127 1 1 0.16855 0.516283 0.126 +128 1 -1 0.832572 0.483662 0.127 +129 1 1 0.833989 0.508199 0.128 +130 1 1 0.164901 0.491774 0.129 +131 1 1 0.491747 0.836202 0.13 +132 1 -1 0.50828 0.162701 0.131 +133 1 1 0.733403 0.745151 0.132 +134 1 -1 0.265849 0.254064 0.133 +135 1 1 0.253284 0.734894 0.134 +136 1 1 0.747492 0.264368 0.135 +137 1 -1 0.813381 0.638912 0.136 +138 1 -1 0.185651 0.360659 0.137 +139 1 1 0.360232 0.815311 0.138 +140 1 1 0.640192 0.183732 0.139 +141 1 1 0.624879 0.823736 0.14 +142 1 -1 0.374749 0.175298 0.141 +143 1 -1 0.174339 0.625621 0.142 +144 1 1 0.826615 0.374011 0.143 +145 1 1 0.842559 0.576924 0.144 +146 1 -1 0.156454 0.422854 0.145 +147 1 1 0.422634 0.844526 0.146 +148 1 1 0.577585 0.154498 0.147 +149 1 1 0.689978 0.800007 0.148 +150 1 1 0.309494 0.199157 0.149 +151 1 -1 0.198327 0.691032 0.15 +152 1 -1 0.802499 0.308445 0.151 +153 1 1 0.79353 0.706727 0.152 +154 1 1 0.20568 0.292716 0.153 +155 1 -1 0.292163 0.795106 0.154 +156 1 1 0.708388 0.204112 0.155 +157 1 1 0.562034 0.857513 0.156 +158 1 -1 0.437804 0.141555 0.157 +159 1 1 0.140629 0.562357 0.158 +160 1 1 0.860292 0.437483 0.159 +161 1 1 0.863849 0.544876 0.16 +162 1 1 0.135233 0.45501 0.161 +163 1 -1 0.454898 0.86568 0.162 +164 1 -1 0.545214 0.133412 0.163 +165 1 1 0.727805 0.791905 0.164 +166 1 -1 0.271638 0.207381 0.165 +167 1 -1 0.206672 0.728916 0.166 +168 1 1 0.794034 0.270533 0.167 +169 1 -1 0.825296 0.684278 0.168 +170 1 1 0.173933 0.315285 0.169 +171 1 1 0.314851 0.826833 0.17 +172 1 1 0.685581 0.172404 0.171 +173 1 1 0.600652 0.86371 0.172 +174 1 1 0.399117 0.135454 0.173 +175 1 -1 0.134623 0.601113 0.174 +176 1 1 0.866203 0.398658 0.175 +177 1 -1 0.861599 0.619456 0.176 +178 1 1 0.137595 0.380277 0.177 +179 1 -1 0.380013 0.863207 0.178 +180 1 1 0.620251 0.135996 0.179 +181 1 1 0.672735 0.843166 0.18 +182 1 1 0.326891 0.156092 0.181 +183 1 -1 0.155354 0.67348 0.182 +184 1 -1 0.84538 0.32615 0.183 +185 1 -1 0.793406 0.753094 0.184 +186 1 -1 0.205978 0.246375 0.185 +187 1 -1 0.245846 0.794635 0.186 +188 1 1 0.75468 0.204756 0.187 +189 1 1 0.528743 0.889654 0.188 +190 1 1 0.471199 0.109552 0.189 +191 1 1 0.108762 0.528859 0.19 +192 1 -1 0.892024 0.471083 0.191 +193 1 -1 0.892806 0.528975 0.192 +194 1 1 0.106416 0.470968 0.193 +195 1 1 0.47091 0.894357 0.194 +196 1 1 0.529146 0.104873 0.195 +197 1 1 0.759289 0.800588 0.196 +198 1 1 0.240212 0.198834 0.197 +199 1 -1 0.198258 0.760284 0.198 +200 1 -1 0.802314 0.239222 0.199 +201 1 -1 0.85729 0.679845 0.2 +202 1 -1 0.142042 0.319819 0.201 +203 1 1 0.319485 0.858623 0.202 +204 1 -1 0.680848 0.140716 0.203 +205 1 -1 0.626404 0.88263 0.204 +206 1 -1 0.373366 0.116674 0.205 +207 1 1 0.115982 0.626862 0.206 +208 1 -1 0.884707 0.37291 0.207 +209 1 -1 0.891174 0.608253 0.208 +210 1 -1 0.108134 0.391556 0.209 +211 1 -1 0.391366 0.892554 0.21 +212 1 -1 0.608824 0.106762 0.211 +213 1 1 0.70146 0.855626 0.212 +214 1 1 0.298194 0.143762 0.213 +215 1 -1 0.143154 0.702151 0.214 +216 1 1 0.857451 0.297506 0.215 +217 1 -1 0.824416 0.753177 0.216 +218 1 1 0.175042 0.2464 0.217 +219 1 -1 0.245979 0.825498 0.218 +220 1 -1 0.75444 0.173965 0.219 +221 1 -1 0.550708 0.911131 0.22 +222 1 1 0.449209 0.0881999 0.221 +223 1 1 0.0875343 0.550873 0.222 +224 1 -1 0.913128 0.449046 0.223 +225 1 1 0.910784 0.571278 0.224 +226 1 1 0.0885655 0.428609 0.225 +227 1 1 0.428497 0.912082 0.226 +228 1 1 0.571615 0.0872745 0.227 +229 1 -1 0.741576 0.843012 0.228 +230 1 1 0.258052 0.15646 0.229 +231 1 -1 0.155934 0.742319 0.23 +232 1 1 0.844589 0.257313 0.231 +233 1 1 0.85662 0.725827 0.232 +234 1 -1 0.142845 0.273834 0.233 +235 1 -1 0.273497 0.857687 0.234 +236 1 -1 0.726838 0.141783 0.235 +237 1 -1 0.593035 0.914305 0.236 +238 1 1 0.406829 0.0850902 0.237 +239 1 1 0.0844883 0.593306 0.238 +240 1 -1 0.91611 0.406559 0.239 +241 1 1 0.898465 0.653705 0.24 +242 1 1 0.100968 0.346076 0.241 +243 1 1 0.345859 0.899595 0.242 +244 1 1 0.654357 0.099844 0.243 +245 1 -1 0.674048 0.892646 0.244 +246 1 1 0.325711 0.10681 0.245 +247 1 -1 0.106269 0.674529 0.246 +248 1 -1 0.894268 0.325233 0.247 +249 1 -1 0.812767 0.797779 0.248 +250 1 1 0.186811 0.201819 0.249 +251 1 1 0.20142 0.813608 0.25 +252 1 1 0.798977 0.185975 0.251 +253 1 1 0.510655 0.93403 0.252 +254 1 -1 0.489331 0.0654 0.253 +255 1 -1 0.0648335 0.510683 0.254 +256 1 -1 0.93573 0.489303 0.255 +257 1 -1 0.936389 0.505356 0.256 +258 1 1 0.0630535 0.494638 0.257 +259 1 -1 0.494631 0.937501 0.258 +260 1 -1 0.505376 0.0619474 0.259 +261 1 1 0.806332 0.813944 0.26 +262 1 1 0.193287 0.185665 0.261 +263 1 -1 0.185277 0.807092 0.262 +264 1 1 0.815109 0.192531 0.263 +265 1 -1 0.905145 0.673671 0.264 +266 1 -1 0.0943645 0.326118 0.265 +267 1 -1 0.325909 0.906124 0.266 +268 1 1 0.674299 0.0933911 0.267 +269 1 -1 0.664463 0.911252 0.268 +270 1 1 0.335343 0.0882633 0.269 +271 1 -1 0.0877809 0.66485 0.27 +272 1 -1 0.912699 0.334958 0.271 +273 1 -1 0.935341 0.592162 0.272 +274 1 -1 0.0641588 0.407732 0.273 +275 1 -1 0.407626 0.936338 0.274 +276 1 -1 0.592478 0.0631673 0.275 +277 1 -1 0.743769 0.874701 0.276 +278 1 -1 0.255958 0.124881 0.277 +279 1 1 0.124464 0.744313 0.278 +280 1 -1 0.87595 0.255418 0.279 +281 1 1 0.87024 0.754013 0.28 +282 1 1 0.129357 0.245711 0.281 +283 1 -1 0.245436 0.871043 0.282 +284 1 1 0.754838 0.128558 0.283 +285 1 1 0.582539 0.943318 0.284 +286 1 -1 0.417373 0.056212 0.285 +287 1 -1 0.0557451 0.582714 0.286 +288 1 -1 0.944719 0.4172 0.287 +289 1 1 0.950072 0.549912 0.288 +290 1 1 0.049464 0.450037 0.289 +291 1 -1 0.449985 0.950997 0.29 +292 1 1 0.550066 0.0485441 0.291 +293 1 -1 0.784113 0.854987 0.292 +294 1 1 0.215602 0.144656 0.293 +295 1 1 0.144302 0.784681 0.294 +296 1 -1 0.85605 0.215037 0.295 +297 1 -1 0.899918 0.720113 0.296 +298 1 1 0.0996916 0.279673 0.297 +299 1 -1 0.279459 0.900696 0.298 +300 1 1 0.720753 0.0989177 0.299 +301 1 -1 0.627634 0.940125 0.3 +302 1 -1 0.372245 0.0594575 0.301 +303 1 -1 0.0590421 0.627875 0.302 +304 1 1 0.941371 0.372005 0.303 +305 1 -1 0.938504 0.638917 0.304 +306 1 -1 0.0610908 0.360954 0.305 +307 1 -1 0.360827 0.939312 0.306 +308 1 1 0.6393 0.0602882 0.307 +309 1 -1 0.712615 0.909794 0.308 +310 1 1 0.287194 0.0898385 0.309 +311 1 -1 0.0894727 0.712996 0.31 +312 1 -1 0.910891 0.286815 0.311 +313 1 1 0.85451 0.798293 0.312 +314 1 -1 0.145181 0.201446 0.313 +315 1 -1 0.201187 0.855127 0.314 +316 1 1 0.79907 0.144568 0.315 +317 1 -1 0.539888 0.963199 0.316 +318 1 1 0.460078 0.0364083 0.317 +319 1 -1 0.0360177 0.539956 0.318 +320 1 1 0.96437 0.460011 0.319 +321 1 -1 0.965598 0.528605 0.32 +322 1 -1 0.0340178 0.471372 0.321 +323 1 1 0.471348 0.966364 0.322 +324 1 -1 0.528675 0.0332573 0.323 +325 1 -1 0.810011 0.850596 0.324 +326 1 -1 0.189741 0.149123 0.325 +327 1 1 0.148844 0.810506 0.326 +328 1 1 0.851433 0.189249 0.327 +329 1 1 0.921914 0.705924 0.328 +330 1 -1 0.0777578 0.293916 0.329 +331 1 -1 0.293757 0.922568 0.33 +332 1 1 0.706401 0.077108 0.331 +333 1 -1 0.653199 0.945316 0.332 +334 1 -1 0.346686 0.054348 0.333 +335 1 -1 0.0540141 0.653429 0.334 +336 1 -1 0.946318 0.346457 0.335 +337 1 1 0.956741 0.620383 0.336 +338 1 1 0.0429248 0.379529 0.337 +339 1 1 0.379441 0.957407 0.338 +340 1 -1 0.620646 0.0422625 0.339 +341 1 1 0.738531 0.909272 0.34 +342 1 -1 0.2613 0.0904377 0.341 +343 1 -1 0.0901489 0.738868 0.342 +344 1 1 0.910138 0.260965 0.343 +345 1 -1 0.878055 0.787643 0.344 +346 1 -1 0.121684 0.212159 0.345 +347 1 -1 0.211963 0.878574 0.346 +348 1 1 0.788233 0.121169 0.347 +349 1 1 0.564106 0.972003 0.348 +350 1 -1 0.435852 0.0276823 0.349 +351 1 -1 0.0273696 0.564191 0.35 +352 1 -1 0.972941 0.435767 0.351 +353 1 -1 0.971529 0.57587 0.352 +354 1 -1 0.028166 0.424081 0.353 +355 1 1 0.424033 0.972137 0.354 +356 1 -1 0.576016 0.0275631 0.355 +357 1 -1 0.780489 0.888059 0.356 +358 1 1 0.219336 0.111698 0.357 +359 1 -1 0.111457 0.780839 0.358 +360 1 1 0.888782 0.218989 0.359 +361 1 1 0.90865 0.751803 0.36 +362 1 1 0.0911022 0.248045 0.361 +363 1 1 0.247893 0.909143 0.362 +364 1 -1 0.752257 0.0906132 0.363 +365 1 -1 0.611173 0.968129 0.364 +366 1 -1 0.388762 0.0315974 0.365 +367 1 -1 0.0313256 0.611303 0.366 +368 1 1 0.968944 0.388633 0.367 +369 1 1 0.952042 0.668029 0.368 +370 1 -1 0.0477021 0.331876 0.369 +371 1 1 0.331782 0.952551 0.37 +372 1 -1 0.668311 0.0471973 0.371 +373 1 -1 0.701276 0.939436 0.372 +374 1 1 0.298614 0.0603244 0.373 +375 1 1 0.0600867 0.701495 0.374 +376 1 -1 0.940149 0.298397 0.375 +377 1 -1 0.854883 0.82967 0.376 +378 1 -1 0.14493 0.170157 0.377 +379 1 -1 0.169985 0.855255 0.378 +380 1 -1 0.830185 0.144561 0.379 +381 1 -1 0.517866 0.985058 0.38 +382 1 1 0.482125 0.0146965 0.381 +383 1 1 0.0144527 0.517884 0.382 +384 1 -1 0.985789 0.482107 0.383 +385 1 1 0.986028 0.517901 0.384 +386 1 1 0.0137344 0.48209 0.385 +387 1 -1 0.482081 0.986501 0.386 +388 1 -1 0.517927 0.0132664 0.387 +389 1 1 0.831653 0.857018 0.388 +390 1 -1 0.168191 0.142814 0.389 +391 1 1 0.142648 0.831963 0.39 +392 1 -1 0.857517 0.167884 0.391 +393 1 1 0.943853 0.7033 0.392 +394 1 1 0.0559471 0.296609 0.393 +395 1 -1 0.296518 0.944251 0.394 +396 1 -1 0.703572 0.0555526 0.395 +397 1 1 0.670399 0.958419 0.396 +398 1 -1 0.329527 0.0413825 0.397 +399 1 -1 0.0411862 0.670546 0.398 +400 1 1 0.959008 0.329382 0.399 +401 1 -1 0.976641 0.613195 0.4 +402 1 -1 0.0231611 0.386758 0.401 +403 1 1 0.386712 0.977034 0.402 +404 1 1 0.613334 0.0227722 0.403 +405 1 1 0.757415 0.917758 0.404 +406 1 1 0.242483 0.0820765 0.405 +407 1 -1 0.0819126 0.757618 0.406 +408 1 -1 0.918249 0.242282 0.407 +409 1 1 0.89831 0.787898 0.408 +410 1 -1 0.101539 0.211993 0.409 +411 1 1 0.211885 0.89861 0.41 +412 1 1 0.788221 0.101243 0.411 +413 1 -1 0.578189 0.985945 0.412 +414 1 -1 0.421783 0.0138796 0.413 +415 1 -1 0.0137062 0.578245 0.414 +416 1 -1 0.986465 0.421727 0.415 +417 1 1 0.988409 0.566334 0.416 +418 1 -1 0.0114227 0.433643 0.417 +419 1 -1 0.433621 0.988743 0.418 +420 1 -1 0.566401 0.0110932 0.419 +421 1 -1 0.798855 0.892792 0.42 +422 1 -1 0.201047 0.10708 0.421 +423 1 1 0.106953 0.799049 0.422 +424 1 1 0.893172 0.200856 0.423 +425 1 1 0.926967 0.748844 0.424 +426 1 -1 0.0729011 0.251079 0.425 +427 1 -1 0.251003 0.927229 0.426 +428 1 -1 0.749071 0.0726425 0.427 +429 1 1 0.626105 0.978449 0.428 +430 1 -1 0.373858 0.0214111 0.429 +431 1 1 0.0212734 0.626178 0.43 +432 1 -1 0.978862 0.373786 0.431 +433 1 -1 0.968411 0.661144 0.432 +434 1 1 0.0314604 0.338812 0.433 +435 1 1 0.338768 0.968666 0.434 +436 1 -1 0.661275 0.0312086 0.435 +437 1 -1 0.717504 0.945641 0.436 +438 1 -1 0.28244 0.0542439 0.437 +439 1 -1 0.0541307 0.717616 0.438 +440 1 1 0.945981 0.28233 0.439 +441 1 1 0.871862 0.828815 0.44 +442 1 -1 0.128049 0.171106 0.441 +443 1 1 0.171028 0.87204 0.442 +444 1 1 0.829049 0.127874 0.443 +445 1 -1 0.530467 0.995919 0.444 +446 1 -1 0.469526 0.00396944 0.445 +447 1 -1 0.00385999 0.530481 0.446 +448 1 1 0.996247 0.469512 0.447 +449 1 -1 0.995455 0.542666 0.448 +450 1 1 0.00444188 0.457325 0.449 +451 1 1 0.457316 0.995659 0.45 +452 1 -1 0.542692 0.00424161 0.451 +453 1 1 0.820429 0.880817 0.452 +454 1 -1 0.17951 0.11911 0.453 +455 1 1 0.119039 0.820551 0.454 +456 1 1 0.881031 0.179391 0.455 +457 1 1 0.942098 0.729376 0.456 +458 1 1 0.0578245 0.270584 0.457 +459 1 -1 0.270544 0.942251 0.458 +460 1 -1 0.729494 0.0576748 0.459 +461 1 1 0.650519 0.975125 0.46 +462 1 1 0.349457 0.0247992 0.461 +463 1 -1 0.0247255 0.650566 0.462 +464 1 -1 0.975346 0.349411 0.463 +465 1 1 0.978969 0.638898 0.464 +466 1 1 0.0209627 0.361082 0.465 +467 1 1 0.361062 0.979104 0.466 +468 1 -1 0.638956 0.0208318 0.467 +469 1 -1 0.740598 0.937137 0.468 +470 1 1 0.259372 0.0628077 0.469 +471 1 -1 0.0627541 0.740658 0.47 +472 1 1 0.937298 0.259314 0.471 +473 1 -1 0.889756 0.811939 0.472 +474 1 1 0.110201 0.188026 0.473 +475 1 1 0.187993 0.88984 0.474 +476 1 1 0.812039 0.11012 0.475 +477 1 1 0.555048 0.996381 0.476 +478 1 1 0.444947 0.00357257 0.477 +479 1 1 0.0035278 0.555058 0.478 +480 1 -1 0.996515 0.444938 0.479 +481 1 1 0.991159 0.591447 0.48 +482 1 1 0.00880229 0.408546 0.481 +483 1 1 0.408539 0.991234 0.482 +484 1 -1 0.591467 0.00873146 0.483 +485 1 1 0.782721 0.912084 0.484 +486 1 1 0.217261 0.0878909 0.485 +487 1 -1 0.087867 0.782755 0.486 +488 1 1 0.912155 0.21723 0.487 +489 1 -1 0.918992 0.772584 0.488 +490 1 1 0.0809891 0.227403 0.489 +491 1 -1 0.227392 0.919029 0.49 +492 1 1 0.772618 0.0809555 0.491 +493 1 -1 0.603542 0.989096 0.492 +494 1 -1 0.396454 0.0108893 0.493 +495 1 -1 0.0108765 0.603548 0.494 +496 1 1 0.989134 0.396449 0.495 +497 1 -1 0.964238 0.685653 0.496 +498 1 1 0.0357553 0.314345 0.497 +499 1 1 0.314343 0.964249 0.498 +500 1 -1 0.685658 0.0357479 0.499 +501 1 1 0.696996 0.959557 0.5 +502 1 -1 0.303004 0.040444 0.501 +503 1 -1 0.0404468 0.696994 0.502 +504 1 -1 0.959549 0.303008 0.503 +505 1 -1 0.857854 0.849177 0.504 +506 1 1 0.142152 0.150829 0.505 +507 1 -1 0.150837 0.85784 0.506 +508 1 -1 0.849154 0.14217 0.507 +509 1 1 0.506135 0.999898 0.508 +510 1 1 0.493865 0.00011865 0.509 +511 1 1 0.000137652 0.506135 0.51 +512 1 -1 0.999841 0.493866 0.511 +513 1 -1 0.999847 0.503067 0.512 +514 1 1 0.000178438 0.496933 0.513 +515 1 1 0.496933 0.999795 0.514 +516 1 -1 0.503067 0.000234459 0.515 +517 1 -1 0.851197 0.855534 0.516 +518 1 1 0.148826 0.14449 0.517 +519 1 1 0.144514 0.85115 0.518 +520 1 1 0.855459 0.148876 0.519 +521 1 -1 0.960388 0.694017 0.52 +522 1 1 0.0396495 0.305999 0.521 +523 1 -1 0.306016 0.960311 0.522 +524 1 -1 0.693967 0.0397307 0.523 +525 1 -1 0.688286 0.962571 0.524 +526 1 1 0.311732 0.0374741 0.525 +527 1 -1 0.0375214 0.688249 0.526 +528 1 1 0.962429 0.311771 0.527 +529 1 -1 0.989016 0.600395 0.528 +530 1 -1 0.0110396 0.399617 0.529 +531 1 1 0.399629 0.988902 0.53 +532 1 -1 0.600359 0.0111574 0.531 +533 1 1 0.774665 0.916576 0.532 +534 1 1 0.225371 0.0834787 0.533 +535 1 -1 0.0835348 0.774592 0.534 +536 1 -1 0.916407 0.225446 0.535 +537 1 -1 0.912948 0.779603 0.536 +538 1 -1 0.0871126 0.220438 0.537 +539 1 1 0.22048 0.912825 0.538 +540 1 1 0.779477 0.0872389 0.539 +541 1 -1 0.594231 0.989408 0.54 +542 1 1 0.405784 0.0106715 0.541 +543 1 -1 0.0107533 0.5942 0.542 +544 1 -1 0.989163 0.405816 0.543 +545 1 1 0.995353 0.551859 0.544 +546 1 1 0.0047358 0.44815 0.545 +547 1 -1 0.44816 0.995173 0.546 +548 1 -1 0.55183 0.00491958 0.547 +549 1 -1 0.813365 0.88665 0.548 +550 1 1 0.186696 0.113426 0.549 +551 1 1 0.113503 0.813241 0.55 +552 1 -1 0.886418 0.186823 0.551 +553 1 1 0.937123 0.737107 0.552 +554 1 -1 0.06297 0.262943 0.553 +555 1 1 0.262995 0.936935 0.554 +556 1 1 0.736953 0.063161 0.555 +557 1 -1 0.641309 0.976336 0.556 +558 1 1 0.358723 0.0237733 0.557 +559 1 1 0.0238843 0.641244 0.558 +560 1 1 0.976003 0.35879 0.559 +561 1 -1 0.97412 0.647005 0.56 +562 1 1 0.0259968 0.353031 0.561 +563 1 -1 0.353067 0.973885 0.562 +564 1 -1 0.646895 0.0262355 0.563 +565 1 1 0.731072 0.938759 0.564 +566 1 -1 0.268989 0.0613556 0.565 +567 1 1 0.0614726 0.73095 0.566 +568 1 1 0.938409 0.269113 0.567 +569 1 -1 0.880979 0.816593 0.568 +570 1 1 0.119128 0.183495 0.569 +571 1 1 0.183585 0.880764 0.57 +572 1 1 0.816324 0.119345 0.571 +573 1 -1 0.545476 0.992695 0.572 +574 1 1 0.454538 0.00745132 0.573 +575 1 1 0.00759931 0.545448 0.574 +576 1 -1 0.992251 0.454565 0.575 +577 1 -1 0.993437 0.527277 0.576 +578 1 1 0.00671769 0.472732 0.577 +579 1 1 0.47274 0.993126 0.578 +580 1 1 0.527251 0.00703308 0.579 +581 1 -1 0.829203 0.86773 0.58 +582 1 1 0.170905 0.132392 0.581 +583 1 -1 0.132515 0.828984 0.582 +584 1 1 0.86736 0.171127 0.583 +585 1 1 0.944269 0.713469 0.584 +586 1 -1 0.0558856 0.286605 0.585 +587 1 -1 0.28668 0.943958 0.586 +588 1 1 0.713244 0.0562003 0.587 +589 1 1 0.662969 0.964432 0.588 +590 1 -1 0.337091 0.0357376 0.589 +591 1 1 0.0359093 0.662849 0.59 +592 1 -1 0.963917 0.337212 0.591 +593 1 1 0.975993 0.622339 0.592 +594 1 -1 0.0241894 0.377708 0.593 +595 1 -1 0.377756 0.975626 0.594 +596 1 -1 0.622197 0.0245602 0.595 +597 1 -1 0.749682 0.922425 0.596 +598 1 1 0.250418 0.0777441 0.597 +599 1 -1 0.0779153 0.74948 0.598 +600 1 1 0.921912 0.250622 0.599 +601 1 1 0.891692 0.794241 0.6 +602 1 1 0.108472 0.205882 0.601 +603 1 -1 0.206007 0.891362 0.602 +604 1 1 0.793867 0.108806 0.603 +605 1 1 0.568791 0.984202 0.604 +606 1 1 0.431239 0.0160094 0.605 +607 1 1 0.0162231 0.568731 0.606 +608 1 1 0.983561 0.4313 0.607 +609 1 1 0.982464 0.574595 0.608 +610 1 1 0.0177556 0.425439 0.609 +611 1 -1 0.425473 0.982023 0.61 +612 1 1 0.574492 0.0182014 0.611 +613 1 -1 0.787874 0.893172 0.612 +614 1 1 0.212262 0.107014 0.613 +615 1 -1 0.107202 0.7876 0.614 +616 1 1 0.892608 0.212539 0.615 +617 1 -1 0.915621 0.752593 0.616 +618 1 -1 0.0845837 0.247532 0.617 +619 1 1 0.247657 0.91521 0.618 +620 1 -1 0.752216 0.0849988 0.619 +621 1 1 0.615048 0.971555 0.62 +622 1 -1 0.385011 0.0286864 0.621 +623 1 -1 0.0289298 0.61493 0.622 +624 1 1 0.970825 0.38513 0.623 +625 1 -1 0.955055 0.665978 0.624 +626 1 1 0.0451863 0.33411 0.625 +627 1 -1 0.334199 0.95457 0.626 +628 1 1 0.665711 0.0456755 0.627 +629 1 1 0.703969 0.938193 0.628 +630 1 -1 0.296143 0.0620486 0.629 +631 1 1 0.0622917 0.703744 0.63 +632 1 1 0.937463 0.296371 0.631 +633 1 -1 0.855338 0.826053 0.632 +634 1 -1 0.144864 0.174132 0.633 +635 1 -1 0.17432 0.854932 0.634 +636 1 -1 0.825491 0.145274 0.635 +637 1 -1 0.52066 0.980705 0.636 +638 1 -1 0.479353 0.0195786 0.637 +639 1 -1 0.0198644 0.520635 0.638 +640 1 -1 0.979848 0.479377 0.639 +641 1 1 0.979774 0.514724 0.64 +642 1 1 0.0205185 0.485285 0.641 +643 1 -1 0.485294 0.979187 0.642 +644 1 -1 0.514697 0.0211107 0.643 +645 1 1 0.828028 0.8488 0.644 +646 1 -1 0.172178 0.15142 0.645 +647 1 1 0.151642 0.827613 0.646 +648 1 -1 0.848135 0.172597 0.647 +649 1 1 0.935425 0.696216 0.648 +650 1 1 0.0648583 0.303912 0.649 +651 1 -1 0.30404 0.934856 0.65 +652 1 -1 0.69583 0.0654317 0.651 +653 1 1 0.668701 0.945462 0.652 +654 1 -1 0.331413 0.0548379 0.653 +655 1 1 0.0551396 0.668473 0.654 +656 1 -1 0.944557 0.331642 0.655 +657 1 1 0.962851 0.606924 0.656 +658 1 1 0.0374699 0.39315 0.657 +659 1 1 0.393225 0.962207 0.658 +660 1 1 0.6067 0.0381189 0.659 +661 1 1 0.750973 0.901762 0.66 +662 1 -1 0.249207 0.0985254 0.661 +663 1 -1 0.0988149 0.750612 0.662 +664 1 -1 0.900894 0.24957 0.663 +665 1 1 0.884501 0.774341 0.664 +666 1 1 0.115783 0.225861 0.665 +667 1 -1 0.226065 0.883932 0.666 +668 1 1 0.77373 0.116356 0.667 +669 1 -1 0.577663 0.964483 0.668 +670 1 -1 0.422396 0.03587 0.669 +671 1 1 0.0362254 0.577544 0.67 +672 1 1 0.963417 0.422516 0.671 +673 1 -1 0.965593 0.560328 0.672 +674 1 -1 0.0347718 0.439719 0.673 +675 1 1 0.439767 0.964861 0.674 +676 1 -1 0.560185 0.0355081 0.675 +677 1 -1 0.785659 0.870706 0.676 +678 1 1 0.214571 0.129593 0.677 +679 1 1 0.129894 0.785197 0.678 +680 1 -1 0.869804 0.215036 0.679 +681 1 -1 0.904456 0.732411 0.68 +682 1 1 0.0958792 0.267782 0.681 +683 1 -1 0.267976 0.903783 0.682 +684 1 -1 0.731829 0.0965569 0.683 +685 1 -1 0.621247 0.948824 0.684 +686 1 1 0.378857 0.051559 0.685 +687 1 -1 0.0519446 0.621039 0.686 +688 1 -1 0.947667 0.379066 0.687 +689 1 -1 0.939026 0.648028 0.688 +690 1 -1 0.06136 0.352102 0.689 +691 1 -1 0.352232 0.938252 0.69 +692 1 1 0.647636 0.0621385 0.691 +693 1 1 0.705036 0.913638 0.692 +694 1 1 0.295149 0.0867361 0.693 +695 1 -1 0.0871122 0.704665 0.694 +696 1 -1 0.91251 0.295523 0.695 +697 1 1 0.846453 0.80258 0.696 +698 1 -1 0.153869 0.197702 0.697 +699 1 1 0.197984 0.845807 0.698 +700 1 1 0.801731 0.154519 0.699 +701 1 1 0.530907 0.957214 0.7 +702 1 -1 0.469123 0.0432226 0.701 +703 1 1 0.0436619 0.530847 0.702 +704 1 1 0.955896 0.469182 0.703 +705 1 -1 0.955039 0.536374 0.704 +706 1 -1 0.0454073 0.463661 0.705 +707 1 1 0.463697 0.954143 0.706 +708 1 1 0.536267 0.0463088 0.707 +709 1 -1 0.794868 0.846105 0.708 +710 1 1 0.20543 0.154244 0.709 +711 1 -1 0.154595 0.794271 0.71 +712 1 1 0.845051 0.20603 0.711 +713 1 1 0.903223 0.706076 0.712 +714 1 1 0.0971952 0.294138 0.713 +715 1 1 0.294353 0.902384 0.714 +716 1 1 0.705431 0.0980386 0.715 +717 1 -1 0.638821 0.929037 0.716 +718 1 -1 0.361327 0.07142 0.717 +719 1 -1 0.0718796 0.638524 0.718 +720 1 1 0.927658 0.361625 0.719 +721 1 1 0.931991 0.622407 0.72 +722 1 1 0.0684813 0.377727 0.721 +723 1 -1 0.377862 0.931043 0.722 +724 1 -1 0.622003 0.0694348 0.723 +725 1 -1 0.717943 0.890288 0.724 +726 1 1 0.282302 0.110151 0.725 +727 1 1 0.110592 0.717452 0.726 +728 1 -1 0.888965 0.282796 0.727 +729 1 -1 0.84912 0.775919 0.728 +730 1 -1 0.151283 0.224399 0.729 +731 1 1 0.22472 0.848311 0.73 +732 1 1 0.774958 0.152096 0.731 +733 1 -1 0.55152 0.939911 0.732 +734 1 -1 0.448542 0.0606106 0.733 +735 1 1 0.0611352 0.551397 0.734 +736 1 1 0.938337 0.448665 0.735 +737 1 1 0.933839 0.578023 0.736 +738 1 1 0.0666893 0.422072 0.737 +739 1 1 0.422167 0.932779 0.738 +740 1 -1 0.577737 0.0677547 0.739 +741 1 1 0.750364 0.860164 0.74 +742 1 -1 0.249949 0.140287 0.741 +743 1 -1 0.14074 0.749736 0.742 +744 1 1 0.858805 0.250581 0.743 +745 1 1 0.867273 0.735743 0.744 +746 1 -1 0.133199 0.26456 0.745 +747 1 -1 0.264865 0.866327 0.746 +748 1 -1 0.734829 0.13415 0.747 +749 1 -1 0.592524 0.924188 0.748 +750 1 1 0.407598 0.0763718 0.749 +751 1 1 0.0769344 0.592279 0.75 +752 1 1 0.9225 0.407844 0.751 +753 1 -1 0.901953 0.657891 0.752 +754 1 1 0.0985912 0.342323 0.753 +755 1 -1 0.342538 0.900861 0.754 +756 1 -1 0.657245 0.099689 0.755 +757 1 -1 0.671636 0.893707 0.756 +758 1 1 0.328603 0.106841 0.757 +759 1 1 0.107392 0.671157 0.758 +760 1 -1 0.892055 0.329085 0.759 +761 1 1 0.807501 0.796384 0.76 +762 1 1 0.192939 0.20404 0.761 +763 1 1 0.204466 0.80662 0.762 +764 1 -1 0.795106 0.193824 0.763 +765 1 -1 0.507816 0.92455 0.764 +766 1 -1 0.492196 0.076073 0.765 +767 1 -1 0.0766996 0.507793 0.766 +768 1 -1 0.922671 0.492219 0.767 +769 1 1 0.922037 0.50777 0.768 +770 1 -1 0.078599 0.492242 0.769 +771 1 1 0.492254 0.920761 0.77 +772 1 1 0.507734 0.0798819 0.771 +773 1 -1 0.791151 0.802072 0.772 +774 1 1 0.2093 0.198396 0.773 +775 1 1 0.198867 0.790246 0.774 +776 1 1 0.80066 0.21021 0.775 +777 1 -1 0.882184 0.666612 0.776 +778 1 1 0.118425 0.333653 0.777 +779 1 1 0.33392 0.880964 0.778 +780 1 -1 0.665812 0.119651 0.779 +781 1 -1 0.651454 0.885567 0.78 +782 1 1 0.348794 0.115064 0.781 +783 1 -1 0.115698 0.650957 0.782 +784 1 -1 0.883665 0.349293 0.783 +785 1 1 0.902061 0.587698 0.784 +786 1 -1 0.098615 0.41245 0.785 +787 1 -1 0.412598 0.900705 0.786 +788 1 -1 0.587253 0.0999777 0.787 +789 1 1 0.720782 0.843964 0.788 +790 1 -1 0.2796 0.15663 0.789 +791 1 1 0.157228 0.720016 0.79 +792 1 -1 0.842172 0.280369 0.791 +793 1 1 0.833266 0.731667 0.792 +794 1 1 0.167326 0.268745 0.793 +795 1 1 0.269159 0.832079 0.794 +796 1 1 0.730425 0.16852 0.795 +797 1 1 0.571327 0.896606 0.796 +798 1 1 0.428803 0.104119 0.797 +799 1 1 0.104847 0.571066 0.798 +800 1 1 0.89442 0.429066 0.799 +801 1 1 0.897285 0.546527 0.8 +802 1 -1 0.103462 0.45356 0.801 +803 1 -1 0.453648 0.895787 0.802 +804 1 1 0.546264 0.104968 0.803 +805 1 1 0.746143 0.811444 0.804 +806 1 -1 0.254333 0.189158 0.805 +807 1 1 0.189764 0.745189 0.806 +808 1 1 0.809628 0.255293 0.807 +809 1 1 0.843889 0.692033 0.808 +810 1 1 0.156796 0.308349 0.809 +811 1 1 0.308734 0.842516 0.81 +812 1 1 0.69088 0.158176 0.811 +813 1 -1 0.606516 0.875913 0.812 +814 1 -1 0.393702 0.124858 0.813 +815 1 1 0.125632 0.606079 0.814 +816 1 1 0.873589 0.394142 0.815 +817 1 1 0.868666 0.619287 0.816 +818 1 -1 0.132112 0.380965 0.817 +819 1 1 0.381218 0.867106 0.818 +820 1 -1 0.618528 0.13368 0.819 +821 1 1 0.674837 0.842099 0.82 +822 1 1 0.325543 0.158644 0.821 +823 1 1 0.159392 0.674075 0.822 +824 1 -1 0.839856 0.326309 0.823 +825 1 -1 0.789881 0.746967 0.824 +826 1 1 0.210768 0.253586 0.825 +827 1 -1 0.254142 0.788579 0.826 +828 1 -1 0.745299 0.212077 0.827 +829 1 1 0.530071 0.87618 0.828 +830 1 1 0.469999 0.124688 0.829 +831 1 1 0.125562 0.529931 0.83 +832 1 1 0.87356 0.470139 0.831 +833 1 1 0.873015 0.525215 0.832 +834 1 -1 0.127873 0.474845 0.833 +835 1 -1 0.474905 0.871233 0.834 +836 1 1 0.525034 0.129665 0.835 +837 1 1 0.74357 0.778887 0.836 +838 1 1 0.257029 0.221799 0.837 +839 1 1 0.222488 0.742369 0.838 +840 1 -1 0.776819 0.258236 0.839 +841 1 -1 0.828467 0.662818 0.84 +842 1 1 0.172367 0.337595 0.841 +843 1 1 0.33801 0.826796 0.842 +844 1 -1 0.661572 0.174047 0.843 +845 1 -1 0.615933 0.843836 0.844 +846 1 -1 0.384371 0.157064 0.845 +847 1 -1 0.15797 0.615324 0.846 +848 1 -1 0.841119 0.384983 0.847 +849 1 -1 0.846597 0.593631 0.848 +850 1 1 0.154342 0.406623 0.849 +851 1 1 0.406878 0.844715 0.85 +852 1 -1 0.592866 0.156234 0.851 +853 1 1 0.676921 0.807888 0.852 +854 1 -1 0.323575 0.192974 0.853 +855 1 -1 0.193841 0.675927 0.854 +856 1 1 0.805288 0.324574 0.855 +857 1 1 0.7781 0.714299 0.856 +858 1 1 0.222705 0.286322 0.857 +859 1 -1 0.286946 0.776485 0.858 +860 1 1 0.712426 0.22433 0.859 +861 1 1 0.544587 0.84411 0.86 +862 1 -1 0.455547 0.156921 0.861 +863 1 1 0.157959 0.544319 0.862 +864 1 1 0.840997 0.455816 0.863 +865 1 1 0.838095 0.55653 0.864 +866 1 1 0.162955 0.443645 0.865 +867 1 1 0.443822 0.835988 0.866 +868 1 -1 0.556 0.165075 0.867 +869 1 -1 0.6966 0.775544 0.868 +870 1 -1 0.304033 0.225344 0.869 +871 1 -1 0.226237 0.69533 0.87 +872 1 -1 0.772865 0.305311 0.871 +873 1 1 0.783348 0.677002 0.872 +874 1 1 0.217599 0.32359 0.873 +875 1 -1 0.324185 0.781448 0.874 +876 1 -1 0.675216 0.219511 0.875 +877 1 -1 0.574184 0.821124 0.876 +878 1 -1 0.426074 0.179991 0.877 +879 1 -1 0.181113 0.573667 0.878 +880 1 -1 0.817759 0.426594 0.879 +881 1 1 0.803899 0.61509 0.88 +882 1 1 0.197198 0.385326 0.881 +883 1 1 0.385744 0.801698 0.882 +884 1 -1 0.613835 0.199413 0.883 +885 1 -1 0.631562 0.791951 0.884 +886 1 1 0.368932 0.209146 0.885 +887 1 1 0.21025 0.630571 0.886 +888 1 -1 0.78864 0.36993 0.887 +889 1 -1 0.729733 0.716052 0.888 +890 1 1 0.271166 0.284793 0.889 +891 1 -1 0.285644 0.727929 0.89 +892 1 1 0.713499 0.272982 0.891 +893 1 1 0.509521 0.810234 0.892 +894 1 -1 0.490518 0.191032 0.893 +895 1 -1 0.192307 0.509443 0.894 +896 1 -1 0.806409 0.490597 0.895 +897 1 1 0.804979 0.513107 0.896 +898 1 1 0.196321 0.486949 0.897 +899 1 -1 0.487005 0.802369 0.898 +900 1 -1 0.512939 0.198949 0.899 +901 1 -1 0.702828 0.721045 0.9 +902 1 -1 0.298077 0.279941 0.901 +903 1 1 0.280934 0.701012 0.902 +904 1 -1 0.718067 0.299905 0.903 +905 1 1 0.767075 0.624318 0.904 +906 1 1 0.234173 0.376263 0.905 +907 1 -1 0.376848 0.764571 0.906 +908 1 -1 0.622563 0.236695 0.907 +909 1 1 0.599038 0.771528 0.908 +910 1 1 0.401448 0.229803 0.909 +911 1 -1 0.231144 0.598063 0.91 +912 1 -1 0.767505 0.40243 0.911 +913 1 -1 0.775222 0.567148 0.912 +914 1 -1 0.226196 0.433198 0.913 +915 1 -1 0.433547 0.772375 0.914 +916 1 -1 0.566102 0.229065 0.915 +917 1 1 0.644063 0.737044 0.916 +918 1 1 0.356719 0.264243 0.917 +919 1 -1 0.265539 0.642493 0.918 +920 1 1 0.733153 0.358301 0.919 +921 1 1 0.718892 0.660269 0.92 +922 1 1 0.282362 0.340649 0.921 +923 1 1 0.341575 0.716374 0.922 +924 1 1 0.657491 0.284901 0.923 +925 1 1 0.540491 0.761886 0.924 +926 1 1 0.459755 0.239702 0.925 +927 1 1 0.241303 0.539998 0.926 +928 1 -1 0.757082 0.460252 0.927 +929 1 1 0.755918 0.536358 0.928 +930 1 1 0.245728 0.463875 0.929 +931 1 -1 0.464111 0.75261 0.93 +932 1 -1 0.53565 0.249066 0.931 +933 1 -1 0.651203 0.70128 0.932 +934 1 -1 0.349833 0.300098 0.933 +935 1 -1 0.301489 0.649122 0.934 +936 1 1 0.697107 0.351933 0.935 +937 1 1 0.7107 0.624538 0.936 +938 1 1 0.290841 0.376373 0.937 +939 1 1 0.377293 0.707603 0.938 +940 1 -1 0.621778 0.293968 0.939 +941 1 1 0.559117 0.730011 0.94 +942 1 1 0.441347 0.271792 0.941 +943 1 1 0.273614 0.558185 0.942 +944 1 -1 0.724545 0.442288 0.943 +945 1 1 0.716953 0.576129 0.944 +946 1 1 0.284879 0.424514 0.945 +947 1 1 0.425164 0.713269 0.946 +948 1 1 0.574179 0.288603 0.947 +949 1 1 0.596159 0.700124 0.948 +950 1 1 0.40472 0.301705 0.949 +951 1 -1 0.303556 0.594391 0.95 +952 1 1 0.694572 0.406509 0.951 +953 1 1 0.659268 0.642582 0.952 +954 1 1 0.342317 0.358837 0.953 +955 1 -1 0.360273 0.656078 0.954 +956 1 -1 0.638272 0.345546 0.955 +957 1 1 0.51132 0.704782 0.956 +958 1 -1 0.488803 0.297452 0.957 +959 1 -1 0.299717 0.511072 0.958 +960 1 1 0.697988 0.489055 0.959 +961 1 1 0.69513 0.51801 0.96 +962 1 -1 0.307224 0.482207 0.961 +963 1 1 0.482427 0.690387 0.962 +964 1 -1 0.517349 0.312037 0.963 +965 1 1 0.619063 0.643276 0.964 +966 1 -1 0.382542 0.358654 0.965 +967 1 -1 0.360616 0.615828 0.966 +968 1 1 0.63739 0.385829 0.967 +969 1 1 0.655724 0.582012 0.968 +970 1 1 0.346649 0.419238 0.969 +971 1 -1 0.42051 0.650935 0.97 +972 1 1 0.578194 0.351525 0.971 +973 1 1 0.548857 0.657572 0.972 +974 1 1 0.451999 0.345188 0.973 +975 1 -1 0.348003 0.547128 0.974 +976 1 1 0.649121 0.453763 0.975 +977 1 -1 0.646729 0.543528 0.976 +978 1 -1 0.356287 0.457366 0.977 +979 1 -1 0.458282 0.640626 0.978 +980 1 1 0.54078 0.362537 0.979 +981 1 -1 0.566752 0.623062 0.98 +982 1 -1 0.434905 0.379993 0.981 +983 1 -1 0.383134 0.563391 0.982 +984 1 -1 0.613631 0.438364 0.983 +985 1 -1 0.59748 0.579004 0.984 +986 1 1 0.405567 0.423466 0.985 +987 1 -1 0.426024 0.591277 0.986 +988 1 -1 0.571322 0.411999 0.987 +989 1 1 0.511337 0.608293 0.988 +990 1 1 0.48914 0.396264 0.989 +991 1 -1 0.401042 0.51036 0.99 +992 1 1 0.593927 0.490167 0.991 +993 1 1 0.587477 0.516843 0.992 +994 1 1 0.418131 0.484237 0.993 +995 1 1 0.485399 0.575834 0.994 +996 1 -1 0.513336 0.430738 0.995 +997 1 -1 0.535388 0.552265 0.996 +998 1 -1 0.469337 0.454714 0.997 +999 1 1 0.463006 0.525048 0.998 +1000 1 -1 0.526172 0.482279 0.999 diff --git a/examples/USER/scafacos/in.scafacos b/examples/USER/scafacos/in.scafacos new file mode 100644 index 0000000000000000000000000000000000000000..9a1f0f321ecad83ee19371db24800ea5613b75c0 --- /dev/null +++ b/examples/USER/scafacos/in.scafacos @@ -0,0 +1,37 @@ +# Point dipoles in a 2d box + +units lj +atom_style full + +read_data data.NaCl + +replicate 8 8 8 + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p3m 0.001 +kspace_style scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 diff --git a/examples/USER/scafacos/in.scafacos.cw.ewald b/examples/USER/scafacos/in.scafacos.cw.ewald new file mode 100644 index 0000000000000000000000000000000000000000..55ebd0e7b3b14129f6740c8379b03e4507e57706 --- /dev/null +++ b/examples/USER/scafacos/in.scafacos.cw.ewald @@ -0,0 +1,31 @@ + +units lj +atom_style charge + +read_data data.cloud_wall + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos ewald 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 diff --git a/examples/USER/scafacos/in.scafacos.cw.fmm b/examples/USER/scafacos/in.scafacos.cw.fmm new file mode 100644 index 0000000000000000000000000000000000000000..c63e241d6384a6e23b70509d23df073892851fd5 --- /dev/null +++ b/examples/USER/scafacos/in.scafacos.cw.fmm @@ -0,0 +1,37 @@ +units lj +atom_style charge + +read_data data.cloud_wall + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +kspace_style scafacos fmm 1.0e-3 +kspace_modify scafacos tolerance energy_rel +kspace_modify scafacos fmm_tuning 1 + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 diff --git a/examples/USER/scafacos/in.scafacos.cw.p2nfft b/examples/USER/scafacos/in.scafacos.cw.p2nfft new file mode 100644 index 0000000000000000000000000000000000000000..96be1b7d3c83cdf7d5ae7146abe6b58b153931e0 --- /dev/null +++ b/examples/USER/scafacos/in.scafacos.cw.p2nfft @@ -0,0 +1,31 @@ + +units lj +atom_style charge + +read_data data.cloud_wall + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 diff --git a/examples/USER/scafacos/in.scafacos.cw.p3m b/examples/USER/scafacos/in.scafacos.cw.p3m new file mode 100644 index 0000000000000000000000000000000000000000..50ff1a64a8d961fefba985ff295ef0d3c0d842ba --- /dev/null +++ b/examples/USER/scafacos/in.scafacos.cw.p3m @@ -0,0 +1,31 @@ + +units lj +atom_style charge + +read_data data.cloud_wall + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos p3m 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 diff --git a/examples/USER/scafacos/in.scafacos.ewald b/examples/USER/scafacos/in.scafacos.ewald new file mode 100644 index 0000000000000000000000000000000000000000..6c26c71884b061806bd4fcd4fb4a39e14139f363 --- /dev/null +++ b/examples/USER/scafacos/in.scafacos.ewald @@ -0,0 +1,37 @@ +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + +replicate 8 8 8 + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos ewald 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 diff --git a/examples/USER/scafacos/in.scafacos.fmm b/examples/USER/scafacos/in.scafacos.fmm new file mode 100644 index 0000000000000000000000000000000000000000..054188ede29fd75e5d4d90f6c13ab405bed94706 --- /dev/null +++ b/examples/USER/scafacos/in.scafacos.fmm @@ -0,0 +1,37 @@ +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + +replicate 8 8 8 + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos fmm 0.001 +kspace_modify scafacos tolerance energy + +timestep 0.005 +thermo 10 + +run 100 diff --git a/examples/USER/scafacos/in.scafacos.hsph.direct b/examples/USER/scafacos/in.scafacos.hsph.direct new file mode 100644 index 0000000000000000000000000000000000000000..3688b5157c7df22597f6cb75828545b0773e83e0 --- /dev/null +++ b/examples/USER/scafacos/in.scafacos.hsph.direct @@ -0,0 +1,34 @@ +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_sphere +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos direct 0.001 + +timestep 0.005 +thermo 1 +run 20 diff --git a/examples/USER/scafacos/in.scafacos.hsph.fmm b/examples/USER/scafacos/in.scafacos.hsph.fmm new file mode 100644 index 0000000000000000000000000000000000000000..48a60a4b8bd3f330c02d96160b9ffc9f2c5e380c --- /dev/null +++ b/examples/USER/scafacos/in.scafacos.hsph.fmm @@ -0,0 +1,37 @@ +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_sphere +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos fmm 0.001 +kspace_modify scafacos tolerance energy_rel +kspace_modify scafacos fmm_tuning 1 + +timestep 0.005 +thermo 1 + +run 20 diff --git a/examples/USER/scafacos/in.scafacos.hsph.p2nfft b/examples/USER/scafacos/in.scafacos.hsph.p2nfft new file mode 100644 index 0000000000000000000000000000000000000000..a91f8f91c79028509f8a716cac33e54ab028e44b --- /dev/null +++ b/examples/USER/scafacos/in.scafacos.hsph.p2nfft @@ -0,0 +1,36 @@ +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_sphere +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance potential + +timestep 0.005 +thermo 1 + +run 20 diff --git a/examples/USER/scafacos/in.scafacos.p2nfft b/examples/USER/scafacos/in.scafacos.p2nfft new file mode 100644 index 0000000000000000000000000000000000000000..7fa2ccdd9e95b7e2b391e19bc10ace5a843b001e --- /dev/null +++ b/examples/USER/scafacos/in.scafacos.p2nfft @@ -0,0 +1,37 @@ +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + +replicate 8 8 8 + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 diff --git a/examples/USER/scafacos/in.scafacos.p3m b/examples/USER/scafacos/in.scafacos.p3m new file mode 100644 index 0000000000000000000000000000000000000000..874b1d151aed294d95fa8a32197f916ae3cd613c --- /dev/null +++ b/examples/USER/scafacos/in.scafacos.p3m @@ -0,0 +1,37 @@ +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + +replicate 8 8 8 + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p3m 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.16 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.16 new file mode 100644 index 0000000000000000000000000000000000000000..20d3faaf7f4ad7bc26fa5b68b32414399fb7116b --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.16 @@ -0,0 +1,92 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task + +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 2 by 2 by 4 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos ewald 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver ewald ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.313 | 3.501 | 3.689 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49647271 0 0.49647271 0 0 + 10 300 0.051135063 0.014582562 0.44286522 0.02180093 0.46466616 0 0.0043601861 + 20 300 0.10210872 0.058693359 0.37869251 0.087746571 0.46643909 0 0.017549314 + 30 300 0.15278506 0.13468789 0.26730177 0.2013584 0.46866017 0 0.040271679 + 40 300 0.19430375 0.50949535 0.083356437 0.76169555 0.84505198 0 0.15233911 + 50 300 0.23220921 1.1731116 -0.055261984 1.7538018 1.6985399 0 0.35076037 + 60 300 0.27002859 1.3589639 -0.33351524 2.031651 1.6981358 0 0.4063302 + 70 300 0.30781388 1.6482648 -0.76570045 2.4641559 1.6984554 0 0.49283118 + 80 300 0.34566283 2.8640899 -2.4038488 4.2818144 1.8779656 0 0.85636288 + 90 300 0.38424087 93.168442 -2.5911448 139.28682 136.69568 0 27.857364 + 100 300 0.42331123 94.146897 -1.3480439 140.74961 139.40157 0 28.149922 +Loop time of 0.423331 on 16 procs for 100 steps with 300 atoms + +Performance: 102047.913 tau/day, 236.222 timesteps/s +99.2% CPU use with 16 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.5988e-05 | 3.6508e-05 | 5.5075e-05 | 0.0 | 0.01 +Kspace | 0.41852 | 0.41925 | 0.41976 | 0.1 | 99.04 +Neigh | 0.00023413 | 0.00056887 | 0.0012875 | 0.0 | 0.13 +Comm | 0.0019519 | 0.0022772 | 0.0027158 | 0.5 | 0.54 +Output | 0.00028276 | 0.00030752 | 0.0003624 | 0.0 | 0.07 +Modify | 8.3685e-05 | 0.0001286 | 0.00018764 | 0.0 | 0.03 +Other | | 0.000758 | | | 0.18 + +Nlocal: 18.75 ave 39 max 6 min +Histogram: 6 1 1 0 1 2 2 1 1 1 +Nghost: 122.812 ave 195 max 63 min +Histogram: 8 0 0 0 0 0 0 1 3 4 +Neighs: 160.625 ave 598 max 13 min +Histogram: 8 2 1 1 1 0 0 2 0 1 + +Total # of neighbors = 2570 +Ave neighs/atom = 8.56667 +Neighbor list builds = 23 +Dangerous builds = 16 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.8 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.8 new file mode 100644 index 0000000000000000000000000000000000000000..d26138522aed28cb375316408b8544e6449afb7a --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.ewald.8 @@ -0,0 +1,92 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task + +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 2 by 2 by 2 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos ewald 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver ewald ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.317 | 3.317 | 3.317 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49647271 0 0.49647271 0 0 + 10 300 0.057411432 0.014718629 0.45088339 0.02200435 0.47288774 0 0.00440087 + 20 300 0.11482716 0.05922597 0.38470912 0.088542825 0.47325194 0 0.017708565 + 30 300 0.17278481 0.13587829 0.27058048 0.20313804 0.47371852 0 0.040627608 + 40 300 0.23021507 0.51353118 0.088432648 0.76772911 0.85616176 0 0.15354582 + 50 300 0.28812647 1.1760001 -0.058088247 1.7581201 1.7000319 0 0.35162403 + 60 300 0.34651113 1.3627885 -0.33736672 2.0373688 1.7000021 0 0.40747376 + 70 300 0.40509939 1.6529365 -0.77082139 2.4711401 1.7003187 0 0.49422802 + 80 300 0.46342874 2.9569837 -2.4624654 4.4206907 1.9582253 0 0.88413814 + 90 300 0.52329254 81.642726 -2.5370215 122.05588 119.51885 0 24.411175 + 100 300 0.58335209 85.047974 -1.128107 127.14672 126.01861 0 25.429344 +Loop time of 0.583369 on 8 procs for 100 steps with 300 atoms + +Performance: 74052.598 tau/day, 171.418 timesteps/s +99.7% CPU use with 8 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 4.0531e-05 | 4.6492e-05 | 4.8876e-05 | 0.0 | 0.01 +Kspace | 0.57805 | 0.5785 | 0.57893 | 0.0 | 99.17 +Neigh | 0.00062275 | 0.00091892 | 0.0013313 | 0.0 | 0.16 +Comm | 0.002604 | 0.0028289 | 0.0031538 | 0.3 | 0.48 +Output | 0.0002265 | 0.0002434 | 0.00029039 | 0.0 | 0.04 +Modify | 0.00016117 | 0.00017747 | 0.00019884 | 0.0 | 0.03 +Other | | 0.00065 | | | 0.11 + +Nlocal: 37.5 ave 46 max 31 min +Histogram: 2 0 0 2 1 0 2 0 0 1 +Nghost: 203.875 ave 212 max 192 min +Histogram: 1 0 1 0 0 2 1 0 0 3 +Neighs: 321.625 ave 599 max 112 min +Histogram: 1 2 0 1 1 0 1 1 0 1 + +Total # of neighbors = 2573 +Ave neighs/atom = 8.57667 +Neighbor list builds = 23 +Dangerous builds = 16 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.1 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.1 new file mode 100644 index 0000000000000000000000000000000000000000..714ce85a5fc8bcf709c81a246ff71725c5f637a5 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.1 @@ -0,0 +1,99 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +kspace_style scafacos fmm 1.0e-3 +kspace_modify scafacos tolerance energy_rel +kspace_modify scafacos fmm_tuning 1 +ScaFaCoS setting fmm inhomogen tuning ... + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.34 | 3.34 | 3.34 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49646402 0 0.49646402 0 0.016548801 + 10 300 0.063865185 0.015455559 0.47335833 0.02310606 0.49646439 0 0.020399823 + 20 300 0.12760854 0.06229069 0.40334177 0.093124582 0.49646635 0 0.032069642 + 30 300 0.19143319 0.14310163 0.28254277 0.21393694 0.49647971 0 0.05220548 + 40 300 0.25553131 0.52929788 0.089669015 0.79130033 0.88096934 0 0.16124903 + 50 300 0.31961966 1.1963022 -0.082792461 1.7884718 1.7056794 0 0.35493462 + 60 300 0.38388991 1.3928167 -0.37659239 2.082261 1.7056686 0 0.40389911 + 70 300 0.44797421 1.7069009 -0.84571914 2.5518169 1.7060978 0 0.48217274 + 80 300 0.50961447 15.358343 -3.368063 22.960722 19.592659 0 4.4798757 + 90 300 0.57181501 42.280432 -2.1623864 63.209247 61.04686 0 12.56977 + 100 300 0.63501096 41.48079 -0.89904529 62.013782 61.114736 0 12.372788 +Loop time of 0.635022 on 1 procs for 100 steps with 300 atoms + +Performance: 68029.122 tau/day, 157.475 timesteps/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 | 9.0837e-05 | 9.0837e-05 | 9.0837e-05 | 0.0 | 0.01 +Kspace | 0.62877 | 0.62877 | 0.62877 | 0.0 | 99.01 +Neigh | 0.0035319 | 0.0035319 | 0.0035319 | 0.0 | 0.56 +Comm | 0.0010211 | 0.0010211 | 0.0010211 | 0.0 | 0.16 +Output | 0.00014758 | 0.00014758 | 0.00014758 | 0.0 | 0.02 +Modify | 0.0010428 | 0.0010428 | 0.0010428 | 0.0 | 0.16 +Other | | 0.0004218 | | | 0.07 + +Nlocal: 300 ave 300 max 300 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 374 ave 374 max 374 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 2459 ave 2459 max 2459 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2459 +Ave neighs/atom = 8.19667 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.16 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.16 new file mode 100644 index 0000000000000000000000000000000000000000..c9c1e0d155e161e16525351f41cfc427a70a482f --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.16 @@ -0,0 +1,99 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 2 by 2 by 4 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +kspace_style scafacos fmm 1.0e-3 +kspace_modify scafacos tolerance energy_rel +kspace_modify scafacos fmm_tuning 1 +ScaFaCoS setting fmm inhomogen tuning ... + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.313 | 3.501 | 3.689 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49646402 0 0.49646402 0 0.016548801 + 10 300 0.023007393 0.015455559 0.47335833 0.02310606 0.49646439 0 0.020399823 + 20 300 0.045746088 0.06229069 0.40334177 0.093124582 0.49646635 0 0.032069642 + 30 300 0.068123341 0.14310163 0.28254277 0.21393694 0.49647971 0 0.05220548 + 40 300 0.090359211 0.52929788 0.089669015 0.79130033 0.88096934 0 0.16124903 + 50 300 0.11304998 1.1963022 -0.082792461 1.7884718 1.7056794 0 0.35493462 + 60 300 0.13585806 1.3928167 -0.37659239 2.082261 1.7056686 0 0.40389911 + 70 300 0.15867376 1.7069009 -0.84571914 2.5518169 1.7060978 0 0.48217274 + 80 300 0.18324137 15.358343 -3.368063 22.960722 19.592659 0 4.4798757 + 90 300 0.20960689 42.280432 -2.1623864 63.209247 61.04686 0 12.56977 + 100 300 0.23539281 41.48079 -0.89904529 62.013782 61.114736 0 12.372788 +Loop time of 0.235411 on 16 procs for 100 steps with 300 atoms + +Performance: 183509.107 tau/day, 424.790 timesteps/s +97.9% CPU use with 16 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 3.2425e-05 | 4.4718e-05 | 6.1274e-05 | 0.0 | 0.02 +Kspace | 0.23097 | 0.23143 | 0.2318 | 0.1 | 98.31 +Neigh | 0.00015116 | 0.00035347 | 0.00075746 | 0.0 | 0.15 +Comm | 0.0020316 | 0.002282 | 0.0025339 | 0.3 | 0.97 +Output | 0.00034404 | 0.00037053 | 0.00042701 | 0.0 | 0.16 +Modify | 9.3937e-05 | 0.00014532 | 0.00018811 | 0.0 | 0.06 +Other | | 0.0007878 | | | 0.33 + +Nlocal: 18.75 ave 36 max 6 min +Histogram: 4 3 1 0 0 1 2 1 2 2 +Nghost: 127 ave 196 max 71 min +Histogram: 8 0 0 0 0 0 0 1 6 1 +Neighs: 153.688 ave 491 max 10 min +Histogram: 8 1 1 1 1 1 0 0 0 3 + +Total # of neighbors = 2459 +Ave neighs/atom = 8.19667 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.2 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.2 new file mode 100644 index 0000000000000000000000000000000000000000..1a9bc771467c7866237bdcda3a2c14a60ed5e663 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.2 @@ -0,0 +1,99 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 1 by 1 by 2 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +kspace_style scafacos fmm 1.0e-3 +kspace_modify scafacos tolerance energy_rel +kspace_modify scafacos fmm_tuning 1 +ScaFaCoS setting fmm inhomogen tuning ... + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.354 | 3.354 | 3.355 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49646402 0 0.49646402 0 0.016548801 + 10 300 0.038181543 0.015455559 0.47335833 0.02310606 0.49646439 0 0.020399823 + 20 300 0.076276302 0.06229069 0.40334177 0.093124582 0.49646635 0 0.032069642 + 30 300 0.11437607 0.14310163 0.28254277 0.21393694 0.49647971 0 0.05220548 + 40 300 0.15244293 0.52929788 0.089669015 0.79130033 0.88096934 0 0.16124903 + 50 300 0.19081283 1.1963022 -0.082792461 1.7884718 1.7056794 0 0.35493462 + 60 300 0.22923493 1.3928167 -0.37659239 2.082261 1.7056686 0 0.40389911 + 70 300 0.26754427 1.7069009 -0.84571914 2.5518169 1.7060978 0 0.48217274 + 80 300 0.30721259 15.358343 -3.368063 22.960722 19.592659 0 4.4798757 + 90 300 0.34865618 42.280432 -2.1623864 63.209247 61.04686 0 12.56977 + 100 300 0.39100981 41.48079 -0.89904529 62.013782 61.114736 0 12.372788 +Loop time of 0.391022 on 2 procs for 100 steps with 300 atoms + +Performance: 110479.760 tau/day, 255.740 timesteps/s +99.6% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 8.0109e-05 | 8.1539e-05 | 8.297e-05 | 0.0 | 0.02 +Kspace | 0.38534 | 0.38582 | 0.3863 | 0.1 | 98.67 +Neigh | 0.0014851 | 0.0019699 | 0.0024548 | 1.1 | 0.50 +Comm | 0.0019314 | 0.0020101 | 0.0020888 | 0.2 | 0.51 +Output | 0.00014496 | 0.00017297 | 0.00020099 | 0.0 | 0.04 +Modify | 0.0005033 | 0.00052273 | 0.00054216 | 0.0 | 0.13 +Other | | 0.0004461 | | | 0.11 + +Nlocal: 150 ave 159 max 141 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 392 ave 395 max 389 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 1229.5 ave 1773 max 686 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 2459 +Ave neighs/atom = 8.19667 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.4 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.4 new file mode 100644 index 0000000000000000000000000000000000000000..eae3f2b8400e9b33656ddc8ed3513021cb34dda9 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.4 @@ -0,0 +1,99 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +kspace_style scafacos fmm 1.0e-3 +kspace_modify scafacos tolerance energy_rel +kspace_modify scafacos fmm_tuning 1 +ScaFaCoS setting fmm inhomogen tuning ... + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.333 | 3.333 | 3.333 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49646402 0 0.49646402 0 0.016548801 + 10 300 0.029414415 0.015455559 0.47335833 0.02310606 0.49646439 0 0.020399823 + 20 300 0.058616877 0.06229069 0.40334177 0.093124582 0.49646635 0 0.032069642 + 30 300 0.087769508 0.14310163 0.28254277 0.21393694 0.49647971 0 0.05220548 + 40 300 0.1168611 0.52929788 0.089669015 0.79130033 0.88096934 0 0.16124903 + 50 300 0.14482284 1.1963022 -0.082792461 1.7884718 1.7056794 0 0.35493462 + 60 300 0.17198443 1.3928167 -0.37659239 2.082261 1.7056686 0 0.40389911 + 70 300 0.19868851 1.7069009 -0.84571914 2.5518169 1.7060978 0 0.48217274 + 80 300 0.22835517 15.358343 -3.368063 22.960722 19.592659 0 4.4798757 + 90 300 0.26023602 42.280432 -2.1623864 63.209247 61.04686 0 12.56977 + 100 300 0.29043221 41.48079 -0.89904529 62.013782 61.114736 0 12.372788 +Loop time of 0.290448 on 4 procs for 100 steps with 300 atoms + +Performance: 148735.741 tau/day, 344.296 timesteps/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 | 5.9605e-05 | 6.187e-05 | 6.4135e-05 | 0.0 | 0.02 +Kspace | 0.28551 | 0.28584 | 0.28604 | 0.0 | 98.41 +Neigh | 0.00077796 | 0.0010615 | 0.0013225 | 0.7 | 0.37 +Comm | 0.002372 | 0.0024325 | 0.002497 | 0.1 | 0.84 +Output | 0.00025368 | 0.0002659 | 0.00029516 | 0.0 | 0.09 +Modify | 0.00030279 | 0.00031865 | 0.00033021 | 0.0 | 0.11 +Other | | 0.0004706 | | | 0.16 + +Nlocal: 75 ave 81 max 70 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 282.5 ave 290 max 274 min +Histogram: 1 0 0 1 0 0 0 0 1 1 +Neighs: 614.75 ave 981 max 285 min +Histogram: 1 1 0 0 0 0 0 1 0 1 + +Total # of neighbors = 2459 +Ave neighs/atom = 8.19667 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.8 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.8 new file mode 100644 index 0000000000000000000000000000000000000000..feb7e2a5a6091e5d9ebb83a9ce75a853114d84e5 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.fmm.8 @@ -0,0 +1,99 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 2 by 2 by 2 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +kspace_style scafacos fmm 1.0e-3 +kspace_modify scafacos tolerance energy_rel +kspace_modify scafacos fmm_tuning 1 +ScaFaCoS setting fmm inhomogen tuning ... + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.317 | 3.317 | 3.317 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49646402 0 0.49646402 0 0.016548801 + 10 300 0.026465416 0.015455559 0.47335833 0.02310606 0.49646439 0 0.020399823 + 20 300 0.057377338 0.06229069 0.40334177 0.093124582 0.49646635 0 0.032069642 + 30 300 0.088356495 0.14310163 0.28254277 0.21393694 0.49647971 0 0.05220548 + 40 300 0.11900806 0.52929788 0.089669015 0.79130033 0.88096934 0 0.16124903 + 50 300 0.15157914 1.1963022 -0.082792461 1.7884718 1.7056794 0 0.35493462 + 60 300 0.18608141 1.3928167 -0.37659239 2.082261 1.7056686 0 0.40389911 + 70 300 0.21956491 1.7069009 -0.84571914 2.5518169 1.7060978 0 0.48217274 + 80 300 0.24269128 15.358343 -3.368063 22.960722 19.592659 0 4.4798757 + 90 300 0.26847005 42.280432 -2.1623864 63.209247 61.04686 0 12.56977 + 100 300 0.29283834 41.48079 -0.89904529 62.013782 61.114736 0 12.372788 +Loop time of 0.292855 on 8 procs for 100 steps with 300 atoms + +Performance: 147513.337 tau/day, 341.466 timesteps/s +98.4% CPU use with 8 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 4.7207e-05 | 5.5045e-05 | 6.9618e-05 | 0.0 | 0.02 +Kspace | 0.28739 | 0.28773 | 0.2881 | 0.0 | 98.25 +Neigh | 0.00040698 | 0.00060901 | 0.00082922 | 0.0 | 0.21 +Comm | 0.0029533 | 0.0031788 | 0.0034056 | 0.3 | 1.09 +Output | 0.00029063 | 0.00030866 | 0.00035119 | 0.0 | 0.11 +Modify | 0.00018978 | 0.00022188 | 0.00026703 | 0.0 | 0.08 +Other | | 0.0007486 | | | 0.26 + +Nlocal: 37.5 ave 45 max 31 min +Histogram: 1 1 1 1 1 0 1 0 1 1 +Nghost: 200 ave 209 max 189 min +Histogram: 1 0 0 0 1 4 0 0 0 2 +Neighs: 307.375 ave 514 max 115 min +Histogram: 2 1 0 1 1 0 0 0 1 2 + +Total # of neighbors = 2459 +Ave neighs/atom = 8.19667 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.1 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.1 new file mode 100644 index 0000000000000000000000000000000000000000..f47f24edee4f7f7fa5f4a868d547c27d5513e388 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.1 @@ -0,0 +1,92 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task + +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.34 | 3.34 | 3.34 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49683273 0 0.49683273 0 0.016561091 + 10 300 0.071435928 0.015479312 0.47369009 0.023141571 0.49683166 0 0.020417984 + 20 300 0.14302707 0.062386358 0.40356181 0.093267605 0.49682941 0 0.032105581 + 30 300 0.21480989 0.14331637 0.2825636 0.21425798 0.49682157 0 0.052270382 + 40 300 0.28638172 0.53041843 0.089505208 0.79297556 0.88248077 0 0.16157862 + 50 300 0.35810781 1.1948397 -0.083317439 1.7862853 1.7029679 0 0.35447982 + 60 300 0.42993116 1.3915614 -0.37745551 2.0803842 1.7029287 0 0.40349499 + 70 300 0.50181961 1.7061978 -0.84746071 2.5507657 1.703305 0 0.48190445 + 80 300 0.57404566 20.692093 -3.32971 30.93468 27.60497 0 6.0759456 + 90 300 0.64724708 48.999403 -2.1632167 73.254107 71.090891 0 14.578714 + 100 300 0.72128963 51.199785 -0.81127924 76.543678 75.732399 0 15.281693 +Loop time of 0.721302 on 1 procs for 100 steps with 300 atoms + +Performance: 59891.733 tau/day, 138.638 timesteps/s +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 8.893e-05 | 8.893e-05 | 8.893e-05 | 0.0 | 0.01 +Kspace | 0.71502 | 0.71502 | 0.71502 | 0.0 | 99.13 +Neigh | 0.0035415 | 0.0035415 | 0.0035415 | 0.0 | 0.49 +Comm | 0.001024 | 0.001024 | 0.001024 | 0.0 | 0.14 +Output | 0.00015044 | 0.00015044 | 0.00015044 | 0.0 | 0.02 +Modify | 0.0010409 | 0.0010409 | 0.0010409 | 0.0 | 0.14 +Other | | 0.0004385 | | | 0.06 + +Nlocal: 300 ave 300 max 300 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 381 ave 381 max 381 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 2461 ave 2461 max 2461 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2461 +Ave neighs/atom = 8.20333 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.16 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.16 new file mode 100644 index 0000000000000000000000000000000000000000..d6e7cbea3735188e4c6caaa9a034ab9a1a378fe8 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.16 @@ -0,0 +1,92 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task + +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 2 by 2 by 4 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.313 | 3.501 | 3.689 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49683273 0 0.49683273 0 0.016561091 + 10 300 0.015678644 0.015479312 0.47369009 0.023141571 0.49683166 0 0.020417984 + 20 300 0.031283855 0.062386358 0.40356181 0.093267605 0.49682941 0 0.032105581 + 30 300 0.046878099 0.14331637 0.2825636 0.21425798 0.49682157 0 0.052270382 + 40 300 0.062416077 0.53041843 0.089505208 0.79297556 0.88248077 0 0.16157862 + 50 300 0.078029871 1.1948397 -0.083317439 1.7862853 1.7029679 0 0.35447982 + 60 300 0.093806505 1.3915614 -0.37745551 2.0803842 1.7029287 0 0.40349499 + 70 300 0.1096344 1.7061978 -0.84746071 2.5507657 1.703305 0 0.48190445 + 80 300 0.12532592 20.692093 -3.32971 30.93468 27.60497 0 6.0759456 + 90 300 0.14175463 48.999403 -2.1632167 73.254107 71.090891 0 14.578714 + 100 300 0.15838337 51.199785 -0.81127924 76.543678 75.732399 0 15.281693 +Loop time of 0.158406 on 16 procs for 100 steps with 300 atoms + +Performance: 272716.448 tau/day, 631.288 timesteps/s +99.4% CPU use with 16 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.718e-05 | 3.7491e-05 | 5.6744e-05 | 0.0 | 0.02 +Kspace | 0.15435 | 0.15482 | 0.15516 | 0.1 | 97.74 +Neigh | 0.00014806 | 0.0003508 | 0.00074744 | 0.0 | 0.22 +Comm | 0.0016866 | 0.0019967 | 0.0023787 | 0.5 | 1.26 +Output | 0.00027871 | 0.00033027 | 0.00038028 | 0.0 | 0.21 +Modify | 8.0347e-05 | 0.00011933 | 0.00016522 | 0.0 | 0.08 +Other | | 0.0007506 | | | 0.47 + +Nlocal: 18.75 ave 33 max 6 min +Histogram: 2 6 0 0 0 0 2 1 2 3 +Nghost: 128.875 ave 198 max 71 min +Histogram: 7 1 0 0 0 0 0 1 5 2 +Neighs: 153.812 ave 490 max 14 min +Histogram: 8 0 3 0 1 1 0 0 1 2 + +Total # of neighbors = 2461 +Ave neighs/atom = 8.20333 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.2 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.2 new file mode 100644 index 0000000000000000000000000000000000000000..fb863797f3a61140520afa67bddb6347befde514 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.2 @@ -0,0 +1,92 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task + +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 1 by 1 by 2 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.354 | 3.354 | 3.355 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49683273 0 0.49683273 0 0.016561091 + 10 300 0.044083834 0.015479312 0.47369009 0.023141571 0.49683166 0 0.020417984 + 20 300 0.088379145 0.062386358 0.40356181 0.093267605 0.49682941 0 0.032105581 + 30 300 0.13264704 0.14331637 0.2825636 0.21425798 0.49682157 0 0.052270382 + 40 300 0.17687225 0.53041843 0.089505208 0.79297556 0.88248077 0 0.16157862 + 50 300 0.22116137 1.1948397 -0.083317439 1.7862853 1.7029679 0 0.35447982 + 60 300 0.26515126 1.3915614 -0.37745551 2.0803842 1.7029287 0 0.40349499 + 70 300 0.30891085 1.7061978 -0.84746071 2.5507657 1.703305 0 0.48190445 + 80 300 0.35292292 20.692093 -3.32971 30.93468 27.60497 0 6.0759456 + 90 300 0.39845228 48.999403 -2.1632167 73.254107 71.090891 0 14.578714 + 100 300 0.44492316 51.199785 -0.81127924 76.543678 75.732399 0 15.281693 +Loop time of 0.444937 on 2 procs for 100 steps with 300 atoms + +Performance: 97092.373 tau/day, 224.751 timesteps/s +100.0% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 7.7248e-05 | 7.844e-05 | 7.9632e-05 | 0.0 | 0.02 +Kspace | 0.43932 | 0.43979 | 0.44026 | 0.1 | 98.84 +Neigh | 0.0014915 | 0.0019662 | 0.0024409 | 1.1 | 0.44 +Comm | 0.0019331 | 0.0019941 | 0.0020552 | 0.1 | 0.45 +Output | 0.00013781 | 0.00016308 | 0.00018835 | 0.0 | 0.04 +Modify | 0.00050378 | 0.00050449 | 0.00050521 | 0.0 | 0.11 +Other | | 0.0004425 | | | 0.10 + +Nlocal: 150 ave 157 max 143 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 399 ave 402 max 396 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 1230.5 ave 1756 max 705 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 2461 +Ave neighs/atom = 8.20333 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.4 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.4 new file mode 100644 index 0000000000000000000000000000000000000000..d5a07e032480ae627dd1acd731e530c377d9e6f8 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.4 @@ -0,0 +1,92 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task + +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.333 | 3.333 | 3.333 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49683273 0 0.49683273 0 0.016561091 + 10 300 0.02743125 0.015479312 0.47369009 0.023141571 0.49683166 0 0.020417984 + 20 300 0.05494833 0.062386358 0.40356181 0.093267605 0.49682941 0 0.032105581 + 30 300 0.082517862 0.14331637 0.2825636 0.21425798 0.49682157 0 0.052270382 + 40 300 0.11015558 0.53041843 0.089505208 0.79297556 0.88248077 0 0.16157862 + 50 300 0.13790298 1.1948397 -0.083317439 1.7862853 1.7029679 0 0.35447982 + 60 300 0.1660006 1.3915614 -0.37745551 2.0803842 1.7029287 0 0.40349499 + 70 300 0.1937964 1.7061978 -0.84746071 2.5507657 1.703305 0 0.48190445 + 80 300 0.22181106 20.692093 -3.32971 30.93468 27.60497 0 6.0759456 + 90 300 0.25105524 48.999403 -2.1632167 73.254107 71.090891 0 14.578714 + 100 300 0.28086019 51.199785 -0.81127924 76.543678 75.732399 0 15.281693 +Loop time of 0.280875 on 4 procs for 100 steps with 300 atoms + +Performance: 153805.254 tau/day, 356.031 timesteps/s +99.7% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.6744e-05 | 6.0022e-05 | 6.4135e-05 | 0.0 | 0.02 +Kspace | 0.27651 | 0.27682 | 0.27714 | 0.0 | 98.56 +Neigh | 0.00079465 | 0.001082 | 0.0014107 | 0.8 | 0.39 +Comm | 0.0019372 | 0.002014 | 0.0020835 | 0.1 | 0.72 +Output | 0.00018406 | 0.00019914 | 0.00023413 | 0.0 | 0.07 +Modify | 0.0002749 | 0.00028563 | 0.00029325 | 0.0 | 0.10 +Other | | 0.0004173 | | | 0.15 + +Nlocal: 75 ave 81 max 69 min +Histogram: 1 0 0 0 1 1 0 0 0 1 +Nghost: 287 ave 296 max 278 min +Histogram: 1 0 1 0 0 0 0 1 0 1 +Neighs: 615.25 ave 964 max 286 min +Histogram: 1 1 0 0 0 0 0 1 0 1 + +Total # of neighbors = 2461 +Ave neighs/atom = 8.20333 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.8 b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.8 new file mode 100644 index 0000000000000000000000000000000000000000..a6f9228673e20c82e7f07a5e8f0c845938b84b05 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.cw.g++.p2nfft.8 @@ -0,0 +1,92 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task + +units lj +atom_style charge + +read_data data.cloud_wall + orthogonal box = (0 0 0) to (10 10 10) + 2 by 2 by 2 MPI processor grid + reading atoms ... + 300 atoms + +velocity all set 0.0 0.0 0.0 mom no + +pair_style zero 1.0 +pair_coeff * * + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 + +thermo_style custom step atoms cpu temp pe ke etotal ecoul press + +run_style verlet + +#dump simple all custom 1000 id x y z vx vy vz +#dump dmp all custom 1000 part.dump id mol x y z vx vy vz fx fy fz q mass +#dump dmpvtk all vtk 1000 vtk/part_*.vtk id mol x y z vx vy vz fx fy fz q mass +#dump_modify dmpvtk pad 7 + +thermo 10 +run 100 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.317 | 3.317 | 3.317 Mbytes +Step Atoms CPU Temp PotEng KinEng TotEng E_coul Press + 0 300 0 0 0.49683273 0 0.49683273 0 0.016561091 + 10 300 0.01961565 0.015479312 0.47369009 0.023141571 0.49683166 0 0.020417984 + 20 300 0.039346695 0.062386358 0.40356181 0.093267605 0.49682941 0 0.032105581 + 30 300 0.059037447 0.14331637 0.2825636 0.21425798 0.49682157 0 0.052270382 + 40 300 0.078732729 0.53041843 0.089505208 0.79297556 0.88248077 0 0.16157862 + 50 300 0.098586798 1.1948397 -0.083317439 1.7862853 1.7029679 0 0.35447982 + 60 300 0.11857247 1.3915614 -0.37745551 2.0803842 1.7029287 0 0.40349499 + 70 300 0.1385541 1.7061978 -0.84746071 2.5507657 1.703305 0 0.48190445 + 80 300 0.15850091 20.692093 -3.32971 30.93468 27.60497 0 6.0759456 + 90 300 0.17892075 48.999403 -2.1632167 73.254107 71.090891 0 14.578714 + 100 300 0.19964767 51.199785 -0.81127924 76.543678 75.732399 0 15.281693 +Loop time of 0.199664 on 8 procs for 100 steps with 300 atoms + +Performance: 216363.074 tau/day, 500.840 timesteps/s +99.4% CPU use with 8 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 4.5061e-05 | 4.7535e-05 | 5.3167e-05 | 0.0 | 0.02 +Kspace | 0.19551 | 0.19584 | 0.19611 | 0.0 | 98.08 +Neigh | 0.00041366 | 0.00060952 | 0.00082064 | 0.0 | 0.31 +Comm | 0.0021496 | 0.0022282 | 0.0024025 | 0.2 | 1.12 +Output | 0.0002346 | 0.00024167 | 0.00027847 | 0.0 | 0.12 +Modify | 0.00016665 | 0.00017652 | 0.0001924 | 0.0 | 0.09 +Other | | 0.0005245 | | | 0.26 + +Nlocal: 37.5 ave 42 max 33 min +Histogram: 2 1 0 1 0 0 1 0 1 2 +Nghost: 202.25 ave 212 max 194 min +Histogram: 1 0 2 1 0 2 0 1 0 1 +Neighs: 307.625 ave 505 max 129 min +Histogram: 3 0 0 1 1 0 0 0 1 2 + +Total # of neighbors = 2461 +Ave neighs/atom = 8.20333 +Neighbor list builds = 15 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.1 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.1 new file mode 100644 index 0000000000000000000000000000000000000000..13212ede0cfaa6bc5efaf7a9b73f8f1e040fcc33 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.1 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 1 by 1 MPI processor grid + 4096 atoms + Time spent = 0.000498772 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos ewald 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver ewald ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.813 | 5.813 | 5.813 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475938 0 0.50185691 11.99707 + 10 1.500011 -1.747529 0 0.50193816 11.997158 + 20 1.5000023 -1.7475152 0 0.50193898 11.997089 + 30 1.4999308 -1.747404 0 0.50194285 11.996517 + 40 1.4997722 -1.7471622 0 0.50194686 11.995248 + 50 1.4995835 -1.746878 0 0.50194808 11.993739 + 60 1.4996054 -1.7469114 0 0.50194749 11.993914 + 70 1.5004341 -1.7481558 0 0.50194592 12.000543 + 80 1.5033218 -1.7524875 0 0.50194458 12.023638 + 90 1.5108306 -1.7637462 0 0.50194636 12.083694 + 100 1.5292479 -1.7913449 0 0.50196695 12.230996 +Loop time of 1121.22 on 1 procs for 100 steps with 4096 atoms + +Performance: 38.530 tau/day, 0.089 timesteps/s +100.0% 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.0015197 | 0.0015197 | 0.0015197 | 0.0 | 0.00 +Kspace | 1121.2 | 1121.2 | 1121.2 | 0.0 |100.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.013699 | 0.013699 | 0.013699 | 0.0 | 0.00 +Output | 0.00038314 | 0.00038314 | 0.00038314 | 0.0 | 0.00 +Modify | 0.011126 | 0.011126 | 0.011126 | 0.0 | 0.00 +Other | | 0.00418 | | | 0.00 + +Nlocal: 4096 ave 4096 max 4096 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 9728 ave 9728 max 9728 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 524288 ave 524288 max 524288 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:18:57 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.16 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.16 new file mode 100644 index 0000000000000000000000000000000000000000..2fc46da3cddf681c5b766133312e62c1bddc07ab --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.16 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 2 by 2 by 4 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 2 by 2 by 4 MPI processor grid + 4096 atoms + Time spent = 0.000462294 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos ewald 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver ewald ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.501 | 3.501 | 3.501 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475938 0 0.50185691 -nan + 10 1.500011 -1.747529 0 0.50193816 -nan + 20 1.5000023 -1.7475152 0 0.50193898 -nan + 30 1.4999308 -1.747404 0 0.50194285 -nan + 40 1.4997722 -1.7471622 0 0.50194686 -nan + 50 1.4995835 -1.746878 0 0.50194808 -nan + 60 1.4996054 -1.7469114 0 0.50194749 -nan + 70 1.5004341 -1.7481558 0 0.50194592 -nan + 80 1.5033218 -1.7524875 0 0.50194458 -nan + 90 1.5108306 -1.7637462 0 0.50194636 -nan + 100 1.5292479 -1.7913449 0 0.50196695 -nan +Loop time of 80.2777 on 16 procs for 100 steps with 4096 atoms + +Performance: 538.132 tau/day, 1.246 timesteps/s +99.8% CPU use with 16 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0003705 | 0.00039807 | 0.00048542 | 0.0 | 0.00 +Kspace | 80.262 | 80.263 | 80.264 | 0.0 | 99.98 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.010191 | 0.011419 | 0.012416 | 0.6 | 0.01 +Output | 0.00028253 | 0.00033158 | 0.0004065 | 0.0 | 0.00 +Modify | 0.00082541 | 0.0008464 | 0.00087833 | 0.0 | 0.00 +Other | | 0.001511 | | | 0.00 + +Nlocal: 256 ave 256 max 256 min +Histogram: 16 0 0 0 0 0 0 0 0 0 +Nghost: 2816 ave 2816 max 2816 min +Histogram: 16 0 0 0 0 0 0 0 0 0 +Neighs: 32768 ave 32768 max 32768 min +Histogram: 16 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:01:22 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.2 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.2 new file mode 100644 index 0000000000000000000000000000000000000000..b6bf41de2496bdcc2251ef8822721044de5e4b3f --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.2 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 1 by 2 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 1 by 2 MPI processor grid + 4096 atoms + Time spent = 0.000344753 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos ewald 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver ewald ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.574 | 4.574 | 4.574 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475938 0 0.50185691 11.99707 + 10 1.500011 -1.747529 0 0.50193816 11.997158 + 20 1.5000023 -1.7475152 0 0.50193898 11.997089 + 30 1.4999308 -1.747404 0 0.50194285 11.996517 + 40 1.4997722 -1.7471622 0 0.50194686 11.995248 + 50 1.4995835 -1.746878 0 0.50194808 11.993739 + 60 1.4996054 -1.7469114 0 0.50194749 11.993914 + 70 1.5004341 -1.7481558 0 0.50194592 12.000543 + 80 1.5033218 -1.7524875 0 0.50194458 12.023638 + 90 1.5108306 -1.7637462 0 0.50194636 12.083694 + 100 1.5292479 -1.7913449 0 0.50196695 12.230996 +Loop time of 566.796 on 2 procs for 100 steps with 4096 atoms + +Performance: 76.218 tau/day, 0.176 timesteps/s +100.0% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0010231 | 0.0010413 | 0.0010595 | 0.1 | 0.00 +Kspace | 566.77 | 566.77 | 566.77 | 0.0 | 99.99 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.019707 | 0.01982 | 0.019932 | 0.1 | 0.00 +Output | 0.0002656 | 0.00029266 | 0.00031972 | 0.0 | 0.00 +Modify | 0.0055575 | 0.0055707 | 0.0055838 | 0.0 | 0.00 +Other | | 0.002497 | | | 0.00 + +Nlocal: 2048 ave 2048 max 2048 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 7168 ave 7168 max 7168 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Neighs: 262144 ave 262144 max 262144 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:09:38 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.4 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.4 new file mode 100644 index 0000000000000000000000000000000000000000..26c1953afa531d47621f96f56861abb802d3f4ca --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.4 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 2 by 2 MPI processor grid + 4096 atoms + Time spent = 0.000261068 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos ewald 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver ewald ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.008 | 4.008 | 4.008 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475938 0 0.50185691 -nan + 10 1.500011 -1.747529 0 0.50193816 -nan + 20 1.5000023 -1.7475152 0 0.50193898 -nan + 30 1.4999308 -1.747404 0 0.50194285 -nan + 40 1.4997722 -1.7471622 0 0.50194686 -nan + 50 1.4995835 -1.746878 0 0.50194808 -nan + 60 1.4996054 -1.7469114 0 0.50194749 -nan + 70 1.5004341 -1.7481558 0 0.50194592 -nan + 80 1.5033218 -1.7524875 0 0.50194458 -nan + 90 1.5108306 -1.7637462 0 0.50194636 -nan + 100 1.5292479 -1.7913449 0 0.50196695 -nan +Loop time of 295.996 on 4 procs for 100 steps with 4096 atoms + +Performance: 145.948 tau/day, 0.338 timesteps/s +99.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00071096 | 0.00071985 | 0.00072813 | 0.0 | 0.00 +Kspace | 295.98 | 295.98 | 295.98 | 0.0 | 99.99 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.013666 | 0.013736 | 0.013795 | 0.0 | 0.00 +Output | 0.00023484 | 0.00025135 | 0.00029254 | 0.0 | 0.00 +Modify | 0.0029099 | 0.002973 | 0.0030224 | 0.1 | 0.00 +Other | | 0.001821 | | | 0.00 + +Nlocal: 1024 ave 1024 max 1024 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 5120 ave 5120 max 5120 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 131072 ave 131072 max 131072 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:05:02 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.8 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.8 new file mode 100644 index 0000000000000000000000000000000000000000..4a1a5b91edc5f25bfa9ffbd4c7983998da4ecd7a --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.ewald.8 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 2 by 2 by 2 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 2 by 2 by 2 MPI processor grid + 4096 atoms + Time spent = 0.000232935 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos ewald 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver ewald ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.508 | 3.508 | 3.508 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475938 0 0.50185691 -nan + 10 1.500011 -1.747529 0 0.50193816 -nan + 20 1.5000023 -1.7475152 0 0.50193898 -nan + 30 1.4999308 -1.747404 0 0.50194285 -nan + 40 1.4997722 -1.7471622 0 0.50194686 -nan + 50 1.4995835 -1.746878 0 0.50194808 -nan + 60 1.4996054 -1.7469114 0 0.50194749 -nan + 70 1.5004341 -1.7481558 0 0.50194592 -nan + 80 1.5033218 -1.7524875 0 0.50194458 -nan + 90 1.5108306 -1.7637462 0 0.50194636 -nan + 100 1.5292479 -1.7913449 0 0.50196695 -nan +Loop time of 154.44 on 8 procs for 100 steps with 4096 atoms + +Performance: 279.720 tau/day, 0.647 timesteps/s +99.9% CPU use with 8 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00049257 | 0.00051311 | 0.00059295 | 0.0 | 0.00 +Kspace | 154.42 | 154.42 | 154.42 | 0.0 | 99.99 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.012076 | 0.013177 | 0.014308 | 0.8 | 0.01 +Output | 0.00025177 | 0.00028065 | 0.00030136 | 0.0 | 0.00 +Modify | 0.0015776 | 0.0017182 | 0.0018268 | 0.2 | 0.00 +Other | | 0.001309 | | | 0.00 + +Nlocal: 512 ave 512 max 512 min +Histogram: 8 0 0 0 0 0 0 0 0 0 +Nghost: 3584 ave 3584 max 3584 min +Histogram: 8 0 0 0 0 0 0 0 0 0 +Neighs: 65536 ave 65536 max 65536 min +Histogram: 8 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:02:38 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.1 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.1 new file mode 100644 index 0000000000000000000000000000000000000000..598585ae95e9600495772324f91a50324e879146 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.1 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 1 by 1 MPI processor grid + 4096 atoms + Time spent = 0.000518799 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos fmm 0.001 +kspace_modify scafacos tolerance energy + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.813 | 5.813 | 5.813 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475646 0 0.50188608 10.44368 + 10 1.5000016 -1.7475671 0 0.50188602 10.44369 + 20 1.4999827 -1.7475388 0 0.50188592 10.443564 + 30 1.4999016 -1.7474173 0 0.5018858 10.443023 + 40 1.4997356 -1.7471685 0 0.50188572 10.441917 + 50 1.4995414 -1.7468771 0 0.5018858 10.440623 + 60 1.4995587 -1.7469027 0 0.50188622 10.440739 + 70 1.5003837 -1.7481389 0 0.50188727 10.446238 + 80 1.5032684 -1.7524625 0 0.50188958 10.465466 + 90 1.5107749 -1.763714 0 0.50189507 10.515502 + 100 1.52919 -1.791306 0 0.50191895 10.638261 +Loop time of 34.7058 on 1 procs for 100 steps with 4096 atoms + +Performance: 1244.749 tau/day, 2.881 timesteps/s +100.0% 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.0015228 | 0.0015228 | 0.0015228 | 0.0 | 0.00 +Kspace | 34.675 | 34.675 | 34.675 | 0.0 | 99.91 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.013741 | 0.013741 | 0.013741 | 0.0 | 0.04 +Output | 0.00041246 | 0.00041246 | 0.00041246 | 0.0 | 0.00 +Modify | 0.01107 | 0.01107 | 0.01107 | 0.0 | 0.03 +Other | | 0.004232 | | | 0.01 + +Nlocal: 4096 ave 4096 max 4096 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 9728 ave 9728 max 9728 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 524288 ave 524288 max 524288 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:35 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.16 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.16 new file mode 100644 index 0000000000000000000000000000000000000000..4bd0c3d4f3e55c06692be758ece1b3b09be2c07a --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.16 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 2 by 2 by 4 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 2 by 2 by 4 MPI processor grid + 4096 atoms + Time spent = 0.000400543 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos fmm 0.001 +kspace_modify scafacos tolerance energy + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.501 | 3.501 | 3.501 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475646 0 0.50188608 10.44368 + 10 1.5000016 -1.7475671 0 0.50188602 10.44369 + 20 1.4999827 -1.7475388 0 0.50188592 10.443564 + 30 1.4999016 -1.7474173 0 0.5018858 10.443023 + 40 1.4997356 -1.7471685 0 0.50188572 10.441917 + 50 1.4995414 -1.7468771 0 0.5018858 10.440623 + 60 1.4995587 -1.7469027 0 0.50188622 10.440739 + 70 1.5003837 -1.7481389 0 0.50188727 10.446238 + 80 1.5032684 -1.7524625 0 0.50188958 10.465466 + 90 1.5107749 -1.763714 0 0.50189507 10.515502 + 100 1.52919 -1.791306 0 0.50191895 10.638261 +Loop time of 4.23774 on 16 procs for 100 steps with 4096 atoms + +Performance: 10194.102 tau/day, 23.597 timesteps/s +99.6% CPU use with 16 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00038028 | 0.00040729 | 0.00046206 | 0.0 | 0.01 +Kspace | 4.2206 | 4.2211 | 4.2216 | 0.0 | 99.61 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.011439 | 0.012491 | 0.013172 | 0.4 | 0.29 +Output | 0.00042915 | 0.000489 | 0.00061274 | 0.0 | 0.01 +Modify | 0.00093102 | 0.00099151 | 0.0010982 | 0.0 | 0.02 +Other | | 0.002255 | | | 0.05 + +Nlocal: 256 ave 256 max 256 min +Histogram: 16 0 0 0 0 0 0 0 0 0 +Nghost: 2816 ave 2816 max 2816 min +Histogram: 16 0 0 0 0 0 0 0 0 0 +Neighs: 32768 ave 32768 max 32768 min +Histogram: 16 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:06 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.2 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.2 new file mode 100644 index 0000000000000000000000000000000000000000..50dcc99393404803ce38e4ec887fc22d31b04867 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.2 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 1 by 2 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 1 by 2 MPI processor grid + 4096 atoms + Time spent = 0.0003407 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos fmm 0.001 +kspace_modify scafacos tolerance energy + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.574 | 4.574 | 4.574 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475646 0 0.50188608 10.44368 + 10 1.5000016 -1.7475671 0 0.50188602 10.44369 + 20 1.4999827 -1.7475388 0 0.50188592 10.443564 + 30 1.4999016 -1.7474173 0 0.5018858 10.443023 + 40 1.4997356 -1.7471685 0 0.50188572 10.441917 + 50 1.4995414 -1.7468771 0 0.5018858 10.440623 + 60 1.4995587 -1.7469027 0 0.50188622 10.440739 + 70 1.5003837 -1.7481389 0 0.50188727 10.446238 + 80 1.5032684 -1.7524625 0 0.50188958 10.465466 + 90 1.5107749 -1.763714 0 0.50189507 10.515502 + 100 1.52919 -1.791306 0 0.50191895 10.638261 +Loop time of 17.9401 on 2 procs for 100 steps with 4096 atoms + +Performance: 2408.014 tau/day, 5.574 timesteps/s +99.9% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0010042 | 0.0010235 | 0.0010428 | 0.1 | 0.01 +Kspace | 17.912 | 17.912 | 17.912 | 0.0 | 99.84 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.018252 | 0.018528 | 0.018804 | 0.2 | 0.10 +Output | 0.00034094 | 0.00035989 | 0.00037885 | 0.0 | 0.00 +Modify | 0.0055602 | 0.0056567 | 0.0057533 | 0.1 | 0.03 +Other | | 0.002716 | | | 0.02 + +Nlocal: 2048 ave 2048 max 2048 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 7168 ave 7168 max 7168 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Neighs: 262144 ave 262144 max 262144 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:19 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.4 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.4 new file mode 100644 index 0000000000000000000000000000000000000000..27fdfcedcb08c6fcaa51634ca893c20c990371a3 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.4 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 2 by 2 MPI processor grid + 4096 atoms + Time spent = 0.000270367 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos fmm 0.001 +kspace_modify scafacos tolerance energy + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.008 | 4.008 | 4.008 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475646 0 0.50188608 10.44368 + 10 1.5000016 -1.7475671 0 0.50188602 10.44369 + 20 1.4999827 -1.7475388 0 0.50188592 10.443564 + 30 1.4999016 -1.7474173 0 0.5018858 10.443023 + 40 1.4997356 -1.7471685 0 0.50188572 10.441917 + 50 1.4995414 -1.7468771 0 0.5018858 10.440623 + 60 1.4995587 -1.7469027 0 0.50188622 10.440739 + 70 1.5003837 -1.7481389 0 0.50188727 10.446238 + 80 1.5032684 -1.7524625 0 0.50188958 10.465466 + 90 1.5107749 -1.763714 0 0.50189507 10.515502 + 100 1.52919 -1.791306 0 0.50191895 10.638261 +Loop time of 10.0781 on 4 procs for 100 steps with 4096 atoms + +Performance: 4286.533 tau/day, 9.923 timesteps/s +99.9% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00071096 | 0.00073177 | 0.00075269 | 0.0 | 0.01 +Kspace | 10.056 | 10.057 | 10.057 | 0.0 | 99.79 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.01492 | 0.015036 | 0.015207 | 0.1 | 0.15 +Output | 0.00036311 | 0.00039428 | 0.00046515 | 0.0 | 0.00 +Modify | 0.002944 | 0.0030704 | 0.0033708 | 0.3 | 0.03 +Other | | 0.002214 | | | 0.02 + +Nlocal: 1024 ave 1024 max 1024 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 5120 ave 5120 max 5120 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 131072 ave 131072 max 131072 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:11 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.8 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.8 new file mode 100644 index 0000000000000000000000000000000000000000..02a5528c5939e5584c7aede9fe287d8ff3aef542 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.fmm.8 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 2 by 2 by 2 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 2 by 2 by 2 MPI processor grid + 4096 atoms + Time spent = 0.000236988 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos fmm 0.001 +kspace_modify scafacos tolerance energy + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.508 | 3.508 | 3.508 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7475646 0 0.50188608 10.44368 + 10 1.5000016 -1.7475671 0 0.50188602 10.44369 + 20 1.4999827 -1.7475388 0 0.50188592 10.443564 + 30 1.4999016 -1.7474173 0 0.5018858 10.443023 + 40 1.4997356 -1.7471685 0 0.50188572 10.441917 + 50 1.4995414 -1.7468771 0 0.5018858 10.440623 + 60 1.4995587 -1.7469027 0 0.50188622 10.440739 + 70 1.5003837 -1.7481389 0 0.50188727 10.446238 + 80 1.5032684 -1.7524625 0 0.50188958 10.465466 + 90 1.5107749 -1.763714 0 0.50189507 10.515502 + 100 1.52919 -1.791306 0 0.50191895 10.638261 +Loop time of 5.96037 on 8 procs for 100 steps with 4096 atoms + +Performance: 7247.876 tau/day, 16.777 timesteps/s +99.8% CPU use with 8 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00049591 | 0.0005368 | 0.00056005 | 0.0 | 0.01 +Kspace | 5.94 | 5.941 | 5.9419 | 0.0 | 99.68 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.013702 | 0.014631 | 0.015768 | 0.6 | 0.25 +Output | 0.00044751 | 0.00048846 | 0.00058961 | 0.0 | 0.01 +Modify | 0.0016675 | 0.0017205 | 0.0017893 | 0.1 | 0.03 +Other | | 0.001971 | | | 0.03 + +Nlocal: 512 ave 512 max 512 min +Histogram: 8 0 0 0 0 0 0 0 0 0 +Nghost: 3584 ave 3584 max 3584 min +Histogram: 8 0 0 0 0 0 0 0 0 0 +Neighs: 65536 ave 65536 max 65536 min +Histogram: 8 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:07 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.1 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.1 new file mode 100644 index 0000000000000000000000000000000000000000..1876a0e52bec5cd74eb9a4f1612720617f1cf37c --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.1 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 1 by 1 MPI processor grid + 4096 atoms + Time spent = 0.00049448 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.813 | 5.813 | 5.813 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7477245 0 0.50172614 10.443537 + 10 1.5000176 -1.7475898 0 0.50188725 10.443798 + 20 1.5000161 -1.7475262 0 0.50194874 10.443843 + 30 1.4999486 -1.7474019 0 0.50197176 10.443413 + 40 1.4997889 -1.7471525 0 0.50198161 10.442357 + 50 1.4995945 -1.7468614 0 0.50198122 10.441061 + 60 1.499609 -1.7468813 0 0.50198309 10.44116 + 70 1.5004314 -1.7481179 0 0.50197962 10.446638 + 80 1.5033149 -1.7524495 0 0.50197233 10.46585 + 90 1.5108219 -1.7637095 0 0.50197005 10.515883 + 100 1.529239 -1.7913105 0 0.501988 10.638649 +Loop time of 18.1113 on 1 procs for 100 steps with 4096 atoms + +Performance: 2385.257 tau/day, 5.521 timesteps/s +100.0% 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.0014985 | 0.0014985 | 0.0014985 | 0.0 | 0.01 +Kspace | 18.079 | 18.079 | 18.079 | 0.0 | 99.82 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.014229 | 0.014229 | 0.014229 | 0.0 | 0.08 +Output | 0.0004642 | 0.0004642 | 0.0004642 | 0.0 | 0.00 +Modify | 0.011227 | 0.011227 | 0.011227 | 0.0 | 0.06 +Other | | 0.004455 | | | 0.02 + +Nlocal: 4096 ave 4096 max 4096 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 9728 ave 9728 max 9728 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 524288 ave 524288 max 524288 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:21 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.16 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.16 new file mode 100644 index 0000000000000000000000000000000000000000..6e6e8f6e948b9b0ebbba2b81b0c887ceec2e56ce --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.16 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 2 by 2 by 4 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 2 by 2 by 4 MPI processor grid + 4096 atoms + Time spent = 0.000361443 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.501 | 3.501 | 3.501 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7477245 0 0.50172614 10.443537 + 10 1.5000176 -1.7475898 0 0.50188725 10.443798 + 20 1.5000161 -1.7475262 0 0.50194874 10.443843 + 30 1.4999486 -1.7474019 0 0.50197176 10.443413 + 40 1.4997889 -1.7471525 0 0.50198161 10.442357 + 50 1.4995945 -1.7468614 0 0.50198122 10.441061 + 60 1.499609 -1.7468813 0 0.50198309 10.44116 + 70 1.5004314 -1.7481179 0 0.50197962 10.446638 + 80 1.5033149 -1.7524495 0 0.50197233 10.46585 + 90 1.5108219 -1.7637095 0 0.50197005 10.515883 + 100 1.529239 -1.7913105 0 0.501988 10.638649 +Loop time of 1.56685 on 16 procs for 100 steps with 4096 atoms + +Performance: 27571.239 tau/day, 63.822 timesteps/s +99.8% CPU use with 16 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00036407 | 0.00040755 | 0.00047517 | 0.0 | 0.03 +Kspace | 1.5521 | 1.553 | 1.5536 | 0.0 | 99.12 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.009537 | 0.010175 | 0.011894 | 0.6 | 0.65 +Output | 0.000319 | 0.00039139 | 0.00052881 | 0.0 | 0.02 +Modify | 0.00086999 | 0.00097834 | 0.0010362 | 0.0 | 0.06 +Other | | 0.001859 | | | 0.12 + +Nlocal: 256 ave 256 max 256 min +Histogram: 16 0 0 0 0 0 0 0 0 0 +Nghost: 2816 ave 2816 max 2816 min +Histogram: 16 0 0 0 0 0 0 0 0 0 +Neighs: 32768 ave 32768 max 32768 min +Histogram: 16 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.2 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.2 new file mode 100644 index 0000000000000000000000000000000000000000..72a53c48ffa986dcb7bc6ff42006218391d9f186 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.2 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 1 by 2 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 1 by 2 MPI processor grid + 4096 atoms + Time spent = 0.0003438 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.574 | 4.574 | 4.574 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7477245 0 0.50172614 10.443537 + 10 1.5000176 -1.7475898 0 0.50188725 10.443798 + 20 1.5000161 -1.7475262 0 0.50194874 10.443843 + 30 1.4999486 -1.7474019 0 0.50197176 10.443413 + 40 1.4997889 -1.7471525 0 0.50198161 10.442357 + 50 1.4995945 -1.7468614 0 0.50198122 10.441061 + 60 1.499609 -1.7468813 0 0.50198309 10.44116 + 70 1.5004314 -1.7481179 0 0.50197962 10.446638 + 80 1.5033149 -1.7524495 0 0.50197233 10.46585 + 90 1.5108219 -1.7637095 0 0.50197005 10.515883 + 100 1.529239 -1.7913105 0 0.501988 10.638649 +Loop time of 9.38943 on 2 procs for 100 steps with 4096 atoms + +Performance: 4600.920 tau/day, 10.650 timesteps/s +99.9% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0010064 | 0.0010065 | 0.0010066 | 0.0 | 0.01 +Kspace | 9.3602 | 9.3603 | 9.3604 | 0.0 | 99.69 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.019444 | 0.01968 | 0.019916 | 0.2 | 0.21 +Output | 0.00033355 | 0.00035357 | 0.0003736 | 0.0 | 0.00 +Modify | 0.0055819 | 0.0056176 | 0.0056534 | 0.0 | 0.06 +Other | | 0.002495 | | | 0.03 + +Nlocal: 2048 ave 2048 max 2048 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 7168 ave 7168 max 7168 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Neighs: 262144 ave 262144 max 262144 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:11 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.4 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.4 new file mode 100644 index 0000000000000000000000000000000000000000..bf4494df8b246525cbf33ebda00189b915c36df1 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.4 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 1 by 2 by 2 MPI processor grid + 4096 atoms + Time spent = 0.000260592 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.008 | 4.008 | 4.008 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7477245 0 0.50172614 10.443537 + 10 1.5000176 -1.7475898 0 0.50188725 10.443798 + 20 1.5000161 -1.7475262 0 0.50194874 10.443843 + 30 1.4999486 -1.7474019 0 0.50197176 10.443413 + 40 1.4997889 -1.7471525 0 0.50198161 10.442357 + 50 1.4995945 -1.7468614 0 0.50198122 10.441061 + 60 1.499609 -1.7468813 0 0.50198309 10.44116 + 70 1.5004314 -1.7481179 0 0.50197962 10.446638 + 80 1.5033149 -1.7524495 0 0.50197233 10.46585 + 90 1.5108219 -1.7637095 0 0.50197005 10.515883 + 100 1.529239 -1.7913105 0 0.501988 10.638649 +Loop time of 5.09997 on 4 procs for 100 steps with 4096 atoms + +Performance: 8470.643 tau/day, 19.608 timesteps/s +99.8% 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.00069928 | 0.00071001 | 0.00073647 | 0.0 | 0.01 +Kspace | 5.0795 | 5.0796 | 5.0797 | 0.0 | 99.60 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.014101 | 0.014216 | 0.014331 | 0.1 | 0.28 +Output | 0.00030541 | 0.00033581 | 0.00039625 | 0.0 | 0.01 +Modify | 0.0030217 | 0.0030621 | 0.0030868 | 0.0 | 0.06 +Other | | 0.002036 | | | 0.04 + +Nlocal: 1024 ave 1024 max 1024 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 5120 ave 5120 max 5120 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 131072 ave 131072 max 131072 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:05 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.8 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.8 new file mode 100644 index 0000000000000000000000000000000000000000..b5e889dfc19cf46be5f3bfad3a2b0cc82f6eb070 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p2nfft.8 @@ -0,0 +1,102 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.NaCl + orthogonal box = (0 0 0) to (1 1 1) + 2 by 2 by 2 MPI processor grid + reading atoms ... + 8 atoms + +replicate 8 8 8 + orthogonal box = (0 0 0) to (8 8 8) + 2 by 2 by 2 MPI processor grid + 4096 atoms + Time spent = 0.000324488 secs + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance field + +timestep 0.005 +thermo 10 + +run 100 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.508 | 3.508 | 3.508 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -1.7477245 0 0.50172614 10.443537 + 10 1.5000176 -1.7475898 0 0.50188725 10.443798 + 20 1.5000161 -1.7475262 0 0.50194874 10.443843 + 30 1.4999486 -1.7474019 0 0.50197176 10.443413 + 40 1.4997889 -1.7471525 0 0.50198161 10.442357 + 50 1.4995945 -1.7468614 0 0.50198122 10.441061 + 60 1.499609 -1.7468813 0 0.50198309 10.44116 + 70 1.5004314 -1.7481179 0 0.50197962 10.446638 + 80 1.5033149 -1.7524495 0 0.50197233 10.46585 + 90 1.5108219 -1.7637095 0 0.50197005 10.515883 + 100 1.529239 -1.7913105 0 0.501988 10.638649 +Loop time of 2.88506 on 8 procs for 100 steps with 4096 atoms + +Performance: 14973.700 tau/day, 34.661 timesteps/s +99.6% CPU use with 8 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.000489 | 0.00051507 | 0.00052857 | 0.0 | 0.02 +Kspace | 2.8657 | 2.866 | 2.8664 | 0.0 | 99.34 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.014354 | 0.014851 | 0.015097 | 0.2 | 0.51 +Output | 0.00037169 | 0.00042769 | 0.00054169 | 0.0 | 0.01 +Modify | 0.0015774 | 0.0016578 | 0.0018044 | 0.2 | 0.06 +Other | | 0.001645 | | | 0.06 + +Nlocal: 512 ave 512 max 512 min +Histogram: 8 0 0 0 0 0 0 0 0 0 +Nghost: 3584 ave 3584 max 3584 min +Histogram: 8 0 0 0 0 0 0 0 0 0 +Neighs: 65536 ave 65536 max 65536 min +Histogram: 8 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 524288 +Ave neighs/atom = 128 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:03 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.g++.p3m.2 b/examples/USER/scafacos/log.08Aug18.scafacos.g++.p3m.2 new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.1 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.1 new file mode 100644 index 0000000000000000000000000000000000000000..b0a47e4f9888456dc0dce18621ef09e9dbf4d606 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.1 @@ -0,0 +1,105 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_shphere + orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos direct 0.001 + +timestep 0.005 +thermo 1 +run 20 +Setting up ScaFaCoS with solver direct ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 102 102 102 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 10.3 | 10.3 | 10.3 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417787 0 1.6235721 0.0015678854 + 1 18.780041 -10.770002 0 17.371889 0.016718957 + 2 65.289192 -11.084705 0 86.751149 0.060353634 + 3 121.92987 -7.0625759 0 175.64933 0.11404974 + 4 185.78164 -5.8777512 0 272.51604 0.17462195 + 5 286.36222 -4.382053 0 424.73173 0.26918926 + 6 481.42206 -4.3095567 0 717.1014 0.45274088 + 7 488.59167 -3.8685194 0 728.2861 0.45956866 + 8 497.85287 -3.0417966 0 742.99073 0.46838116 + 9 499.61615 -3.419003 0 745.2558 0.46983345 + 10 502.63684 -2.8360961 0 750.36521 0.47280809 + 11 504.4846 -2.7628105 0 753.20736 0.47462793 + 12 506.54485 -2.8460356 0 756.21142 0.47651441 + 13 508.27211 -2.730935 0 758.91482 0.47813752 + 14 510.57045 -2.6094877 0 762.48033 0.48031431 + 15 513.14798 -2.7150827 0 766.23717 0.48275229 + 16 515.78124 -2.3961811 0 770.50201 0.48526333 + 17 515.70265 -2.2982683 0 770.48215 0.48526617 + 18 515.7081 -2.1515983 0 770.63699 0.48530393 + 19 515.74906 -2.0581436 0 770.79182 0.48530977 + 20 515.70883 -1.8922577 0 770.89742 0.48527105 +Loop time of 0.465839 on 1 procs for 20 steps with 1000 atoms + +Performance: 18547.165 tau/day, 42.933 timesteps/s +99.9% 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.00021982 | 0.00021982 | 0.00021982 | 0.0 | 0.05 +Kspace | 0.3218 | 0.3218 | 0.3218 | 0.0 | 69.08 +Neigh | 0.14249 | 0.14249 | 0.14249 | 0.0 | 30.59 +Comm | 0.00014853 | 0.00014853 | 0.00014853 | 0.0 | 0.03 +Output | 0.00026131 | 0.00026131 | 0.00026131 | 0.0 | 0.06 +Modify | 0.00055146 | 0.00055146 | 0.00055146 | 0.0 | 0.12 +Other | | 0.0003715 | | | 0.08 + +Nlocal: 1000 ave 1000 max 1000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 247817 ave 247817 max 247817 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 247817 +Ave neighs/atom = 247.817 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.2 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.2 new file mode 100644 index 0000000000000000000000000000000000000000..1ffab0ca6a479e2e28dddb75de429143c447a2a0 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.2 @@ -0,0 +1,105 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_shphere + orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) + 1 by 1 by 2 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos direct 0.001 + +timestep 0.005 +thermo 1 +run 20 +Setting up ScaFaCoS with solver direct ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 102 102 102 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.48 | 6.861 | 7.243 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417787 0 1.6235721 0.0015678854 + 1 18.780041 -10.770002 0 17.371889 0.016718957 + 2 65.289192 -11.084705 0 86.751149 0.060353634 + 3 121.92987 -7.0625759 0 175.64933 0.11404974 + 4 185.78164 -5.8777512 0 272.51604 0.17462195 + 5 286.36222 -4.382053 0 424.73173 0.26918926 + 6 481.42206 -4.3095567 0 717.1014 0.45274088 + 7 488.59167 -3.8685194 0 728.2861 0.45956866 + 8 497.85287 -3.0417966 0 742.99073 0.46838116 + 9 499.61615 -3.419003 0 745.2558 0.46983345 + 10 502.63684 -2.8360961 0 750.36521 0.47280809 + 11 504.4846 -2.7628105 0 753.20736 0.47462793 + 12 506.54485 -2.8460356 0 756.21142 0.47651441 + 13 508.27211 -2.730935 0 758.91482 0.47813752 + 14 510.57045 -2.6094877 0 762.48033 0.48031431 + 15 513.14798 -2.7150827 0 766.23717 0.48275229 + 16 515.78124 -2.3961811 0 770.50201 0.48526333 + 17 515.70265 -2.2982683 0 770.48215 0.48526617 + 18 515.7081 -2.1515983 0 770.63699 0.48530393 + 19 515.74906 -2.0581436 0 770.79182 0.48530977 + 20 515.70883 -1.8922577 0 770.89742 0.48527105 +Loop time of 0.284007 on 2 procs for 20 steps with 1000 atoms + +Performance: 30421.778 tau/day, 70.421 timesteps/s +99.1% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00022578 | 0.00022626 | 0.00022674 | 0.0 | 0.08 +Kspace | 0.18253 | 0.20503 | 0.22752 | 5.0 | 72.19 +Neigh | 0.05363 | 0.076239 | 0.098848 | 8.2 | 26.84 +Comm | 0.0014737 | 0.0016443 | 0.0018148 | 0.4 | 0.58 +Output | 0.000247 | 0.00032353 | 0.00040007 | 0.0 | 0.11 +Modify | 0.00029159 | 0.00029731 | 0.00030303 | 0.0 | 0.10 +Other | | 0.0002506 | | | 0.09 + +Nlocal: 500 ave 516 max 484 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 456.5 ave 475 max 438 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 123908 ave 172139 max 75678 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 247817 +Ave neighs/atom = 247.817 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.4 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.4 new file mode 100644 index 0000000000000000000000000000000000000000..1235c0a3cd2759e2dbc55047ddccc92f5be6d721 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.4 @@ -0,0 +1,105 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_shphere + orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos direct 0.001 + +timestep 0.005 +thermo 1 +run 20 +Setting up ScaFaCoS with solver direct ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 102 102 102 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.837 | 5.123 | 5.6 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417787 0 1.6235721 0.0015678854 + 1 18.780041 -10.770002 0 17.371889 0.016718957 + 2 65.289192 -11.084705 0 86.751149 0.060353634 + 3 121.92987 -7.0625759 0 175.64933 0.11404974 + 4 185.78164 -5.8777512 0 272.51604 0.17462195 + 5 286.36222 -4.382053 0 424.73173 0.26918926 + 6 481.42206 -4.3095567 0 717.1014 0.45274088 + 7 488.59167 -3.8685194 0 728.2861 0.45956866 + 8 497.85287 -3.0417966 0 742.99073 0.46838116 + 9 499.61615 -3.419003 0 745.2558 0.46983345 + 10 502.63684 -2.8360961 0 750.36521 0.47280809 + 11 504.4846 -2.7628105 0 753.20736 0.47462793 + 12 506.54485 -2.8460356 0 756.21142 0.47651441 + 13 508.27211 -2.730935 0 758.91482 0.47813752 + 14 510.57045 -2.6094877 0 762.48033 0.48031431 + 15 513.14798 -2.7150827 0 766.23717 0.48275229 + 16 515.78124 -2.3961811 0 770.50201 0.48526333 + 17 515.70265 -2.2982683 0 770.48215 0.48526617 + 18 515.7081 -2.1515983 0 770.63699 0.48530393 + 19 515.74906 -2.0581436 0 770.79182 0.48530977 + 20 515.70883 -1.8922577 0 770.89742 0.48527105 +Loop time of 0.161335 on 4 procs for 20 steps with 1000 atoms + +Performance: 53553.228 tau/day, 123.966 timesteps/s +99.5% 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.00022721 | 0.00023353 | 0.000247 | 0.0 | 0.14 +Kspace | 0.10295 | 0.11808 | 0.13377 | 3.5 | 73.19 +Neigh | 0.023849 | 0.039717 | 0.055031 | 6.1 | 24.62 +Comm | 0.0023148 | 0.0025774 | 0.0028391 | 0.4 | 1.60 +Output | 0.00029063 | 0.00038403 | 0.00050664 | 0.0 | 0.24 +Modify | 0.00015664 | 0.00015944 | 0.00016165 | 0.0 | 0.10 +Other | | 0.0001805 | | | 0.11 + +Nlocal: 250 ave 259 max 238 min +Histogram: 1 0 0 1 0 0 0 0 0 2 +Nghost: 672.25 ave 683 max 663 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Neighs: 61954.2 ave 97157 max 25016 min +Histogram: 1 0 0 1 0 0 1 0 0 1 + +Total # of neighbors = 247817 +Ave neighs/atom = 247.817 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.8 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.8 new file mode 100644 index 0000000000000000000000000000000000000000..e72ade73b57a65586ba69fcab0cb46a7afa034de --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.direct.8 @@ -0,0 +1,105 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_shphere + orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) + 2 by 2 by 2 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos direct 0.001 + +timestep 0.005 +thermo 1 +run 20 +Setting up ScaFaCoS with solver direct ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 102 102 102 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.164 | 4.26 | 4.546 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417787 0 1.6235721 0.0015678854 + 1 18.780041 -10.770002 0 17.371889 0.016718957 + 2 65.289192 -11.084705 0 86.751149 0.060353634 + 3 121.92987 -7.0625759 0 175.64933 0.11404974 + 4 185.78164 -5.8777512 0 272.51604 0.17462195 + 5 286.36222 -4.382053 0 424.73173 0.26918926 + 6 481.42206 -4.3095567 0 717.1014 0.45274088 + 7 488.59167 -3.8685194 0 728.2861 0.45956866 + 8 497.85287 -3.0417966 0 742.99073 0.46838116 + 9 499.61615 -3.419003 0 745.2558 0.46983345 + 10 502.63684 -2.8360961 0 750.36521 0.47280809 + 11 504.4846 -2.7628105 0 753.20736 0.47462793 + 12 506.54485 -2.8460356 0 756.21142 0.47651441 + 13 508.27211 -2.730935 0 758.91482 0.47813752 + 14 510.57045 -2.6094877 0 762.48033 0.48031431 + 15 513.14798 -2.7150827 0 766.23717 0.48275229 + 16 515.78124 -2.3961811 0 770.50201 0.48526333 + 17 515.70265 -2.2982683 0 770.48215 0.48526617 + 18 515.7081 -2.1515983 0 770.63699 0.48530393 + 19 515.74906 -2.0581436 0 770.79182 0.48530977 + 20 515.70883 -1.8922577 0 770.89742 0.48527105 +Loop time of 0.0883947 on 8 procs for 20 steps with 1000 atoms + +Performance: 97743.448 tau/day, 226.258 timesteps/s +99.2% CPU use with 8 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0002284 | 0.00024167 | 0.00029922 | 0.0 | 0.27 +Kspace | 0.055725 | 0.063153 | 0.071883 | 2.4 | 71.44 +Neigh | 0.012251 | 0.021348 | 0.029026 | 4.3 | 24.15 +Comm | 0.0025573 | 0.0029825 | 0.0034359 | 0.5 | 3.37 +Output | 0.00034451 | 0.00044149 | 0.00057721 | 0.0 | 0.50 +Modify | 7.8917e-05 | 8.437e-05 | 8.9407e-05 | 0.0 | 0.10 +Other | | 0.0001439 | | | 0.16 + +Nlocal: 125 ave 133 max 113 min +Histogram: 2 0 0 0 0 1 1 0 2 2 +Nghost: 773.625 ave 788 max 764 min +Histogram: 1 1 2 1 1 0 0 0 1 1 +Neighs: 30977.1 ave 50690 max 10447 min +Histogram: 1 1 1 0 1 1 0 0 2 1 + +Total # of neighbors = 247817 +Ave neighs/atom = 247.817 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.1 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.1 new file mode 100644 index 0000000000000000000000000000000000000000..4bef247e26616ae478efd12f49d8977e427a8105 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.1 @@ -0,0 +1,109 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_shphere + orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos fmm 0.001 +kspace_modify scafacos tolerance energy_rel +kspace_modify scafacos fmm_tuning 1 +ScaFaCoS setting fmm inhomogen tuning ... + +timestep 0.005 +thermo 1 + +run 20 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 102 102 102 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 10.3 | 10.3 | 10.3 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417141 0 1.6235786 0.0015676581 + 1 18.780412 -10.770009 0 17.372438 0.016719188 + 2 65.294131 -11.084501 0 86.758754 0.06035827 + 3 121.92555 -7.0612033 0 175.64423 0.1140457 + 4 185.71165 -5.8781334 0 272.41077 0.17455524 + 5 286.28339 -4.3800108 0 424.61565 0.26911306 + 6 481.28097 -4.3052012 0 716.89433 0.45262045 + 7 487.26022 -3.8672741 0 726.29216 0.45830216 + 8 493.65478 -3.0242687 0 736.71742 0.46443761 + 9 495.66203 -3.4336343 0 739.31592 0.46613014 + 10 498.41831 -2.8837072 0 743.99613 0.46887706 + 11 499.20944 -2.7724783 0 745.29287 0.46966875 + 12 500.97345 -2.8281484 0 747.88057 0.47126462 + 13 507.46412 -2.7752775 0 757.65971 0.47728761 + 14 525.35729 -2.5749814 0 784.67292 0.49422171 + 15 563.9578 -2.9982381 0 842.09253 0.53043696 + 16 645.47602 -2.5519203 0 964.69389 0.60730795 + 17 647.09276 -2.2568468 0 967.41166 0.60891914 + 18 647.12596 -2.2791003 0 967.43915 0.60900309 + 19 647.24862 -2.2495226 0 967.65253 0.60908339 + 20 647.51175 -2.0239179 0 968.27244 0.60932598 +Loop time of 0.797289 on 1 procs for 20 steps with 1000 atoms + +Performance: 10836.721 tau/day, 25.085 timesteps/s +100.0% 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.00022364 | 0.00022364 | 0.00022364 | 0.0 | 0.03 +Kspace | 0.6524 | 0.6524 | 0.6524 | 0.0 | 81.83 +Neigh | 0.14312 | 0.14312 | 0.14312 | 0.0 | 17.95 +Comm | 0.00020337 | 0.00020337 | 0.00020337 | 0.0 | 0.03 +Output | 0.00036621 | 0.00036621 | 0.00036621 | 0.0 | 0.05 +Modify | 0.00058126 | 0.00058126 | 0.00058126 | 0.0 | 0.07 +Other | | 0.0003934 | | | 0.05 + +Nlocal: 1000 ave 1000 max 1000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 244342 ave 244342 max 244342 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 244342 +Ave neighs/atom = 244.342 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.2 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.2 new file mode 100644 index 0000000000000000000000000000000000000000..e8e614004dd73d901c6ab20d41cd75e92bc06c0c --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.2 @@ -0,0 +1,109 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_shphere + orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) + 1 by 1 by 2 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos fmm 0.001 +kspace_modify scafacos tolerance energy_rel +kspace_modify scafacos fmm_tuning 1 +ScaFaCoS setting fmm inhomogen tuning ... + +timestep 0.005 +thermo 1 + +run 20 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 102 102 102 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.48 | 6.861 | 7.243 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417141 0 1.6235786 0.0015676581 + 1 18.780412 -10.770009 0 17.372438 0.016719188 + 2 65.294131 -11.084501 0 86.758754 0.06035827 + 3 121.92555 -7.0612033 0 175.64423 0.1140457 + 4 185.71165 -5.8781334 0 272.41077 0.17455524 + 5 286.28339 -4.3800108 0 424.61565 0.26911306 + 6 481.28097 -4.3052012 0 716.89433 0.45262045 + 7 487.26022 -3.8672741 0 726.29216 0.45830216 + 8 493.65478 -3.0242687 0 736.71742 0.46443761 + 9 495.66203 -3.4336343 0 739.31592 0.46613014 + 10 498.41831 -2.8837072 0 743.99613 0.46887706 + 11 499.20944 -2.7724783 0 745.29287 0.46966875 + 12 500.97345 -2.8281484 0 747.88057 0.47126462 + 13 507.46412 -2.7752775 0 757.65971 0.47728761 + 14 525.35729 -2.5749814 0 784.67292 0.49422171 + 15 563.9578 -2.9982381 0 842.09253 0.53043696 + 16 645.47602 -2.5519203 0 964.69389 0.60730795 + 17 647.09276 -2.2568468 0 967.41166 0.60891914 + 18 647.12596 -2.2791003 0 967.43915 0.60900309 + 19 647.24862 -2.2495226 0 967.65253 0.60908339 + 20 647.51175 -2.0239179 0 968.27244 0.60932598 +Loop time of 0.701186 on 2 procs for 20 steps with 1000 atoms + +Performance: 12321.981 tau/day, 28.523 timesteps/s +99.7% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00022388 | 0.00022912 | 0.00023437 | 0.0 | 0.03 +Kspace | 0.60189 | 0.62405 | 0.64621 | 2.8 | 89.00 +Neigh | 0.051681 | 0.073973 | 0.096265 | 8.2 | 10.55 +Comm | 0.0016983 | 0.0018919 | 0.0020854 | 0.4 | 0.27 +Output | 0.00034356 | 0.00044572 | 0.00054789 | 0.0 | 0.06 +Modify | 0.00031281 | 0.0003171 | 0.00032139 | 0.0 | 0.05 +Other | | 0.0002786 | | | 0.04 + +Nlocal: 500 ave 509 max 491 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 455.5 ave 467 max 444 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 122171 ave 171834 max 72508 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 244342 +Ave neighs/atom = 244.342 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.4 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.4 new file mode 100644 index 0000000000000000000000000000000000000000..e3f5bf44c9d6b38cc021e88046e35e8a854ac9ed --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.4 @@ -0,0 +1,109 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_shphere + orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos fmm 0.001 +kspace_modify scafacos tolerance energy_rel +kspace_modify scafacos fmm_tuning 1 +ScaFaCoS setting fmm inhomogen tuning ... + +timestep 0.005 +thermo 1 + +run 20 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 102 102 102 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.837 | 5.123 | 5.6 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417141 0 1.6235786 0.0015676581 + 1 18.780412 -10.770009 0 17.372438 0.016719188 + 2 65.294131 -11.084501 0 86.758754 0.06035827 + 3 121.92555 -7.0612033 0 175.64423 0.1140457 + 4 185.71165 -5.8781334 0 272.41077 0.17455524 + 5 286.28339 -4.3800108 0 424.61565 0.26911306 + 6 481.28097 -4.3052012 0 716.89433 0.45262045 + 7 487.26022 -3.8672741 0 726.29216 0.45830216 + 8 493.65478 -3.0242687 0 736.71742 0.46443761 + 9 495.66203 -3.4336343 0 739.31592 0.46613014 + 10 498.41831 -2.8837072 0 743.99613 0.46887706 + 11 499.20944 -2.7724783 0 745.29287 0.46966875 + 12 500.97345 -2.8281484 0 747.88057 0.47126462 + 13 507.46412 -2.7752775 0 757.65971 0.47728761 + 14 525.35729 -2.5749814 0 784.67292 0.49422171 + 15 563.9578 -2.9982381 0 842.09253 0.53043696 + 16 645.47602 -2.5519203 0 964.69389 0.60730795 + 17 647.09276 -2.2568468 0 967.41166 0.60891914 + 18 647.12596 -2.2791003 0 967.43915 0.60900309 + 19 647.24862 -2.2495226 0 967.65253 0.60908339 + 20 647.51175 -2.0239179 0 968.27244 0.60932598 +Loop time of 0.666895 on 4 procs for 20 steps with 1000 atoms + +Performance: 12955.555 tau/day, 29.990 timesteps/s +99.5% 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.0002284 | 0.00024879 | 0.00025725 | 0.0 | 0.04 +Kspace | 0.6085 | 0.62278 | 0.6386 | 1.6 | 93.38 +Neigh | 0.023998 | 0.040044 | 0.054552 | 6.2 | 6.00 +Comm | 0.0025489 | 0.0028656 | 0.0031898 | 0.4 | 0.43 +Output | 0.0004077 | 0.00053912 | 0.00071406 | 0.0 | 0.08 +Modify | 0.00017953 | 0.00018525 | 0.00020218 | 0.0 | 0.03 +Other | | 0.0002366 | | | 0.04 + +Nlocal: 250 ave 259 max 240 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Nghost: 668.75 ave 679 max 657 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Neighs: 61085.5 ave 95363 max 24964 min +Histogram: 1 0 0 1 0 0 0 1 0 1 + +Total # of neighbors = 244342 +Ave neighs/atom = 244.342 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.8 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.8 new file mode 100644 index 0000000000000000000000000000000000000000..22d114081334a22002d097087392dda42b6440bb --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.fmm.8 @@ -0,0 +1,109 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_shphere + orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) + 2 by 2 by 2 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos fmm 0.001 +kspace_modify scafacos tolerance energy_rel +kspace_modify scafacos fmm_tuning 1 +ScaFaCoS setting fmm inhomogen tuning ... + +timestep 0.005 +thermo 1 + +run 20 +Setting up ScaFaCoS with solver fmm ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 102 102 102 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.164 | 4.26 | 4.546 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417141 0 1.6235786 0.0015676581 + 1 18.780412 -10.770009 0 17.372438 0.016719188 + 2 65.294131 -11.084501 0 86.758754 0.06035827 + 3 121.92555 -7.0612033 0 175.64423 0.1140457 + 4 185.71165 -5.8781334 0 272.41077 0.17455524 + 5 286.28339 -4.3800108 0 424.61565 0.26911306 + 6 481.28097 -4.3052012 0 716.89433 0.45262045 + 7 487.26022 -3.8672741 0 726.29216 0.45830216 + 8 493.65478 -3.0242687 0 736.71742 0.46443761 + 9 495.66203 -3.4336343 0 739.31592 0.46613014 + 10 498.41831 -2.8837072 0 743.99613 0.46887706 + 11 499.20944 -2.7724783 0 745.29287 0.46966875 + 12 500.97345 -2.8281484 0 747.88057 0.47126462 + 13 507.46412 -2.7752775 0 757.65971 0.47728761 + 14 525.35729 -2.5749814 0 784.67292 0.49422171 + 15 563.9578 -2.9982381 0 842.09253 0.53043696 + 16 645.47602 -2.5519203 0 964.69389 0.60730795 + 17 647.09276 -2.2568468 0 967.41166 0.60891914 + 18 647.12596 -2.2791003 0 967.43915 0.60900309 + 19 647.24862 -2.2495226 0 967.65253 0.60908339 + 20 647.51175 -2.0239179 0 968.27244 0.60932598 +Loop time of 0.569395 on 8 procs for 20 steps with 1000 atoms + +Performance: 15174.000 tau/day, 35.125 timesteps/s +99.3% CPU use with 8 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00021982 | 0.00023353 | 0.0002408 | 0.0 | 0.04 +Kspace | 0.53679 | 0.54466 | 0.55292 | 0.8 | 95.66 +Neigh | 0.011844 | 0.02033 | 0.028357 | 4.2 | 3.57 +Comm | 0.0028894 | 0.0031579 | 0.0034704 | 0.4 | 0.55 +Output | 0.0005579 | 0.00067073 | 0.0008719 | 0.0 | 0.12 +Modify | 0.0001018 | 0.00011405 | 0.00012612 | 0.0 | 0.02 +Other | | 0.0002268 | | | 0.04 + +Nlocal: 125 ave 137 max 111 min +Histogram: 1 1 0 0 0 2 2 1 0 1 +Nghost: 768.875 ave 788 max 761 min +Histogram: 4 0 2 0 0 0 1 0 0 1 +Neighs: 30542.8 ave 48077 max 10011 min +Histogram: 1 1 1 0 1 1 0 0 0 3 + +Total # of neighbors = 244342 +Ave neighs/atom = 244.342 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.1 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.1 new file mode 100644 index 0000000000000000000000000000000000000000..f8a85c6c6ba3ea883ba54c98742c5234536a2f33 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.1 @@ -0,0 +1,107 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_shphere + orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance potential + +timestep 0.005 +thermo 1 + +run 20 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 102 102 102 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 10.3 | 10.3 | 10.3 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417787 0 1.6235721 0.0015678854 + 1 18.780041 -10.770002 0 17.371889 0.016718957 + 2 65.289192 -11.084705 0 86.751149 0.060353634 + 3 121.92987 -7.0625759 0 175.64933 0.11404974 + 4 185.78164 -5.8777511 0 272.51603 0.17462194 + 5 286.36221 -4.3820531 0 424.73172 0.26918925 + 6 481.42203 -4.3095567 0 717.10136 0.45274086 + 7 488.59165 -3.8685193 0 728.28607 0.45956865 + 8 497.85288 -3.0417938 0 742.99075 0.46838117 + 9 499.61619 -3.4190063 0 745.25585 0.46983349 + 10 502.63691 -2.8360951 0 750.36531 0.47280815 + 11 504.4847 -2.7628089 0 753.20751 0.47462802 + 12 506.54494 -2.8460319 0 756.21157 0.4765145 + 13 508.2722 -2.7309328 0 758.91497 0.47813761 + 14 510.57053 -2.6094792 0 762.48045 0.48031438 + 15 513.14804 -2.7150819 0 766.23726 0.48275234 + 16 515.78127 -2.3961749 0 770.50206 0.48526336 + 17 515.70267 -2.2982581 0 770.48219 0.48526619 + 18 515.70813 -2.1516075 0 770.63702 0.48530395 + 19 515.74908 -2.0581483 0 770.79185 0.48530979 + 20 515.70881 -1.892235 0 770.89742 0.48527104 +Loop time of 1.06008 on 1 procs for 20 steps with 1000 atoms + +Performance: 8150.306 tau/day, 18.866 timesteps/s +100.0% 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.00022078 | 0.00022078 | 0.00022078 | 0.0 | 0.02 +Kspace | 0.91611 | 0.91611 | 0.91611 | 0.0 | 86.42 +Neigh | 0.14232 | 0.14232 | 0.14232 | 0.0 | 13.43 +Comm | 0.00015092 | 0.00015092 | 0.00015092 | 0.0 | 0.01 +Output | 0.00033736 | 0.00033736 | 0.00033736 | 0.0 | 0.03 +Modify | 0.00056243 | 0.00056243 | 0.00056243 | 0.0 | 0.05 +Other | | 0.0003803 | | | 0.04 + +Nlocal: 1000 ave 1000 max 1000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 247817 ave 247817 max 247817 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 247817 +Ave neighs/atom = 247.817 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:01 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.2 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.2 new file mode 100644 index 0000000000000000000000000000000000000000..bd7e7fee1fb2b8e5c31e9f8ba942b90160eb4bdf --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.2 @@ -0,0 +1,107 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_shphere + orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) + 1 by 1 by 2 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance potential + +timestep 0.005 +thermo 1 + +run 20 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 102 102 102 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.48 | 6.861 | 7.243 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417787 0 1.6235721 0.0015678854 + 1 18.780041 -10.770002 0 17.371889 0.016718957 + 2 65.289192 -11.084705 0 86.751149 0.060353634 + 3 121.92987 -7.0625759 0 175.64933 0.11404974 + 4 185.78164 -5.8777511 0 272.51603 0.17462194 + 5 286.36221 -4.3820531 0 424.73172 0.26918925 + 6 481.42203 -4.3095567 0 717.10136 0.45274086 + 7 488.59165 -3.8685193 0 728.28607 0.45956865 + 8 497.85288 -3.0417938 0 742.99075 0.46838117 + 9 499.61619 -3.4190063 0 745.25585 0.46983349 + 10 502.63691 -2.8360951 0 750.36531 0.47280815 + 11 504.4847 -2.7628089 0 753.20751 0.47462802 + 12 506.54494 -2.8460319 0 756.21157 0.4765145 + 13 508.2722 -2.7309328 0 758.91497 0.47813761 + 14 510.57053 -2.6094792 0 762.48045 0.48031438 + 15 513.14804 -2.7150819 0 766.23726 0.48275234 + 16 515.78127 -2.3961749 0 770.50206 0.48526336 + 17 515.70267 -2.2982581 0 770.48219 0.48526619 + 18 515.70813 -2.1516075 0 770.63702 0.48530395 + 19 515.74908 -2.0581483 0 770.79185 0.48530979 + 20 515.70881 -1.892235 0 770.89742 0.48527104 +Loop time of 0.701267 on 2 procs for 20 steps with 1000 atoms + +Performance: 12320.557 tau/day, 28.520 timesteps/s +99.6% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0002265 | 0.00022769 | 0.00022888 | 0.0 | 0.03 +Kspace | 0.60195 | 0.62374 | 0.64554 | 2.8 | 88.95 +Neigh | 0.05268 | 0.074592 | 0.096504 | 8.0 | 10.64 +Comm | 0.0015199 | 0.0016934 | 0.0018668 | 0.4 | 0.24 +Output | 0.00031519 | 0.00041544 | 0.0005157 | 0.0 | 0.06 +Modify | 0.00029492 | 0.00030565 | 0.00031638 | 0.0 | 0.04 +Other | | 0.000288 | | | 0.04 + +Nlocal: 500 ave 516 max 484 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 456.5 ave 475 max 438 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 123908 ave 172139 max 75678 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 247817 +Ave neighs/atom = 247.817 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.4 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.4 new file mode 100644 index 0000000000000000000000000000000000000000..8a7e591f9ae4721a5b992bf7f145bbda3c336abf --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.4 @@ -0,0 +1,107 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_shphere + orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance potential + +timestep 0.005 +thermo 1 + +run 20 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 102 102 102 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.837 | 5.123 | 5.6 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417787 0 1.6235721 0.0015678854 + 1 18.780041 -10.770002 0 17.371889 0.016718957 + 2 65.289192 -11.084705 0 86.751149 0.060353634 + 3 121.92987 -7.0625759 0 175.64933 0.11404974 + 4 185.78164 -5.8777511 0 272.51603 0.17462194 + 5 286.36221 -4.3820531 0 424.73172 0.26918925 + 6 481.42203 -4.3095567 0 717.10136 0.45274086 + 7 488.59165 -3.8685193 0 728.28607 0.45956865 + 8 497.85288 -3.0417938 0 742.99075 0.46838117 + 9 499.61619 -3.4190063 0 745.25585 0.46983349 + 10 502.63691 -2.8360951 0 750.36531 0.47280815 + 11 504.4847 -2.7628089 0 753.20751 0.47462802 + 12 506.54494 -2.8460319 0 756.21157 0.4765145 + 13 508.2722 -2.7309328 0 758.91497 0.47813761 + 14 510.57053 -2.6094792 0 762.48045 0.48031438 + 15 513.14804 -2.7150819 0 766.23726 0.48275234 + 16 515.78127 -2.3961749 0 770.50206 0.48526336 + 17 515.70267 -2.2982581 0 770.48219 0.48526619 + 18 515.70813 -2.1516075 0 770.63702 0.48530395 + 19 515.74908 -2.0581483 0 770.79185 0.48530979 + 20 515.70881 -1.892235 0 770.89742 0.48527104 +Loop time of 0.427495 on 4 procs for 20 steps with 1000 atoms + +Performance: 20210.785 tau/day, 46.784 timesteps/s +99.7% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0002327 | 0.00023341 | 0.00023437 | 0.0 | 0.05 +Kspace | 0.36897 | 0.38411 | 0.39988 | 1.9 | 89.85 +Neigh | 0.023831 | 0.039796 | 0.055124 | 6.1 | 9.31 +Comm | 0.0022776 | 0.0025444 | 0.0028152 | 0.4 | 0.60 +Output | 0.00033784 | 0.0004344 | 0.00057077 | 0.0 | 0.10 +Modify | 0.00016117 | 0.00016713 | 0.00017095 | 0.0 | 0.04 +Other | | 0.0002093 | | | 0.05 + +Nlocal: 250 ave 259 max 238 min +Histogram: 1 0 0 1 0 0 0 0 0 2 +Nghost: 672.25 ave 683 max 663 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Neighs: 61954.2 ave 97157 max 25016 min +Histogram: 1 0 0 1 0 0 1 0 0 1 + +Total # of neighbors = 247817 +Ave neighs/atom = 247.817 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:00 diff --git a/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.8 b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.8 new file mode 100644 index 0000000000000000000000000000000000000000..13922c09ac878329107dfa2da0ad9df05a780bd2 --- /dev/null +++ b/examples/USER/scafacos/log.08Aug18.scafacos.hsph.g++.p2nfft.8 @@ -0,0 +1,107 @@ +LAMMPS (2 Aug 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# Point dipoles in a 2d box + +units lj +atom_style charge + +read_data data.hammersley_shphere + orthogonal box = (-50.5 -50.5 -50.5) to (51.5 51.5 51.5) + 2 by 2 by 2 MPI processor grid + reading atoms ... + 1000 atoms +change_box all boundary f f f + +velocity all create 1.5 49893 + +neighbor 1.0 bin +neigh_modify delay 0 + +fix 1 all nve + +# LAMMPS computes pairwise and long-range Coulombics + +#pair_style coul/long 3.0 +#pair_coeff * * +#kspace_style pppm 1.0e-3 + +# Scafacos computes entire long-range Coulombics +# use dummy pair style to perform atom sorting + +pair_style zero 1.0 +pair_coeff * * + +#fix 2 all scafacos p3m tolerance field 0.001 + +kspace_style scafacos p2nfft 0.001 +kspace_modify scafacos tolerance potential + +timestep 0.005 +thermo 1 + +run 20 +Setting up ScaFaCoS with solver p2nfft ... +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2 + ghost atom cutoff = 2 + binsize = 1, bins = 102 102 102 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair zero, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.164 | 4.26 | 4.546 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.5 -0.62417787 0 1.6235721 0.0015678854 + 1 18.780041 -10.770002 0 17.371889 0.016718957 + 2 65.289192 -11.084705 0 86.751149 0.060353634 + 3 121.92987 -7.0625759 0 175.64933 0.11404974 + 4 185.78164 -5.8777511 0 272.51603 0.17462194 + 5 286.36221 -4.3820531 0 424.73172 0.26918925 + 6 481.42203 -4.3095567 0 717.10136 0.45274086 + 7 488.59165 -3.8685193 0 728.28607 0.45956865 + 8 497.85288 -3.0417938 0 742.99075 0.46838117 + 9 499.61619 -3.4190063 0 745.25585 0.46983349 + 10 502.63691 -2.8360951 0 750.36531 0.47280815 + 11 504.4847 -2.7628089 0 753.20751 0.47462802 + 12 506.54494 -2.8460319 0 756.21157 0.4765145 + 13 508.2722 -2.7309328 0 758.91497 0.47813761 + 14 510.57053 -2.6094792 0 762.48045 0.48031438 + 15 513.14804 -2.7150819 0 766.23726 0.48275234 + 16 515.78127 -2.3961749 0 770.50206 0.48526336 + 17 515.70267 -2.2982581 0 770.48219 0.48526619 + 18 515.70813 -2.1516075 0 770.63702 0.48530395 + 19 515.74908 -2.0581483 0 770.79185 0.48530979 + 20 515.70881 -1.892235 0 770.89742 0.48527104 +Loop time of 0.242145 on 8 procs for 20 steps with 1000 atoms + +Performance: 35681.038 tau/day, 82.595 timesteps/s +99.2% CPU use with 8 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0002315 | 0.00023672 | 0.00024652 | 0.0 | 0.10 +Kspace | 0.20915 | 0.21666 | 0.22564 | 1.3 | 89.48 +Neigh | 0.012218 | 0.021341 | 0.029026 | 4.3 | 8.81 +Comm | 0.0028954 | 0.0031248 | 0.0033553 | 0.3 | 1.29 +Output | 0.00039291 | 0.00049406 | 0.00066066 | 0.0 | 0.20 +Modify | 8.7976e-05 | 9.2953e-05 | 9.7752e-05 | 0.0 | 0.04 +Other | | 0.0001938 | | | 0.08 + +Nlocal: 125 ave 133 max 113 min +Histogram: 2 0 0 0 0 1 1 0 2 2 +Nghost: 773.625 ave 788 max 764 min +Histogram: 1 1 2 1 1 0 0 0 1 1 +Neighs: 30977.1 ave 50690 max 10447 min +Histogram: 1 1 1 0 1 1 0 0 2 1 + +Total # of neighbors = 247817 +Ave neighs/atom = 247.817 +Neighbor list builds = 19 +Dangerous builds = 18 +Total wall time: 0:00:00 diff --git a/examples/USER/smd/fluid_structure_interaction/fluid_structure_interaction.lmp b/examples/USER/smd/fluid_structure_interaction/fluid_structure_interaction.lmp index 5100a52d840f8a6552384d1cf24ddf109911e634..0f7d726e2114286c872ae9c363adbe7155945bfd 100644 --- a/examples/USER/smd/fluid_structure_interaction/fluid_structure_interaction.lmp +++ b/examples/USER/smd/fluid_structure_interaction/fluid_structure_interaction.lmp @@ -129,7 +129,7 @@ compute contact_radius all smd/contact/radius compute S solids smd/tlsph/stress compute nn water smd/ulsph/num/neighs compute epl solids smd/plastic/strain -compute vol all smd/volume +compute vol all smd/vol compute rho all smd/rho dump dump_id all custom 100 dump.LAMMPS id type x y & diff --git a/examples/atm/in.atm b/examples/atm/in.atm new file mode 100644 index 0000000000000000000000000000000000000000..131528dce396b528943fc6ae1e0abf62702dd7df --- /dev/null +++ b/examples/atm/in.atm @@ -0,0 +1,31 @@ +# Axilrod-Teller-Muto potential example + +variable x index 1 +variable y index 1 +variable z index 1 + +variable xx equal 10*$x +variable yy equal 10*$y +variable zz equal 10*$z + +units lj +atom_style atomic + +lattice fcc 0.65 +region box block 0 ${xx} 0 ${yy} 0 ${zz} +create_box 1 box +create_atoms 1 box + +pair_style hybrid/overlay lj/cut 4.5 atm 4.5 2.5 +pair_coeff * * lj/cut 1.0 1.0 +pair_coeff * * atm * 0.072 + +mass * 1.0 +velocity all create 1.033 12345678 loop geom + +fix 1 all nvt temp 1.033 1.033 0.05 + +timestep 0.002 +thermo 5 + +run 25 diff --git a/examples/atm/log.27Aug18.g++.1 b/examples/atm/log.27Aug18.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..46215e108c0be7ce2f3e6587cec0e05f396061ee --- /dev/null +++ b/examples/atm/log.27Aug18.g++.1 @@ -0,0 +1,100 @@ +LAMMPS (22 Aug 2018) +# Axilrod-Teller-Muto potential example + +variable x index 1 +variable y index 1 +variable z index 1 + +variable xx equal 10*$x +variable xx equal 10*1 +variable yy equal 10*$y +variable yy equal 10*1 +variable zz equal 10*$z +variable zz equal 10*1 + +units lj +atom_style atomic + +lattice fcc 0.65 +Lattice spacing in x,y,z = 1.83252 1.83252 1.83252 +region box block 0 ${xx} 0 ${yy} 0 ${zz} +region box block 0 10 0 ${yy} 0 ${zz} +region box block 0 10 0 10 0 ${zz} +region box block 0 10 0 10 0 10 +create_box 1 box +Created orthogonal box = (0 0 0) to (18.3252 18.3252 18.3252) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.00139618 secs + +pair_style hybrid/overlay lj/cut 4.5 atm 4.5 2.5 +pair_coeff * * lj/cut 1.0 1.0 +pair_coeff * * atm * 0.072 + +mass * 1.0 +velocity all create 1.033 12345678 loop geom + +fix 1 all nvt temp 1.033 1.033 0.05 + +timestep 0.002 +thermo 5 + +run 25 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.8 + ghost atom cutoff = 4.8 + binsize = 2.4, bins = 8 8 8 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair atm, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 11.47 | 11.47 | 11.47 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.033 -4.8404387 0 -3.291326 -4.1332095 + 5 1.0337247 -4.8402263 0 -3.290027 -4.1207962 + 10 1.0355935 -4.8425889 0 -3.2895869 -4.0870158 + 15 1.0376519 -4.84599 0 -3.2899013 -4.0278711 + 20 1.0382257 -4.8478854 0 -3.2909361 -3.9368052 + 25 1.0347886 -4.84473 0 -3.2929351 -3.8044469 +Loop time of 15.95 on 1 procs for 25 steps with 4000 atoms + +Performance: 270.846 tau/day, 1.567 timesteps/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 15.946 | 15.946 | 15.946 | 0.0 | 99.97 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0015042 | 0.0015042 | 0.0015042 | 0.0 | 0.01 +Output | 0.00013781 | 0.00013781 | 0.00013781 | 0.0 | 0.00 +Modify | 0.0017776 | 0.0017776 | 0.0017776 | 0.0 | 0.01 +Other | | 0.0006771 | | | 0.00 + +Nlocal: 4000 ave 4000 max 4000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 10895 ave 10895 max 10895 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 640000 ave 640000 max 640000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 1.28e+06 ave 1.28e+06 max 1.28e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1280000 +Ave neighs/atom = 320 +Neighbor list builds = 0 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:16 diff --git a/examples/atm/log.27Aug18.g++.4 b/examples/atm/log.27Aug18.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..d84f17ee2b5562b5c9e22a0d2a6e8722bb974c6b --- /dev/null +++ b/examples/atm/log.27Aug18.g++.4 @@ -0,0 +1,100 @@ +LAMMPS (22 Aug 2018) +# Axilrod-Teller-Muto potential example + +variable x index 1 +variable y index 1 +variable z index 1 + +variable xx equal 10*$x +variable xx equal 10*1 +variable yy equal 10*$y +variable yy equal 10*1 +variable zz equal 10*$z +variable zz equal 10*1 + +units lj +atom_style atomic + +lattice fcc 0.65 +Lattice spacing in x,y,z = 1.83252 1.83252 1.83252 +region box block 0 ${xx} 0 ${yy} 0 ${zz} +region box block 0 10 0 ${yy} 0 ${zz} +region box block 0 10 0 10 0 ${zz} +region box block 0 10 0 10 0 10 +create_box 1 box +Created orthogonal box = (0 0 0) to (18.3252 18.3252 18.3252) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 4000 atoms + Time spent = 0.000900984 secs + +pair_style hybrid/overlay lj/cut 4.5 atm 4.5 2.5 +pair_coeff * * lj/cut 1.0 1.0 +pair_coeff * * atm * 0.072 + +mass * 1.0 +velocity all create 1.033 12345678 loop geom + +fix 1 all nvt temp 1.033 1.033 0.05 + +timestep 0.002 +thermo 5 + +run 25 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4.8 + ghost atom cutoff = 4.8 + binsize = 2.4, bins = 8 8 8 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair lj/cut, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair atm, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.532 | 5.532 | 5.532 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.033 -4.8404387 0 -3.291326 -4.1332095 + 5 1.0337247 -4.8402263 0 -3.290027 -4.1207962 + 10 1.0355935 -4.8425889 0 -3.2895869 -4.0870158 + 15 1.0376519 -4.84599 0 -3.2899013 -4.0278711 + 20 1.0382257 -4.8478854 0 -3.2909361 -3.9368052 + 25 1.0347886 -4.84473 0 -3.2929351 -3.8044469 +Loop time of 4.34636 on 4 procs for 25 steps with 4000 atoms + +Performance: 993.935 tau/day, 5.752 timesteps/s +99.6% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 3.9977 | 4.1036 | 4.209 | 4.9 | 94.41 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.13588 | 0.24134 | 0.34722 | 20.4 | 5.55 +Output | 0.00013757 | 0.00015104 | 0.00016761 | 0.0 | 0.00 +Modify | 0.00087953 | 0.00091547 | 0.00095582 | 0.0 | 0.02 +Other | | 0.0003656 | | | 0.01 + +Nlocal: 1000 ave 1000 max 1000 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 5835 ave 5835 max 5835 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 160000 ave 160000 max 160000 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 320000 ave 320000 max 320000 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1280000 +Ave neighs/atom = 320 +Neighbor list builds = 0 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:04 diff --git a/examples/message/README b/examples/message/README new file mode 100644 index 0000000000000000000000000000000000000000..6cd99d5c097fffb8e5c09bba4fefa5dad5bb7c94 --- /dev/null +++ b/examples/message/README @@ -0,0 +1,117 @@ +This dir contains scripts that demonstrate how to use LAMMPS as both a +client and server code to run a simple MD simulation. LAMMPS as a +client performs the MD timestepping. LAMMPS as a server provides the +energy and forces between interacting particles. Every timestep the +LAMMPS client sends a message to the LAMMPS server and receives a +response message in return. + +Another code could replace LAMMPS as the client, e.g. another MD code +which wants to use a LAMMPS potential. Another code could replace +LAMMPS as the server, e.g. a quantum code computing quantum forces, so +that ab initio MD could be performed. See an example of the latter in +examples/COUPLE/lammps_vasp. + +See the doc pages for the "MESSAGE package" +(Package_details.html#PKG-MESSAGE) and "Howto client/server" +(Howto_client_server.html) for more details on how client/server +coupling works in LAMMPS. + +-------------- + +Note that you can adjust the problem size run by these scripts by +setting "x,y,z" variables when you run LAMMPS. The default problem size +is x = y = z = 5, which is 500 particles. + +lmp_mpi -v x 10 -v y 10 -v z 20 # 8000 particles + +This applies to either in.message or in.message.client + +You can also run the in.message scripts with an NPT integrator +instead of NVE, if you comment/uncomment the correct lines. + +The client and server script define a "mode" variable +which can be set to file, zmq, mpi/one, or mpi/two, +as illustrated below. + +-------------- + +To run this problem in the traditional way (no client/server coupling) +do one of these: + +% lmp_serial < in.message +% mpirun -np 4 lmp_mpi < in.message + +Or run with in.message.tilt. + +-------------- + +To run in client/server mode: + +Both the client and server script must use the same messaging mode. +This can be selected by setting the "mode" variable when you run +LAMMPS. The default mode = file. The other options for the mode +variable are zmq, mpione, mpitwo. + +Here we assume LAMMPS was built to run in parallel, and the MESSAGE +package was installed with socket (ZMQ) support. This means any of +the 4 messaging modes can be used. + +The next sections illustrate how to launch LAMMPS twice, once as a +client, once as a server, for each of the messaging modes. + +In all cases, the client should print out thermodynamic info for 50 +steps. The server should print out setup info, print nothing until +the client exits, at which point the server should also exit. + +The examples below show launching LAMMPS twice from the same window +(or batch script), using the "&" character to launch the first time in +the background. For all modes except {mpi/one}, you could also launch +twice in separate windows on your desktop machine. It does not matter +whether you launch the client or server first. + +In these examples either the client or server can be run on one or +more processors. If running in a non-MPI mode (file or zmq) you can +launch LAMMPS on a single processor without using mpirun. + +IMPORTANT: If you run in mpi/two mode, you must launch LAMMPS both +times via mpirun, even if one or both of them runs on a single +processor. This is so that MPI can figure out how to connect both MPI +processes together to exchange MPI messages between them. + +-------------- + +NOTE: the Script.sh file has comands to perform all the +runs listed below. + +-------------- + +File or ZMQ or mpi/two modes of messaging: + +% mpirun -np 1 lmp_mpi -v mode file -log log.client < in.message.client & +% mpirun -np 2 lmp_mpi -v mode file -log log.server < in.message.server + +% mpirun -np 4 lmp_mpi -v mode zmq -log log.client < in.message.client & +% mpirun -np 1 lmp_mpi -v mode zmq -log log.server < in.message.server + +% mpirun -np 2 lmp_mpi -v mode mpitwo -log log.client < in.message.client & +% mpirun -np 4 lmp_mpi -v mode mpitwo -log log.server < in.message.server + +Or run with in.message.tilt.client/server. +Don't run the tilt files with the "file" mode; they run too slow. + +-------------- + +Mpi/one mode of messaging: + +Launch LAMMPS twice in a single mpirun command: + +% mpirun -np 2 lmp_mpi -mpicolor 0 -in in.message.client -v mode mpione -log log.client : -np 4 lmp_mpi -mpicolor 1 -in in.message.server -v mode mpione -log log.server + +Or run with in.message.tilt.client/server. + +The two -np values determine how many procs the client and the server +run on. + +A LAMMPS executable run in this manner must use the -mpicolor color +command-line option as its first option, where color is set to one +integer value for the 1st app, and another value for the 2nd app. diff --git a/examples/message/Script.sh b/examples/message/Script.sh new file mode 100644 index 0000000000000000000000000000000000000000..fdcd6f11888448eb40e9425873257a7a9773b0b6 --- /dev/null +++ b/examples/message/Script.sh @@ -0,0 +1,55 @@ +# sample launch script + +# message on 1 proc each + +mpirun -np 1 lmp_mpi -log log.message.g++.1 < in.message + +mpirun -np 1 lmp_mpi -v mode file -log log.message.client.file.g++.1 < in.message.client & +mpirun -np 1 lmp_mpi -v mode file -log log.message.server.file.g++.1 < in.message.server + +mpirun -np 1 lmp_mpi -v mode zmq -log log.message.client.zmq.g++.1 < in.message.client & +mpirun -np 1 lmp_mpi -v mode zmq -log log.message.server.zmq.g++.1 < in.message.server + +mpirun -np 1 lmp_mpi -v mode mpitwo -log log.message.client.mpitwo.g++.1 < in.message.client & +mpirun -np 1 lmp_mpi -v mode mpitwo -log log.message.server.mpitwo.g++.1 < in.message.server + +mpirun -np 1 lmp_mpi -m 0 -in in.message.client -v mode mpione -log log.message.client.mpione.g++.1 : -np 1 lmp_mpi -m 1 -in in.message.server -v mode mpione -log log.message.server.mpione.g++.1 + +# message on 2/4 procs each + +mpirun -np 4 lmp_mpi -log log.message.g++.4 < in.message + +mpirun -np 2 lmp_mpi -v mode file -log log.message.client.file.g++.2 < in.message.client & +mpirun -np 4 lmp_mpi -v mode file -log log.message.server.file.g++.4 < in.message.server + +mpirun -np 2 lmp_mpi -v mode zmq -log log.message.client.zmq.g++.2 < in.message.client & +mpirun -np 4 lmp_mpi -v mode zmq -log log.message.server.zmq.g++.4 < in.message.server + +mpirun -np 2 lmp_mpi -v mode mpitwo -log log.message.client.mpitwo.g++.2 < in.message.client & +mpirun -np 4 lmp_mpi -v mode mpitwo -log log.message.server.mpitwo.g++.4 < in.message.server + +mpirun -np 2 lmp_mpi -m 0 -in in.message.client -v mode mpione -log log.message.client.mpione.g++.2 : -np 4 lmp_mpi -m 1 -in in.message.server -v mode mpione -log log.message.server.mpione.g++.4 + +# message.tilt on 1 proc each + +mpirun -np 1 lmp_mpi -log log.message.tilt.g++.1 < in.message.tilt + +mpirun -np 1 lmp_mpi -v mode zmq -log log.message.tilt.client.zmq.g++.1 < in.message.tilt.client & +mpirun -np 1 lmp_mpi -v mode zmq -log log.message.tilt.server.zmq.g++.1 < in.message.tilt.server + +mpirun -np 1 lmp_mpi -v mode mpitwo -log log.message.tilt.client.mpitwo.g++.1 < in.message.tilt.client & +mpirun -np 1 lmp_mpi -v mode mpitwo -log log.message.tilt.server.mpitwo.g++.1 < in.message.tilt.server + +mpirun -np 1 lmp_mpi -m 0 -in in.message.tilt.client -v mode mpione -log log.message.tilt.client.mpione.g++.1 : -np 1 lmp_mpi -m 1 -in in.message.tilt.server -v mode mpione -log log.message.tilt.server.mpione.g++.1 + +# message.tilt on 2/4 procs each + +mpirun -np 1 lmp_mpi -log log.message.tilt.g++.4 < in.message.tilt + +mpirun -np 2 lmp_mpi -v mode zmq -log log.message.tilt.client.zmq.g++.2 < in.message.tilt.client & +mpirun -np 4 lmp_mpi -v mode zmq -log log.message.tilt.server.zmq.g++.4 < in.message.tilt.server + +mpirun -np 2 lmp_mpi -v mode mpitwo -log log.message.tilt.client.mpitwo.g++.2 < in.message.tilt.client & +mpirun -np 4 lmp_mpi -v mode mpitwo -log log.message.tilt.server.mpitwo.g++.4 < in.message.tilt.server + +mpirun -np 2 lmp_mpi -m 0 -in in.message.tilt.client -v mode mpione -log log.message.tilt.client.mpione.g++.2 : -np 4 lmp_mpi -m 1 -in in.message.tilt.server -v mode mpione -log log.message.tilt.server.mpione.g++.4 diff --git a/examples/message/in.message b/examples/message/in.message new file mode 100644 index 0000000000000000000000000000000000000000..7fbbffc355cf82402ed7fc3975ffa9136f56ceec --- /dev/null +++ b/examples/message/in.message @@ -0,0 +1,29 @@ +# 3d Lennard-Jones melt - no client/server mode + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic + +lattice fcc 0.8442 +region box block 0 $x 0 $y 0 $z +create_box 1 box +create_atoms 1 box +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +thermo 10 +run 50 diff --git a/examples/message/in.message.client b/examples/message/in.message.client new file mode 100644 index 0000000000000000000000000000000000000000..f1ec644a8005fae80cdbd41657bc146482c9b128 --- /dev/null +++ b/examples/message/in.message.client @@ -0,0 +1,41 @@ +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then & + "message client md file tmp.couple" & +elif "${mode} == zmq" & + "message client md zmq localhost:5555" & +elif "${mode} == mpione" & + "message client md mpi/one" & +elif "${mode} == mpitwo" & + "message client md mpi/two tmp.couple" + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +region box block 0 $x 0 $y 0 $z +create_box 1 box +create_atoms 1 box +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 diff --git a/examples/message/in.message.server b/examples/message/in.message.server new file mode 100644 index 0000000000000000000000000000000000000000..2fedd2ae0061329741a5a1abbbc0694ef3ef2d9b --- /dev/null +++ b/examples/message/in.message.server @@ -0,0 +1,29 @@ +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then & + "message server md file tmp.couple" & +elif "${mode} == zmq" & + "message server md zmq *:5555" & +elif "${mode} == mpione" & + "message server md mpi/one" & +elif "${mode} == mpitwo" & + "message server md mpi/two tmp.couple" + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +region box block 0 1 0 1 0 1 +create_box 1 box +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md diff --git a/examples/message/in.message.tilt b/examples/message/in.message.tilt new file mode 100644 index 0000000000000000000000000000000000000000..51126eae1ef14b8c0b8ebb93b9ea90a910a33dc3 --- /dev/null +++ b/examples/message/in.message.tilt @@ -0,0 +1,30 @@ +# 2d NEMD simulation - no client/server mode + +units lj +atom_style atomic +dimension 2 + +lattice sq2 0.8442 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +create_atoms 1 box +mass * 1.0 + +velocity all create 1.44 87287 loop geom + +region slice block 4 6 INF INF INF INF +set region slice type 2 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 +fix 2 all deform 1 xy erate 0.01 remap v + +thermo_style custom step temp epair etotal press xy + +thermo 1000 +run 50000 diff --git a/examples/message/in.message.tilt.client b/examples/message/in.message.tilt.client new file mode 100644 index 0000000000000000000000000000000000000000..b55bc6585b07bca4607673b080700c963fdc6a6a --- /dev/null +++ b/examples/message/in.message.tilt.client @@ -0,0 +1,42 @@ +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then & + "message client md file tmp.couple" & +elif "${mode} == zmq" & + "message client md zmq localhost:5555" & +elif "${mode} == mpione" & + "message client md mpi/one" & +elif "${mode} == mpitwo" & + "message client md mpi/two tmp.couple" + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +lattice sq2 0.8442 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +create_atoms 1 box +mass * 1.0 + +velocity all create 1.44 87287 loop geom + +region slice block 4 6 INF INF INF INF +set region slice type 2 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 +fix 2 all deform 1 xy erate 0.01 remap v + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +thermo 1000 +run 50000 diff --git a/examples/message/in.message.tilt.server b/examples/message/in.message.tilt.server new file mode 100644 index 0000000000000000000000000000000000000000..ba211ed15fce9030032b5e9bc2eed3ecdee6d766 --- /dev/null +++ b/examples/message/in.message.tilt.server @@ -0,0 +1,31 @@ +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then & + "message server md file tmp.couple" & +elif "${mode} == zmq" & + "message server md zmq *:5555" & +elif "${mode} == mpione" & + "message server md mpi/one" & +elif "${mode} == mpitwo" & + "message server md mpi/two tmp.couple" + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +lattice sq2 0.8442 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +create_atoms 1 box +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md diff --git a/examples/message/log.28Aug18.message.client.file.g++.1 b/examples/message/log.28Aug18.message.client.file.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..bca1d37dd5022f93df73ed80a0dc6fb62db40deb --- /dev/null +++ b/examples/message/log.28Aug18.message.client.file.g++.1 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md file tmp.couple + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000752926 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.303 | 2.303 | 2.303 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 5.0251 on 1 procs for 50 steps with 500 atoms + +Performance: 4298.421 tau/day, 9.950 timesteps/s +0.1% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 9.7752e-06 | 9.7752e-06 | 9.7752e-06 | 0.0 | 0.00 +Comm | 0.00014925 | 0.00014925 | 0.00014925 | 0.0 | 0.00 +Output | 0.00023127 | 0.00023127 | 0.00023127 | 0.0 | 0.00 +Modify | 5.0242 | 5.0242 | 5.0242 | 0.0 | 99.98 +Other | | 0.0004668 | | | 0.01 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:05 diff --git a/examples/message/log.28Aug18.message.client.file.g++.2 b/examples/message/log.28Aug18.message.client.file.g++.2 new file mode 100644 index 0000000000000000000000000000000000000000..1c868dde37cf3e7fcca7555b1babca1b9f16bfd7 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.file.g++.2 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md file tmp.couple + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000613928 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.302 | 2.302 | 2.302 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 5.02384 on 2 procs for 50 steps with 500 atoms + +Performance: 4299.499 tau/day, 9.953 timesteps/s +50.1% CPU use with 2 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 1.9073e-06 | 3.3379e-06 | 4.7684e-06 | 0.0 | 0.00 +Comm | 0.00020742 | 0.00021136 | 0.00021529 | 0.0 | 0.00 +Output | 0.00026989 | 0.00048053 | 0.00069118 | 0.0 | 0.01 +Modify | 5.0171 | 5.0199 | 5.0228 | 0.1 | 99.92 +Other | | 0.003203 | | | 0.06 + +Nlocal: 250 ave 255 max 245 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:05 diff --git a/examples/message/log.28Aug18.message.client.mpione.g++.1 b/examples/message/log.28Aug18.message.client.mpione.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..78bee72fdf5e2a4cd364be6f149f80a2cf02c778 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.mpione.g++.1 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/one + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000540018 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.303 | 2.303 | 2.303 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 0.0403891 on 1 procs for 50 steps with 500 atoms + +Performance: 534798.272 tau/day, 1237.959 timesteps/s +99.9% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 4.7684e-06 | 4.7684e-06 | 4.7684e-06 | 0.0 | 0.01 +Comm | 6.3181e-05 | 6.3181e-05 | 6.3181e-05 | 0.0 | 0.16 +Output | 9.5367e-05 | 9.5367e-05 | 9.5367e-05 | 0.0 | 0.24 +Modify | 0.040053 | 0.040053 | 0.040053 | 0.0 | 99.17 +Other | | 0.0001726 | | | 0.43 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.client.mpione.g++.2 b/examples/message/log.28Aug18.message.client.mpione.g++.2 new file mode 100644 index 0000000000000000000000000000000000000000..7d7af866e39cc806e48c87d22d55cdbc5fe8aff0 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.mpione.g++.2 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/one + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000475883 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.302 | 2.302 | 2.302 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 0.0208495 on 2 procs for 50 steps with 500 atoms + +Performance: 1035997.740 tau/day, 2398.143 timesteps/s +99.1% CPU use with 2 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 3.0994e-06 | 4.53e-06 | 5.9605e-06 | 0.0 | 0.02 +Comm | 0.00012422 | 0.00012457 | 0.00012493 | 0.0 | 0.60 +Output | 5.7697e-05 | 7.987e-05 | 0.00010204 | 0.0 | 0.38 +Modify | 0.020463 | 0.020464 | 0.020466 | 0.0 | 98.15 +Other | | 0.0001761 | | | 0.84 + +Nlocal: 250 ave 255 max 245 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.client.mpitwo.g++.1 b/examples/message/log.28Aug18.message.client.mpitwo.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..ee97e7bd1a30cada0045240d6458cd7d4a88fcf4 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.mpitwo.g++.1 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/two tmp.couple + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000603914 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.303 | 2.303 | 2.303 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 0.069119 on 1 procs for 50 steps with 500 atoms + +Performance: 312504.627 tau/day, 723.390 timesteps/s +42.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 7.1526e-06 | 7.1526e-06 | 7.1526e-06 | 0.0 | 0.01 +Comm | 0.0001049 | 0.0001049 | 0.0001049 | 0.0 | 0.15 +Output | 0.00014019 | 0.00014019 | 0.00014019 | 0.0 | 0.20 +Modify | 0.068602 | 0.068602 | 0.068602 | 0.0 | 99.25 +Other | | 0.0002651 | | | 0.38 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.client.mpitwo.g++.2 b/examples/message/log.28Aug18.message.client.mpitwo.g++.2 new file mode 100644 index 0000000000000000000000000000000000000000..72db0198d582ac4fce9fee22a85c687369186cd8 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.mpitwo.g++.2 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/two tmp.couple + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000667095 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.302 | 2.302 | 2.302 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 0.0190214 on 2 procs for 50 steps with 500 atoms + +Performance: 1135563.588 tau/day, 2628.619 timesteps/s +58.5% CPU use with 2 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 1.9073e-06 | 2.861e-06 | 3.8147e-06 | 0.0 | 0.02 +Comm | 0.00017238 | 0.00017989 | 0.0001874 | 0.0 | 0.95 +Output | 0.00012803 | 0.00015497 | 0.00018191 | 0.0 | 0.81 +Modify | 0.018065 | 0.018181 | 0.018297 | 0.1 | 95.58 +Other | | 0.0005029 | | | 2.64 + +Nlocal: 250 ave 255 max 245 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/message/log.28Aug18.message.client.zmq.g++.1 b/examples/message/log.28Aug18.message.client.zmq.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..23fa70c1be67ea310f6271eeb9f8977def4aecfa --- /dev/null +++ b/examples/message/log.28Aug18.message.client.zmq.g++.1 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md zmq localhost:5555 + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000734091 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.303 | 2.303 | 2.303 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 0.0778341 on 1 procs for 50 steps with 500 atoms + +Performance: 277513.222 tau/day, 642.392 timesteps/s +11.4% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 7.8678e-06 | 7.8678e-06 | 7.8678e-06 | 0.0 | 0.01 +Comm | 8.3685e-05 | 8.3685e-05 | 8.3685e-05 | 0.0 | 0.11 +Output | 0.00011373 | 0.00011373 | 0.00011373 | 0.0 | 0.15 +Modify | 0.07734 | 0.07734 | 0.07734 | 0.0 | 99.37 +Other | | 0.0002885 | | | 0.37 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.client.zmq.g++.2 b/examples/message/log.28Aug18.message.client.zmq.g++.2 new file mode 100644 index 0000000000000000000000000000000000000000..7833befd211aab1fcbf01e8a7a57ad39ef136e03 --- /dev/null +++ b/examples/message/log.28Aug18.message.client.zmq.g++.2 @@ -0,0 +1,79 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md zmq localhost:5555 + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic +atom_modify sort 0 0.0 map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000570059 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +fix 2 all client/md +fix_modify 2 energy yes + +thermo 10 +run 50 +Per MPI rank memory allocation (min/avg/max) = 2.302 | 2.302 | 2.302 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 0 0 -4.6176881 -5.0221006 + 10 1.1347688 0 0 -4.6166043 -2.6072847 + 20 0.628166 0 0 -4.62213 1.0186262 + 30 0.73767593 0 0 -4.6254647 0.49629637 + 40 0.69517962 0 0 -4.6253506 0.69303877 + 50 0.70150496 0 0 -4.6259832 0.59551518 +Loop time of 0.0416595 on 2 procs for 50 steps with 500 atoms + +Performance: 518489.499 tau/day, 1200.207 timesteps/s +56.5% CPU use with 2 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 2.861e-06 | 3.3379e-06 | 3.8147e-06 | 0.0 | 0.01 +Comm | 0.00013399 | 0.00013685 | 0.00013971 | 0.0 | 0.33 +Output | 8.6784e-05 | 0.00011206 | 0.00013733 | 0.0 | 0.27 +Modify | 0.040948 | 0.04103 | 0.041112 | 0.0 | 98.49 +Other | | 0.0003769 | | | 0.90 + +Nlocal: 250 ave 255 max 245 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.g++.1 b/examples/message/log.28Aug18.message.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..c06af4e0d1584a740ee3ed501bb9c0185c7e9444 --- /dev/null +++ b/examples/message/log.28Aug18.message.g++.1 @@ -0,0 +1,85 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - no client/server mode + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000682831 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +thermo 10 +run 50 +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 = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.143 | 3.143 | 3.143 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6176881 -5.0221006 + 10 1.1347688 -6.3153532 0 -4.6166043 -2.6072847 + 20 0.628166 -5.5624945 0 -4.62213 1.0186262 + 30 0.73767593 -5.7297655 0 -4.6254647 0.49629637 + 40 0.69517962 -5.6660345 0 -4.6253506 0.69303877 + 50 0.70150496 -5.6761362 0 -4.6259832 0.59551518 +Loop time of 0.039681 on 1 procs for 50 steps with 500 atoms + +Performance: 544341.699 tau/day, 1260.050 timesteps/s +99.2% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.029993 | 0.029993 | 0.029993 | 0.0 | 75.59 +Neigh | 0.0073051 | 0.0073051 | 0.0073051 | 0.0 | 18.41 +Comm | 0.0012736 | 0.0012736 | 0.0012736 | 0.0 | 3.21 +Output | 0.00012803 | 0.00012803 | 0.00012803 | 0.0 | 0.32 +Modify | 0.00053287 | 0.00053287 | 0.00053287 | 0.0 | 1.34 +Other | | 0.000448 | | | 1.13 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1946 ave 1946 max 1946 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18820 ave 18820 max 18820 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18820 +Ave neighs/atom = 37.64 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.g++.4 b/examples/message/log.28Aug18.message.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..695b51f166e463afc9bb4136d57e91f4fa676143 --- /dev/null +++ b/examples/message/log.28Aug18.message.g++.4 @@ -0,0 +1,85 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - no client/server mode + +variable x index 5 +variable y index 5 +variable z index 5 + +units lj +atom_style atomic + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.39798 8.39798 8.39798) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + Time spent = 0.000656843 secs +mass 1 1.0 + +velocity all create 1.44 87287 loop geom + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +# same with NPT +#fix 1 all npt temp 1.0 1.0 0.1 iso 1 1 1.0 + +thermo 10 +run 50 +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 = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.109 | 3.109 | 3.109 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1.44 -6.7733681 0 -4.6176881 -5.0221006 + 10 1.1347688 -6.3153532 0 -4.6166043 -2.6072847 + 20 0.628166 -5.5624945 0 -4.62213 1.0186262 + 30 0.73767593 -5.7297655 0 -4.6254647 0.49629637 + 40 0.69517962 -5.6660345 0 -4.6253506 0.69303877 + 50 0.70150496 -5.6761362 0 -4.6259832 0.59551518 +Loop time of 0.0131519 on 4 procs for 50 steps with 500 atoms + +Performance: 1642350.242 tau/day, 3801.737 timesteps/s +97.9% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.006074 | 0.0065379 | 0.0072589 | 0.6 | 49.71 +Neigh | 0.0014219 | 0.0015552 | 0.0017018 | 0.3 | 11.82 +Comm | 0.003546 | 0.0043943 | 0.0049584 | 0.8 | 33.41 +Output | 0.000108 | 0.00012845 | 0.00016999 | 0.0 | 0.98 +Modify | 0.00014353 | 0.00014949 | 0.00015569 | 0.0 | 1.14 +Other | | 0.0003865 | | | 2.94 + +Nlocal: 125 ave 128 max 121 min +Histogram: 1 0 0 0 1 0 0 0 1 1 +Nghost: 1091 ave 1094 max 1089 min +Histogram: 1 0 1 0 1 0 0 0 0 1 +Neighs: 4705 ave 4849 max 4648 min +Histogram: 2 1 0 0 0 0 0 0 0 1 + +Total # of neighbors = 18820 +Ave neighs/atom = 37.64 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.server.file.g++.1 b/examples/message/log.28Aug18.message.server.file.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..cf1418d3c5fdd5b4006470b353fe8e3c9609dd49 --- /dev/null +++ b/examples/message/log.28Aug18.message.server.file.g++.1 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md file tmp.couple + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 1 by 1 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:05 diff --git a/examples/message/log.28Aug18.message.server.file.g++.4 b/examples/message/log.28Aug18.message.server.file.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..c233bad692592ba370b9086626b156829951f81d --- /dev/null +++ b/examples/message/log.28Aug18.message.server.file.g++.4 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md file tmp.couple + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 2 by 2 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 2 by 2 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:05 diff --git a/examples/message/log.28Aug18.message.server.mpione.g++.1 b/examples/message/log.28Aug18.message.server.mpione.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..81e04aa9230b6e222d85ca8c0dbd6b71453d7ea3 --- /dev/null +++ b/examples/message/log.28Aug18.message.server.mpione.g++.1 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/one + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 1 by 1 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.server.mpione.g++.4 b/examples/message/log.28Aug18.message.server.mpione.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..a185cb1c29ff902ace0735a4da657dbb045bdb17 --- /dev/null +++ b/examples/message/log.28Aug18.message.server.mpione.g++.4 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/one + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 2 by 2 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 2 by 2 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.server.mpitwo.g++.1 b/examples/message/log.28Aug18.message.server.mpitwo.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..973a08eb6a571594b94d22efe5762097f651abb8 --- /dev/null +++ b/examples/message/log.28Aug18.message.server.mpitwo.g++.1 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/two tmp.couple + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 1 by 1 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.server.mpitwo.g++.4 b/examples/message/log.28Aug18.message.server.mpitwo.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..9e76e52d9034adf4826220aee6d95a94fbc85eae --- /dev/null +++ b/examples/message/log.28Aug18.message.server.mpitwo.g++.4 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/two tmp.couple + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 2 by 2 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 2 by 2 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.server.zmq.g++.1 b/examples/message/log.28Aug18.message.server.zmq.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..ce5729878b3cd2fd89b5638a1c1e317052b48151 --- /dev/null +++ b/examples/message/log.28Aug18.message.server.zmq.g++.1 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md zmq *:5555 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 1 by 1 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.server.zmq.g++.4 b/examples/message/log.28Aug18.message.server.zmq.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..b3201da4dad91007fea1224051d0938feccd08f9 --- /dev/null +++ b/examples/message/log.28Aug18.message.server.zmq.g++.4 @@ -0,0 +1,44 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md zmq *:5555 + +units lj +atom_style atomic +atom_modify map yes + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 +region box block 0 1 0 1 0 1 +create_box 1 box +Created orthogonal box = (0 0 0) to (1.6796 1.6796 1.6796) + 1 by 2 by 2 MPI processor grid +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 2 by 2 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +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 = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Server MD calls = 51 +Server MD reneighborings 5 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.tilt.client.mpione.g++.1 b/examples/message/log.28Aug18.message.tilt.client.mpione.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..a290ec307bb6a101348b023f9995f81fb9e2d740 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.client.mpione.g++.1 @@ -0,0 +1,130 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/one + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000485897 secs +mass * 1.0 + +velocity all create 1.44 87287 loop geom + +region slice block 4 6 INF INF INF INF +set region slice type 2 + 40 settings made for type + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 +fix 2 all deform 1 xy erate 0.01 remap v + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +thermo 1000 +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 15.3919, bins = 1 1 1 + 0 neighbor lists, perpetual/occasional/extra = 0 0 0 +Per MPI rank memory allocation (min/avg/max) = 2.308 | 2.308 | 2.308 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.0086399 0 1.3760711 6.8772078 0.61567613 + 2000 1.0707188 0 1.3744107 6.628097 1.2313523 + 3000 1.0627515 0 1.310096 6.1647179 1.8470284 + 4000 0.94091054 0 1.268976 6.4723215 2.4627045 + 5000 1.0218949 0 1.2430242 5.6945977 3.0783806 + 6000 0.98649481 0 1.1997565 5.2870413 3.6940568 + 7000 0.9047957 0 1.1461262 5.9291636 4.3097329 + 8000 0.85697614 0 1.0437412 5.0652097 4.925409 + 9000 0.84208329 0 1.109218 6.1749808 5.5410852 + 10000 0.86418108 0 1.1594773 6.2581867 6.1567613 + 11000 0.95136356 0 1.1650901 5.8389085 6.7724374 + 12000 0.94571583 0 1.2210342 6.2498816 7.3881135 + 13000 0.95994288 0 1.2172042 5.9608165 -7.3881135 + 14000 0.99053999 0 1.2925597 6.9994446 -6.7724374 + 15000 1.0316726 0 1.3346023 6.6902672 -6.1567613 + 16000 0.99537481 0 1.3227696 7.0301123 -5.5410852 + 17000 1.0306843 0 1.3101457 6.4750102 -4.925409 + 18000 1.071154 0 1.2947547 5.695888 -4.3097329 + 19000 0.97120752 0 1.3035465 7.3945362 -3.6940568 + 20000 0.97198994 0 1.2244663 6.0047605 -3.0783806 + 21000 0.97943545 0 1.2393394 6.3871012 -2.4627045 + 22000 0.98550707 0 1.1768148 5.019967 -1.8470284 + 23000 0.96920052 0 1.1730698 5.7944947 -1.2313523 + 24000 0.94069959 0 1.184119 5.8434876 -0.61567613 + 25000 0.91569312 0 1.1642118 5.668997 0 + 26000 0.98882932 0 1.1999248 5.0115507 0.61567613 + 27000 0.8972608 0 1.2556546 7.0837158 1.2313523 + 28000 0.93554756 0 1.2221911 5.9302841 1.8470284 + 29000 0.97894608 0 1.2168736 5.5766766 2.4627045 + 30000 0.97877055 0 1.2575839 6.4308887 3.0783806 + 31000 1.0002387 0 1.2338069 5.3873124 3.6940568 + 32000 0.89608618 0 1.2382021 6.7892204 4.3097329 + 33000 0.87439302 0 1.2252635 7.078134 4.925409 + 34000 1.076102 0 1.2991393 5.5556892 5.5410852 + 35000 1.0018689 0 1.272105 6.1320483 6.1567613 + 36000 0.93327214 0 1.2428039 7.0030867 6.7724374 + 37000 1.0770236 0 1.3002931 5.4996076 7.3881135 + 38000 0.98715132 0 1.215562 5.5958335 -7.3881135 + 39000 0.95028417 0 1.2566706 6.4133713 -6.7724374 + 40000 1.0445585 0 1.241151 5.3589806 -6.1567613 + 41000 0.93799713 0 1.2109086 6.4957845 -5.5410852 + 42000 0.99231038 0 1.2228781 5.9363471 -4.925409 + 43000 0.97913815 0 1.1854842 5.8837987 -4.3097329 + 44000 0.86748838 0 1.1616201 6.8991278 -3.6940568 + 45000 0.96284421 0 1.1549383 5.1226785 -3.0783806 + 46000 0.98701623 0 1.170581 4.9719567 -2.4627045 + 47000 0.92618683 0 1.2146576 6.7100075 -1.8470284 + 48000 1.0092593 0 1.2523988 5.7067864 -1.2313523 + 49000 1.0187472 0 1.271608 5.3355092 -0.61567613 + 50000 1.0194881 0 1.2831094 6.2449759 0 +Loop time of 1.74559 on 1 procs for 50000 steps with 160 atoms + +Performance: 12374053.445 tau/day, 28643.642 timesteps/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0.0020533 | 0.0020533 | 0.0020533 | 0.0 | 0.12 +Comm | 0.015517 | 0.015517 | 0.015517 | 0.0 | 0.89 +Output | 0.00052404 | 0.00052404 | 0.00052404 | 0.0 | 0.03 +Modify | 1.6784 | 1.6784 | 1.6784 | 0.0 | 96.15 +Other | | 0.04905 | | | 2.81 + +Nlocal: 160 ave 160 max 160 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 5270 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/message/log.28Aug18.message.tilt.client.mpione.g++.2 b/examples/message/log.28Aug18.message.tilt.client.mpione.g++.2 new file mode 100644 index 0000000000000000000000000000000000000000..0089732355cd35c3dd08ace88fdec38404630670 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.client.mpione.g++.2 @@ -0,0 +1,130 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/one + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000453949 secs +mass * 1.0 + +velocity all create 1.44 87287 loop geom + +region slice block 4 6 INF INF INF INF +set region slice type 2 + 40 settings made for type + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 +fix 2 all deform 1 xy erate 0.01 remap v + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +thermo 1000 +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 15.3919, bins = 1 1 1 + 0 neighbor lists, perpetual/occasional/extra = 0 0 0 +Per MPI rank memory allocation (min/avg/max) = 2.308 | 2.308 | 2.308 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.0876599 0 1.3637783 6.063363 0.61567613 + 2000 1.0722996 0 1.4108622 7.0518942 1.2313523 + 3000 1.0580774 0 1.3845895 6.0395275 1.8470284 + 4000 1.0068006 0 1.3804387 7.0944598 2.4627045 + 5000 0.95391814 0 1.2578438 6.1878831 3.0783806 + 6000 0.93492945 0 1.2711287 7.0440517 3.6940568 + 7000 0.94107853 0 1.2384371 6.1438077 4.3097329 + 8000 0.89711744 0 1.145748 6.3558305 4.925409 + 9000 0.90190304 0 1.0860684 4.957098 5.5410852 + 10000 0.84255749 0 1.0376892 5.2351795 6.1567613 + 11000 0.90250882 0 1.0497695 4.3844838 6.7724374 + 12000 0.83461274 0 1.0281949 5.1534361 7.3881135 + 13000 0.80315331 0 1.0226333 5.757222 -7.3881135 + 14000 0.81820939 0 0.99276466 4.6943725 -6.7724374 + 15000 0.8239631 0 1.0408289 5.1669006 -6.1567613 + 16000 0.88908894 0 1.1554855 6.3510278 -5.5410852 + 17000 0.98268136 0 1.2086981 5.6302847 -4.925409 + 18000 1.0098162 0 1.3687676 7.5243587 -4.3097329 + 19000 1.0795086 0 1.4562691 7.639418 -3.6940568 + 20000 1.1932155 0 1.5278988 7.0668432 -3.0783806 + 21000 1.2424296 0 1.6048792 7.959585 -2.4627045 + 22000 1.297169 0 1.7421262 8.9432388 -1.8470284 + 23000 1.2863494 0 1.7236774 8.3584973 -1.2313523 + 24000 1.4084347 0 1.7370339 7.2729078 -0.61567613 + 25000 1.3339728 0 1.6883255 7.529098 0 + 26000 1.1483243 0 1.5155578 7.3869994 0.61567613 + 27000 1.1372606 0 1.4368323 7.0580136 1.2313523 + 28000 1.0518579 0 1.355311 6.478857 1.8470284 + 29000 1.0581145 0 1.2535509 5.3697479 2.4627045 + 30000 0.93612564 0 1.185532 5.5520142 3.0783806 + 31000 0.94387516 0 1.1716454 5.8655485 3.6940568 + 32000 0.83953515 0 1.0737746 5.5551953 4.3097329 + 33000 0.84862926 0 1.0564042 5.7795428 4.925409 + 34000 0.83621877 0 1.079387 5.7514243 5.5410852 + 35000 0.86938506 0 1.031783 4.5897825 6.1567613 + 36000 0.88990609 0 1.0807597 5.3751744 6.7724374 + 37000 0.89534631 0 1.1238882 5.2400355 7.3881135 + 38000 0.98545003 0 1.2121125 5.7783854 -7.3881135 + 39000 0.96737778 0 1.2472934 6.1139 -6.7724374 + 40000 1.0664194 0 1.2956811 5.7353661 -6.1567613 + 41000 1.0681494 0 1.3269435 6.3102722 -5.5410852 + 42000 1.0875422 0 1.3963739 7.1208066 -4.925409 + 43000 1.0968173 0 1.3388062 6.1704339 -4.3097329 + 44000 1.1182109 0 1.3773214 7.0872686 -3.6940568 + 45000 1.1243261 0 1.432186 6.884782 -3.0783806 + 46000 1.039713 0 1.4389721 7.5585257 -2.4627045 + 47000 1.0816108 0 1.4100361 6.4611126 -1.8470284 + 48000 0.97637127 0 1.3605389 7.3992744 -1.2313523 + 49000 1.0361978 0 1.2721873 5.8166109 -0.61567613 + 50000 0.92367087 0 1.1875669 6.4685214 0 +Loop time of 2.82785 on 2 procs for 50000 steps with 160 atoms + +Performance: 7638300.565 tau/day, 17681.251 timesteps/s +100.0% CPU use with 2 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0.0011888 | 0.0012611 | 0.0013335 | 0.2 | 0.04 +Comm | 0.024838 | 0.025075 | 0.025312 | 0.1 | 0.89 +Output | 0.0003581 | 0.00052559 | 0.00069308 | 0.0 | 0.02 +Modify | 2.7209 | 2.7263 | 2.7318 | 0.3 | 96.41 +Other | | 0.07465 | | | 2.64 + +Nlocal: 80 ave 80 max 80 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 5257 +Dangerous builds = 0 +Total wall time: 0:00:02 diff --git a/examples/message/log.28Aug18.message.tilt.client.mpitwo.g++.1 b/examples/message/log.28Aug18.message.tilt.client.mpitwo.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..814b3df1aa8daaaf6fcb260f1e7bda9f1d7505b0 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.client.mpitwo.g++.1 @@ -0,0 +1,130 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/two tmp.couple + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000543118 secs +mass * 1.0 + +velocity all create 1.44 87287 loop geom + +region slice block 4 6 INF INF INF INF +set region slice type 2 + 40 settings made for type + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 +fix 2 all deform 1 xy erate 0.01 remap v + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +thermo 1000 +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 15.3919, bins = 1 1 1 + 0 neighbor lists, perpetual/occasional/extra = 0 0 0 +Per MPI rank memory allocation (min/avg/max) = 2.308 | 2.308 | 2.308 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.0086399 0 1.3760711 6.8772078 0.61567613 + 2000 1.0707188 0 1.3744107 6.628097 1.2313523 + 3000 1.0627515 0 1.310096 6.1647179 1.8470284 + 4000 0.94091054 0 1.268976 6.4723215 2.4627045 + 5000 1.0218949 0 1.2430242 5.6945977 3.0783806 + 6000 0.98649481 0 1.1997565 5.2870413 3.6940568 + 7000 0.9047957 0 1.1461262 5.9291636 4.3097329 + 8000 0.85697614 0 1.0437412 5.0652097 4.925409 + 9000 0.84208329 0 1.109218 6.1749808 5.5410852 + 10000 0.86418108 0 1.1594773 6.2581867 6.1567613 + 11000 0.95136356 0 1.1650901 5.8389085 6.7724374 + 12000 0.94571583 0 1.2210342 6.2498816 7.3881135 + 13000 0.95994288 0 1.2172042 5.9608165 -7.3881135 + 14000 0.99053999 0 1.2925597 6.9994446 -6.7724374 + 15000 1.0316726 0 1.3346023 6.6902672 -6.1567613 + 16000 0.99537481 0 1.3227696 7.0301123 -5.5410852 + 17000 1.0306843 0 1.3101457 6.4750102 -4.925409 + 18000 1.071154 0 1.2947547 5.695888 -4.3097329 + 19000 0.97120752 0 1.3035465 7.3945362 -3.6940568 + 20000 0.97198994 0 1.2244663 6.0047605 -3.0783806 + 21000 0.97943545 0 1.2393394 6.3871012 -2.4627045 + 22000 0.98550707 0 1.1768148 5.019967 -1.8470284 + 23000 0.96920052 0 1.1730698 5.7944947 -1.2313523 + 24000 0.94069959 0 1.184119 5.8434876 -0.61567613 + 25000 0.91569312 0 1.1642118 5.668997 0 + 26000 0.98882932 0 1.1999248 5.0115507 0.61567613 + 27000 0.8972608 0 1.2556546 7.0837158 1.2313523 + 28000 0.93554756 0 1.2221911 5.9302841 1.8470284 + 29000 0.97894608 0 1.2168736 5.5766766 2.4627045 + 30000 0.97877055 0 1.2575839 6.4308887 3.0783806 + 31000 1.0002387 0 1.2338069 5.3873124 3.6940568 + 32000 0.89608618 0 1.2382021 6.7892204 4.3097329 + 33000 0.87439302 0 1.2252635 7.078134 4.925409 + 34000 1.076102 0 1.2991393 5.5556892 5.5410852 + 35000 1.0018689 0 1.272105 6.1320483 6.1567613 + 36000 0.93327214 0 1.2428039 7.0030867 6.7724374 + 37000 1.0770236 0 1.3002931 5.4996076 7.3881135 + 38000 0.98715132 0 1.215562 5.5958335 -7.3881135 + 39000 0.95028417 0 1.2566706 6.4133713 -6.7724374 + 40000 1.0445585 0 1.241151 5.3589806 -6.1567613 + 41000 0.93799713 0 1.2109086 6.4957845 -5.5410852 + 42000 0.99231038 0 1.2228781 5.9363471 -4.925409 + 43000 0.97913815 0 1.1854842 5.8837987 -4.3097329 + 44000 0.86748838 0 1.1616201 6.8991278 -3.6940568 + 45000 0.96284421 0 1.1549383 5.1226785 -3.0783806 + 46000 0.98701623 0 1.170581 4.9719567 -2.4627045 + 47000 0.92618683 0 1.2146576 6.7100075 -1.8470284 + 48000 1.0092593 0 1.2523988 5.7067864 -1.2313523 + 49000 1.0187472 0 1.271608 5.3355092 -0.61567613 + 50000 1.0194881 0 1.2831094 6.2449759 0 +Loop time of 4.80282 on 1 procs for 50000 steps with 160 atoms + +Performance: 4497356.047 tau/day, 10410.546 timesteps/s +50.2% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0.0032325 | 0.0032325 | 0.0032325 | 0.0 | 0.07 +Comm | 0.033613 | 0.033613 | 0.033613 | 0.0 | 0.70 +Output | 0.00089812 | 0.00089812 | 0.00089812 | 0.0 | 0.02 +Modify | 4.6706 | 4.6706 | 4.6706 | 0.0 | 97.25 +Other | | 0.09449 | | | 1.97 + +Nlocal: 160 ave 160 max 160 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 5270 +Dangerous builds = 0 +Total wall time: 0:00:04 diff --git a/examples/message/log.28Aug18.message.tilt.client.mpitwo.g++.2 b/examples/message/log.28Aug18.message.tilt.client.mpitwo.g++.2 new file mode 100644 index 0000000000000000000000000000000000000000..7c172d3727935fe6fe3b3b73178f84e11823d64b --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.client.mpitwo.g++.2 @@ -0,0 +1,130 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md mpi/two tmp.couple + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000574827 secs +mass * 1.0 + +velocity all create 1.44 87287 loop geom + +region slice block 4 6 INF INF INF INF +set region slice type 2 + 40 settings made for type + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 +fix 2 all deform 1 xy erate 0.01 remap v + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +thermo 1000 +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 15.3919, bins = 1 1 1 + 0 neighbor lists, perpetual/occasional/extra = 0 0 0 +Per MPI rank memory allocation (min/avg/max) = 2.308 | 2.308 | 2.308 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.0876599 0 1.3637783 6.063363 0.61567613 + 2000 1.0722996 0 1.4108622 7.0518942 1.2313523 + 3000 1.0580774 0 1.3845895 6.0395275 1.8470284 + 4000 1.0068006 0 1.3804387 7.0944598 2.4627045 + 5000 0.95391814 0 1.2578438 6.1878831 3.0783806 + 6000 0.93492945 0 1.2711287 7.0440517 3.6940568 + 7000 0.94107853 0 1.2384371 6.1438077 4.3097329 + 8000 0.89711744 0 1.145748 6.3558305 4.925409 + 9000 0.90190304 0 1.0860684 4.957098 5.5410852 + 10000 0.84255749 0 1.0376892 5.2351795 6.1567613 + 11000 0.90250882 0 1.0497695 4.3844838 6.7724374 + 12000 0.83461274 0 1.0281949 5.1534361 7.3881135 + 13000 0.80315331 0 1.0226333 5.757222 -7.3881135 + 14000 0.81820939 0 0.99276466 4.6943725 -6.7724374 + 15000 0.8239631 0 1.0408289 5.1669006 -6.1567613 + 16000 0.88908894 0 1.1554855 6.3510278 -5.5410852 + 17000 0.98268136 0 1.2086981 5.6302847 -4.925409 + 18000 1.0098162 0 1.3687676 7.5243587 -4.3097329 + 19000 1.0795086 0 1.4562691 7.639418 -3.6940568 + 20000 1.1932155 0 1.5278988 7.0668432 -3.0783806 + 21000 1.2424296 0 1.6048792 7.959585 -2.4627045 + 22000 1.297169 0 1.7421262 8.9432388 -1.8470284 + 23000 1.2863494 0 1.7236774 8.3584973 -1.2313523 + 24000 1.4084347 0 1.7370339 7.2729078 -0.61567613 + 25000 1.3339728 0 1.6883255 7.529098 0 + 26000 1.1483243 0 1.5155578 7.3869994 0.61567613 + 27000 1.1372606 0 1.4368323 7.0580136 1.2313523 + 28000 1.0518579 0 1.355311 6.478857 1.8470284 + 29000 1.0581145 0 1.2535509 5.3697479 2.4627045 + 30000 0.93612564 0 1.185532 5.5520142 3.0783806 + 31000 0.94387516 0 1.1716454 5.8655485 3.6940568 + 32000 0.83953515 0 1.0737746 5.5551953 4.3097329 + 33000 0.84862926 0 1.0564042 5.7795428 4.925409 + 34000 0.83621877 0 1.079387 5.7514243 5.5410852 + 35000 0.86938506 0 1.031783 4.5897825 6.1567613 + 36000 0.88990609 0 1.0807597 5.3751744 6.7724374 + 37000 0.89534631 0 1.1238882 5.2400355 7.3881135 + 38000 0.98545003 0 1.2121125 5.7783854 -7.3881135 + 39000 0.96737778 0 1.2472934 6.1139 -6.7724374 + 40000 1.0664194 0 1.2956811 5.7353661 -6.1567613 + 41000 1.0681494 0 1.3269435 6.3102722 -5.5410852 + 42000 1.0875422 0 1.3963739 7.1208066 -4.925409 + 43000 1.0968173 0 1.3388062 6.1704339 -4.3097329 + 44000 1.1182109 0 1.3773214 7.0872686 -3.6940568 + 45000 1.1243261 0 1.432186 6.884782 -3.0783806 + 46000 1.039713 0 1.4389721 7.5585257 -2.4627045 + 47000 1.0816108 0 1.4100361 6.4611126 -1.8470284 + 48000 0.97637127 0 1.3605389 7.3992744 -1.2313523 + 49000 1.0361978 0 1.2721873 5.8166109 -0.61567613 + 50000 0.92367087 0 1.1875669 6.4685214 0 +Loop time of 5.66536 on 2 procs for 50000 steps with 160 atoms + +Performance: 3812643.232 tau/day, 8825.563 timesteps/s +48.1% CPU use with 2 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0.0012836 | 0.0015377 | 0.0017917 | 0.6 | 0.03 +Comm | 0.037211 | 0.037922 | 0.038633 | 0.4 | 0.67 +Output | 0.00052023 | 0.00073683 | 0.00095344 | 0.0 | 0.01 +Modify | 5.5101 | 5.5105 | 5.511 | 0.0 | 97.27 +Other | | 0.1146 | | | 2.02 + +Nlocal: 80 ave 80 max 80 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 5257 +Dangerous builds = 0 +Total wall time: 0:00:06 diff --git a/examples/message/log.28Aug18.message.tilt.client.zmq.g++.1 b/examples/message/log.28Aug18.message.tilt.client.zmq.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..f5e2f220cd852a8c70cd8a04e8585918656e6f17 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.client.zmq.g++.1 @@ -0,0 +1,130 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md zmq localhost:5555 + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000530005 secs +mass * 1.0 + +velocity all create 1.44 87287 loop geom + +region slice block 4 6 INF INF INF INF +set region slice type 2 + 40 settings made for type + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 +fix 2 all deform 1 xy erate 0.01 remap v + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +thermo 1000 +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 15.3919, bins = 1 1 1 + 0 neighbor lists, perpetual/occasional/extra = 0 0 0 +Per MPI rank memory allocation (min/avg/max) = 2.308 | 2.308 | 2.308 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.0086399 0 1.3760711 6.8772078 0.61567613 + 2000 1.0707188 0 1.3744107 6.628097 1.2313523 + 3000 1.0627515 0 1.310096 6.1647179 1.8470284 + 4000 0.94091054 0 1.268976 6.4723215 2.4627045 + 5000 1.0218949 0 1.2430242 5.6945977 3.0783806 + 6000 0.98649481 0 1.1997565 5.2870413 3.6940568 + 7000 0.9047957 0 1.1461262 5.9291636 4.3097329 + 8000 0.85697614 0 1.0437412 5.0652097 4.925409 + 9000 0.84208329 0 1.109218 6.1749808 5.5410852 + 10000 0.86418108 0 1.1594773 6.2581867 6.1567613 + 11000 0.95136356 0 1.1650901 5.8389085 6.7724374 + 12000 0.94571583 0 1.2210342 6.2498816 7.3881135 + 13000 0.95994288 0 1.2172042 5.9608165 -7.3881135 + 14000 0.99053999 0 1.2925597 6.9994446 -6.7724374 + 15000 1.0316726 0 1.3346023 6.6902672 -6.1567613 + 16000 0.99537481 0 1.3227696 7.0301123 -5.5410852 + 17000 1.0306843 0 1.3101457 6.4750102 -4.925409 + 18000 1.071154 0 1.2947547 5.695888 -4.3097329 + 19000 0.97120752 0 1.3035465 7.3945362 -3.6940568 + 20000 0.97198994 0 1.2244663 6.0047605 -3.0783806 + 21000 0.97943545 0 1.2393394 6.3871012 -2.4627045 + 22000 0.98550707 0 1.1768148 5.019967 -1.8470284 + 23000 0.96920052 0 1.1730698 5.7944947 -1.2313523 + 24000 0.94069959 0 1.184119 5.8434876 -0.61567613 + 25000 0.91569312 0 1.1642118 5.668997 0 + 26000 0.98882932 0 1.1999248 5.0115507 0.61567613 + 27000 0.8972608 0 1.2556546 7.0837158 1.2313523 + 28000 0.93554756 0 1.2221911 5.9302841 1.8470284 + 29000 0.97894608 0 1.2168736 5.5766766 2.4627045 + 30000 0.97877055 0 1.2575839 6.4308887 3.0783806 + 31000 1.0002387 0 1.2338069 5.3873124 3.6940568 + 32000 0.89608618 0 1.2382021 6.7892204 4.3097329 + 33000 0.87439302 0 1.2252635 7.078134 4.925409 + 34000 1.076102 0 1.2991393 5.5556892 5.5410852 + 35000 1.0018689 0 1.272105 6.1320483 6.1567613 + 36000 0.93327214 0 1.2428039 7.0030867 6.7724374 + 37000 1.0770236 0 1.3002931 5.4996076 7.3881135 + 38000 0.98715132 0 1.215562 5.5958335 -7.3881135 + 39000 0.95028417 0 1.2566706 6.4133713 -6.7724374 + 40000 1.0445585 0 1.241151 5.3589806 -6.1567613 + 41000 0.93799713 0 1.2109086 6.4957845 -5.5410852 + 42000 0.99231038 0 1.2228781 5.9363471 -4.925409 + 43000 0.97913815 0 1.1854842 5.8837987 -4.3097329 + 44000 0.86748838 0 1.1616201 6.8991278 -3.6940568 + 45000 0.96284421 0 1.1549383 5.1226785 -3.0783806 + 46000 0.98701623 0 1.170581 4.9719567 -2.4627045 + 47000 0.92618683 0 1.2146576 6.7100075 -1.8470284 + 48000 1.0092593 0 1.2523988 5.7067864 -1.2313523 + 49000 1.0187472 0 1.271608 5.3355092 -0.61567613 + 50000 1.0194881 0 1.2831094 6.2449759 0 +Loop time of 12.9652 on 1 procs for 50000 steps with 160 atoms + +Performance: 1666000.147 tau/day, 3856.482 timesteps/s +23.2% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0.0018659 | 0.0018659 | 0.0018659 | 0.0 | 0.01 +Comm | 0.020679 | 0.020679 | 0.020679 | 0.0 | 0.16 +Output | 0.00052547 | 0.00052547 | 0.00052547 | 0.0 | 0.00 +Modify | 12.871 | 12.871 | 12.871 | 0.0 | 99.28 +Other | | 0.07062 | | | 0.54 + +Nlocal: 160 ave 160 max 160 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 5270 +Dangerous builds = 0 +Total wall time: 0:00:12 diff --git a/examples/message/log.28Aug18.message.tilt.client.zmq.g++.2 b/examples/message/log.28Aug18.message.tilt.client.zmq.g++.2 new file mode 100644 index 0000000000000000000000000000000000000000..8fc570f5da7b96a857715bbff46374cb4cd4ef1f --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.client.zmq.g++.2 @@ -0,0 +1,130 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - client script + +variable mode index file + +if "${mode} == file" then "message client md file tmp.couple" elif "${mode} == zmq" "message client md zmq localhost:5555" elif "${mode} == mpione" "message client md mpi/one" elif "${mode} == mpitwo" "message client md mpi/two tmp.couple" +message client md zmq localhost:5555 + +units lj +atom_style atomic +dimension 2 +atom_modify sort 0 0.0 map yes + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000673056 secs +mass * 1.0 + +velocity all create 1.44 87287 loop geom + +region slice block 4 6 INF INF INF INF +set region slice type 2 + 40 settings made for type + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 +fix 2 all deform 1 xy erate 0.01 remap v + +fix 3 all client/md +fix_modify 3 energy yes + +thermo_style custom step temp epair etotal press xy + +thermo 1000 +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 0 + ghost atom cutoff = 0 + binsize = 15.3919, bins = 1 1 1 + 0 neighbor lists, perpetual/occasional/extra = 0 0 0 +Per MPI rank memory allocation (min/avg/max) = 2.308 | 2.308 | 2.308 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.0876599 0 1.3637783 6.063363 0.61567613 + 2000 1.0722996 0 1.4108622 7.0518942 1.2313523 + 3000 1.0580774 0 1.3845895 6.0395275 1.8470284 + 4000 1.0068006 0 1.3804387 7.0944598 2.4627045 + 5000 0.95391814 0 1.2578438 6.1878831 3.0783806 + 6000 0.93492945 0 1.2711287 7.0440517 3.6940568 + 7000 0.94107853 0 1.2384371 6.1438077 4.3097329 + 8000 0.89711744 0 1.145748 6.3558305 4.925409 + 9000 0.90190304 0 1.0860684 4.957098 5.5410852 + 10000 0.84255749 0 1.0376892 5.2351795 6.1567613 + 11000 0.90250882 0 1.0497695 4.3844838 6.7724374 + 12000 0.83461274 0 1.0281949 5.1534361 7.3881135 + 13000 0.80315331 0 1.0226333 5.757222 -7.3881135 + 14000 0.81820939 0 0.99276466 4.6943725 -6.7724374 + 15000 0.8239631 0 1.0408289 5.1669006 -6.1567613 + 16000 0.88908894 0 1.1554855 6.3510278 -5.5410852 + 17000 0.98268136 0 1.2086981 5.6302847 -4.925409 + 18000 1.0098162 0 1.3687676 7.5243587 -4.3097329 + 19000 1.0795086 0 1.4562691 7.639418 -3.6940568 + 20000 1.1932155 0 1.5278988 7.0668432 -3.0783806 + 21000 1.2424296 0 1.6048792 7.959585 -2.4627045 + 22000 1.297169 0 1.7421262 8.9432388 -1.8470284 + 23000 1.2863494 0 1.7236774 8.3584973 -1.2313523 + 24000 1.4084347 0 1.7370339 7.2729078 -0.61567613 + 25000 1.3339728 0 1.6883255 7.529098 0 + 26000 1.1483243 0 1.5155578 7.3869994 0.61567613 + 27000 1.1372606 0 1.4368323 7.0580136 1.2313523 + 28000 1.0518579 0 1.355311 6.478857 1.8470284 + 29000 1.0581145 0 1.2535509 5.3697479 2.4627045 + 30000 0.93612564 0 1.185532 5.5520142 3.0783806 + 31000 0.94387516 0 1.1716454 5.8655485 3.6940568 + 32000 0.83953515 0 1.0737746 5.5551953 4.3097329 + 33000 0.84862926 0 1.0564042 5.7795428 4.925409 + 34000 0.83621877 0 1.079387 5.7514243 5.5410852 + 35000 0.86938506 0 1.031783 4.5897825 6.1567613 + 36000 0.88990609 0 1.0807597 5.3751744 6.7724374 + 37000 0.89534631 0 1.1238882 5.2400355 7.3881135 + 38000 0.98545003 0 1.2121125 5.7783854 -7.3881135 + 39000 0.96737778 0 1.2472934 6.1139 -6.7724374 + 40000 1.0664194 0 1.2956811 5.7353661 -6.1567613 + 41000 1.0681494 0 1.3269435 6.3102722 -5.5410852 + 42000 1.0875422 0 1.3963739 7.1208066 -4.925409 + 43000 1.0968173 0 1.3388062 6.1704339 -4.3097329 + 44000 1.1182109 0 1.3773214 7.0872686 -3.6940568 + 45000 1.1243261 0 1.432186 6.884782 -3.0783806 + 46000 1.039713 0 1.4389721 7.5585257 -2.4627045 + 47000 1.0816108 0 1.4100361 6.4611126 -1.8470284 + 48000 0.97637127 0 1.3605389 7.3992744 -1.2313523 + 49000 1.0361978 0 1.2721873 5.8166109 -0.61567613 + 50000 0.92367087 0 1.1875669 6.4685214 0 +Loop time of 13.6129 on 2 procs for 50000 steps with 160 atoms + +Performance: 1586733.497 tau/day, 3672.994 timesteps/s +59.3% CPU use with 2 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0.0015125 | 0.0015551 | 0.0015976 | 0.1 | 0.01 +Comm | 0.026598 | 0.028413 | 0.030227 | 1.1 | 0.21 +Output | 0.00046492 | 0.00063884 | 0.00081277 | 0.0 | 0.00 +Modify | 13.465 | 13.483 | 13.501 | 0.5 | 99.04 +Other | | 0.0994 | | | 0.73 + +Nlocal: 80 ave 80 max 80 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Neighbor list builds = 5257 +Dangerous builds = 0 +Total wall time: 0:00:13 diff --git a/examples/message/log.28Aug18.message.tilt.g++.1 b/examples/message/log.28Aug18.message.tilt.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..3f7cfc9da01d9b125b581c2a6ef7cf74aa7242a0 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.g++.1 @@ -0,0 +1,129 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - no client/server mode + +units lj +atom_style atomic +dimension 2 + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000437021 secs +mass * 1.0 + +velocity all create 1.44 87287 loop geom + +region slice block 4 6 INF INF INF INF +set region slice type 2 + 40 settings made for type + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 +fix 2 all deform 1 xy erate 0.01 remap v + +thermo_style custom step temp epair etotal press xy + +thermo 1000 +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 24 19 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/2d/newton/tri + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.065 | 3.065 | 3.065 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.1326992 0.25863754 1.3842573 6.0588079 0.61567613 + 2000 1.0158438 0.33502643 1.3445212 7.2638652 1.2313523 + 3000 1.0968167 0.3149227 1.4048843 7.0653223 1.8470284 + 4000 1.0070993 0.40611915 1.4069241 7.7283521 2.4627045 + 5000 1.1153133 0.2674828 1.3758254 6.2949171 3.0783806 + 6000 1.0170665 0.25843673 1.2691466 6.049412 3.6940568 + 7000 1.0224605 0.20974914 1.2258193 5.5104976 4.3097329 + 8000 0.96149374 0.24035439 1.1958388 5.4179146 4.925409 + 9000 0.87759014 0.2590493 1.1311545 5.8711239 5.5410852 + 10000 0.83791968 0.23477897 1.0674617 5.666904 6.1567613 + 11000 0.87702487 0.22958877 1.1011322 5.9068062 6.7724374 + 12000 0.81507294 0.26375817 1.0737369 5.9166925 7.3881135 + 13000 0.85655284 0.24676491 1.0979643 5.6918734 -7.3881135 + 14000 0.84369293 0.27818471 1.1166046 6.4146184 -6.7724374 + 15000 0.90052173 0.19836095 1.0932544 5.2690913 -6.1567613 + 16000 0.83836874 0.26921637 1.1023453 5.9579526 -5.5410852 + 17000 0.90492897 0.21933098 1.1186041 5.6042194 -4.925409 + 18000 0.90113412 0.24880908 1.1443111 6.0634846 -4.3097329 + 19000 1.0160445 0.17252962 1.1822239 5.3149334 -3.6940568 + 20000 0.96217234 0.2414377 1.1975965 5.476653 -3.0783806 + 21000 0.98229664 0.27569118 1.2518485 5.9340174 -2.4627045 + 22000 1.0551763 0.26997615 1.3185576 6.2094112 -1.8470284 + 23000 1.051999 0.34076639 1.3861904 7.082385 -1.2313523 + 24000 1.1350071 0.23701844 1.3649317 6.1829742 -0.61567613 + 25000 1.0946409 0.33366032 1.4214597 7.1907559 0 + 26000 1.1511799 0.24626808 1.3902531 5.8469984 0.61567613 + 27000 1.1009203 0.25653085 1.3505704 6.1504287 1.2313523 + 28000 1.0521302 0.2876798 1.3332342 5.9906187 1.8470284 + 29000 1.0518465 0.21853 1.2638025 5.6577549 2.4627045 + 30000 0.97264625 0.28758145 1.2541487 6.5769804 3.0783806 + 31000 1.0133579 0.31575837 1.3227828 6.6650893 3.6940568 + 32000 1.0714324 0.28757036 1.3523063 6.2682059 4.3097329 + 33000 1.0739451 0.28062459 1.3478575 6.6862746 4.925409 + 34000 1.0056867 0.38289586 1.382297 7.1120131 5.5410852 + 35000 1.0911349 0.26370939 1.3480247 6.1476048 6.1567613 + 36000 1.0618618 0.28269593 1.3379211 6.9414608 6.7724374 + 37000 1.0704991 0.29974994 1.3635585 7.0834346 7.3881135 + 38000 1.1087507 0.2682201 1.3700411 5.8506019 -7.3881135 + 39000 1.1303733 0.22362416 1.3469326 5.2500269 -6.7724374 + 40000 1.0174248 0.28956571 1.3006316 6.4491571 -6.1567613 + 41000 0.95981887 0.29162143 1.2454414 6.4658646 -5.5410852 + 42000 0.88302144 0.30432252 1.1818251 6.7401923 -4.925409 + 43000 0.93164419 0.25110308 1.1769245 5.9067383 -4.3097329 + 44000 0.98352598 0.23322873 1.2106077 5.5606585 -3.6940568 + 45000 1.0247245 0.26503082 1.2833508 6.533394 -3.0783806 + 46000 0.93004532 0.32277782 1.2470104 6.4689179 -2.4627045 + 47000 1.0653176 0.29185413 1.3505135 6.9534569 -1.8470284 + 48000 1.0401524 0.3420245 1.3756759 6.8016042 -1.2313523 + 49000 1.0023407 0.31833091 1.314407 6.7385662 -0.61567613 + 50000 1.0566272 0.28657142 1.3365947 6.261203 0 +Loop time of 1.15672 on 1 procs for 50000 steps with 160 atoms + +Performance: 18673426.371 tau/day, 43225.524 timesteps/s +99.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.19267 | 0.19267 | 0.19267 | 0.0 | 16.66 +Neigh | 0.15156 | 0.15156 | 0.15156 | 0.0 | 13.10 +Comm | 0.044569 | 0.044569 | 0.044569 | 0.0 | 3.85 +Output | 0.00057936 | 0.00057936 | 0.00057936 | 0.0 | 0.05 +Modify | 0.71051 | 0.71051 | 0.71051 | 0.0 | 61.42 +Other | | 0.05684 | | | 4.91 + +Nlocal: 160 ave 160 max 160 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 71 ave 71 max 71 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 362 ave 362 max 362 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 362 +Ave neighs/atom = 2.2625 +Neighbor list builds = 5256 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/message/log.28Aug18.message.tilt.g++.4 b/examples/message/log.28Aug18.message.tilt.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..74061463f6bdb67be6356b4ec7d0a66635aef989 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.g++.4 @@ -0,0 +1,129 @@ +LAMMPS (22 Aug 2018) +# 2d NEMD simulation - no client/server mode + +units lj +atom_style atomic +dimension 2 + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000396967 secs +mass * 1.0 + +velocity all create 1.44 87287 loop geom + +region slice block 4 6 INF INF INF INF +set region slice type 2 + 40 settings made for type + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 +fix 2 all deform 1 xy erate 0.01 remap v + +thermo_style custom step temp epair etotal press xy + +thermo 1000 +run 50000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 24 19 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/2d/newton/tri + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.065 | 3.065 | 3.065 Mbytes +Step Temp E_pair TotEng Press Xy + 0 1.44 0 1.431 1.2080502 0 + 1000 1.1326992 0.25863754 1.3842573 6.0588079 0.61567613 + 2000 1.0158438 0.33502643 1.3445212 7.2638652 1.2313523 + 3000 1.0968167 0.3149227 1.4048843 7.0653223 1.8470284 + 4000 1.0070993 0.40611915 1.4069241 7.7283521 2.4627045 + 5000 1.1153133 0.2674828 1.3758254 6.2949171 3.0783806 + 6000 1.0170665 0.25843673 1.2691466 6.049412 3.6940568 + 7000 1.0224605 0.20974914 1.2258193 5.5104976 4.3097329 + 8000 0.96149374 0.24035439 1.1958388 5.4179146 4.925409 + 9000 0.87759014 0.2590493 1.1311545 5.8711239 5.5410852 + 10000 0.83791968 0.23477897 1.0674617 5.666904 6.1567613 + 11000 0.87702487 0.22958877 1.1011322 5.9068062 6.7724374 + 12000 0.81507294 0.26375817 1.0737369 5.9166925 7.3881135 + 13000 0.85655284 0.24676491 1.0979643 5.6918734 -7.3881135 + 14000 0.84369293 0.27818471 1.1166046 6.4146184 -6.7724374 + 15000 0.90052173 0.19836095 1.0932544 5.2690913 -6.1567613 + 16000 0.83836874 0.26921637 1.1023453 5.9579526 -5.5410852 + 17000 0.90492897 0.21933098 1.1186041 5.6042194 -4.925409 + 18000 0.90113412 0.24880908 1.1443111 6.0634846 -4.3097329 + 19000 1.0160445 0.17252962 1.1822239 5.3149334 -3.6940568 + 20000 0.96217234 0.2414377 1.1975965 5.476653 -3.0783806 + 21000 0.98229664 0.27569118 1.2518485 5.9340174 -2.4627045 + 22000 1.0551763 0.26997615 1.3185576 6.2094112 -1.8470284 + 23000 1.051999 0.34076639 1.3861904 7.082385 -1.2313523 + 24000 1.1350071 0.23701844 1.3649317 6.1829742 -0.61567613 + 25000 1.0946409 0.33366032 1.4214597 7.1907559 0 + 26000 1.1511799 0.24626808 1.3902531 5.8469984 0.61567613 + 27000 1.1009203 0.25653085 1.3505704 6.1504287 1.2313523 + 28000 1.0521302 0.2876798 1.3332342 5.9906187 1.8470284 + 29000 1.0518465 0.21853 1.2638025 5.6577549 2.4627045 + 30000 0.97264625 0.28758145 1.2541487 6.5769804 3.0783806 + 31000 1.0133579 0.31575837 1.3227828 6.6650893 3.6940568 + 32000 1.0714324 0.28757036 1.3523063 6.2682059 4.3097329 + 33000 1.0739451 0.28062459 1.3478575 6.6862746 4.925409 + 34000 1.0056867 0.38289586 1.382297 7.1120131 5.5410852 + 35000 1.0911349 0.26370939 1.3480247 6.1476048 6.1567613 + 36000 1.0618618 0.28269593 1.3379211 6.9414608 6.7724374 + 37000 1.0704991 0.29974994 1.3635585 7.0834346 7.3881135 + 38000 1.1087507 0.2682201 1.3700411 5.8506019 -7.3881135 + 39000 1.1303733 0.22362416 1.3469326 5.2500269 -6.7724374 + 40000 1.0174248 0.28956571 1.3006316 6.4491571 -6.1567613 + 41000 0.95981887 0.29162143 1.2454414 6.4658646 -5.5410852 + 42000 0.88302144 0.30432252 1.1818251 6.7401923 -4.925409 + 43000 0.93164419 0.25110308 1.1769245 5.9067383 -4.3097329 + 44000 0.98352598 0.23322873 1.2106077 5.5606585 -3.6940568 + 45000 1.0247245 0.26503082 1.2833508 6.533394 -3.0783806 + 46000 0.93004532 0.32277782 1.2470104 6.4689179 -2.4627045 + 47000 1.0653176 0.29185413 1.3505135 6.9534569 -1.8470284 + 48000 1.0401524 0.3420245 1.3756759 6.8016042 -1.2313523 + 49000 1.0023407 0.31833091 1.314407 6.7385662 -0.61567613 + 50000 1.0566272 0.28657142 1.3365947 6.261203 0 +Loop time of 0.92653 on 1 procs for 50000 steps with 160 atoms + +Performance: 23312793.646 tau/day, 53964.800 timesteps/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.15063 | 0.15063 | 0.15063 | 0.0 | 16.26 +Neigh | 0.11869 | 0.11869 | 0.11869 | 0.0 | 12.81 +Comm | 0.035839 | 0.035839 | 0.035839 | 0.0 | 3.87 +Output | 0.00064468 | 0.00064468 | 0.00064468 | 0.0 | 0.07 +Modify | 0.57422 | 0.57422 | 0.57422 | 0.0 | 61.98 +Other | | 0.0465 | | | 5.02 + +Nlocal: 160 ave 160 max 160 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 71 ave 71 max 71 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 362 ave 362 max 362 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 362 +Ave neighs/atom = 2.2625 +Neighbor list builds = 5256 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/message/log.28Aug18.message.tilt.server.mpione.g++.1 b/examples/message/log.28Aug18.message.tilt.server.mpione.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..428ff346ad47e960e6cd188a3a4dc9e42d8d14a6 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.server.mpione.g++.1 @@ -0,0 +1,48 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/one + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000438929 secs +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 24 19 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/2d/newton/tri + bin: standard +Server MD calls = 50001 +Server MD reneighborings 5073 +Total wall time: 0:00:01 diff --git a/examples/message/log.28Aug18.message.tilt.server.mpione.g++.4 b/examples/message/log.28Aug18.message.tilt.server.mpione.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..3da50163eda27b4109997a41f08feacacce43bfe --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.server.mpione.g++.4 @@ -0,0 +1,48 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/one + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 2 by 2 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000455141 secs +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 2 by 2 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 24 19 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/2d/newton/tri + bin: standard +Server MD calls = 50001 +Server MD reneighborings 5066 +Total wall time: 0:00:02 diff --git a/examples/message/log.28Aug18.message.tilt.server.mpitwo.g++.1 b/examples/message/log.28Aug18.message.tilt.server.mpitwo.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..fc29a6da63fcce1e90b225802b48be7f2468ab46 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.server.mpitwo.g++.1 @@ -0,0 +1,48 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/two tmp.couple + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000521898 secs +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 24 19 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/2d/newton/tri + bin: standard +Server MD calls = 50001 +Server MD reneighborings 5073 +Total wall time: 0:00:04 diff --git a/examples/message/log.28Aug18.message.tilt.server.mpitwo.g++.4 b/examples/message/log.28Aug18.message.tilt.server.mpitwo.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..758b84fe9d45d811eb7051aae852e49eb5ab9ffc --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.server.mpitwo.g++.4 @@ -0,0 +1,48 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md mpi/two tmp.couple + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 2 by 2 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000378847 secs +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 2 by 2 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 24 19 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/2d/newton/tri + bin: standard +Server MD calls = 50001 +Server MD reneighborings 5066 +Total wall time: 0:00:06 diff --git a/examples/message/log.28Aug18.message.tilt.server.zmq.g++.1 b/examples/message/log.28Aug18.message.tilt.server.zmq.g++.1 new file mode 100644 index 0000000000000000000000000000000000000000..78526ba74895f2ea873ece689faa73da78e984a8 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.server.zmq.g++.1 @@ -0,0 +1,48 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md zmq *:5555 + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000557184 secs +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 1 by 1 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 24 19 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/2d/newton/tri + bin: standard +Server MD calls = 50001 +Server MD reneighborings 5073 +Total wall time: 0:00:12 diff --git a/examples/message/log.28Aug18.message.tilt.server.zmq.g++.4 b/examples/message/log.28Aug18.message.tilt.server.zmq.g++.4 new file mode 100644 index 0000000000000000000000000000000000000000..b1ad7684708ceaad098d090f58985756ba4adc90 --- /dev/null +++ b/examples/message/log.28Aug18.message.tilt.server.zmq.g++.4 @@ -0,0 +1,48 @@ +LAMMPS (22 Aug 2018) +# 3d Lennard-Jones melt - server script + +variable mode index file + +if "${mode} == file" then "message server md file tmp.couple" elif "${mode} == zmq" "message server md zmq *:5555" elif "${mode} == mpione" "message server md mpi/one" elif "${mode} == mpitwo" "message server md mpi/two tmp.couple" +message server md zmq *:5555 + +units lj +atom_style atomic +dimension 2 +atom_modify map yes + +lattice sq2 0.8442 +Lattice spacing in x,y,z = 1.53919 1.53919 1.53919 +region box prism 0 10 0 8 -0.5 0.5 0 0 0 +create_box 2 box +Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0) + 2 by 2 by 1 MPI processor grid +create_atoms 1 box +Created 160 atoms + Time spent = 0.000586987 secs +mass * 1.0 # masses not used by server + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 1.0 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +server md + 2 by 2 by 1 MPI processor grid +WARNING: No fixes defined, atoms won't move (../verlet.cpp:55) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 1.3 + ghost atom cutoff = 1.3 + binsize = 0.65, bins = 24 19 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton/tri + stencil: half/bin/2d/newton/tri + bin: standard +Server MD calls = 50001 +Server MD reneighborings 5066 +Total wall time: 0:00:13 diff --git a/lib/README b/lib/README index 3c8f46dd0a957162660045fc76caeafceb03adec..12c27b2a397d7b0fd9c7f90819774615e5900deb 100644 --- a/lib/README +++ b/lib/README @@ -35,6 +35,8 @@ linalg set of BLAS and LAPACK routines needed by USER-ATC package from Axel Kohlmeyer (Temple U) meam modified embedded atom method (MEAM) potential, MEAM package from Greg Wagner (Sandia) +message client/server communication library via MPI, sockets, files + from Steve Plimpton (Sandia) molfile hooks to VMD molfile plugins, used by the USER-MOLFILE package from Axel Kohlmeyer (Temple U) and the VMD development team mscg hooks to the MSCG library, used by fix_mscg command diff --git a/lib/message/Install.py b/lib/message/Install.py new file mode 100644 index 0000000000000000000000000000000000000000..d3f31c986fba19e9d3fd476ad71c0e14c6616c0f --- /dev/null +++ b/lib/message/Install.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python + +# Install.py tool to build the CSlib library +# used to automate the steps described in the README file in this dir + +from __future__ import print_function +import sys,os,re,subprocess + +# help message + +help = """ +Syntax from src dir: make lib-message args="-m" + or: make lib-message args="-s -z" +Syntax from lib dir: python Install.py -m + or: python Install.py -s -z + +specify zero or more options, order does not matter + + -m = parallel build of CSlib library + -s = serial build of CSlib library + -z = build CSlib library with ZMQ socket support, default = no ZMQ support + +Example: + +make lib-message args="-m -z" # build parallel CSlib with ZMQ support +make lib-message args="-s" # build serial CSlib with no ZMQ support +""" + +# print error message or help + +def error(str=None): + if not str: print(help) + else: print("ERROR",str) + sys.exit() + +# expand to full path name +# process leading '~' or relative path + +def fullpath(path): + return os.path.abspath(os.path.expanduser(path)) + +def which(program): + def is_exe(fpath): + return os.path.isfile(fpath) and os.access(fpath, os.X_OK) + + fpath, fname = os.path.split(program) + if fpath: + if is_exe(program): + return program + else: + for path in os.environ["PATH"].split(os.pathsep): + path = path.strip('"') + exe_file = os.path.join(path, program) + if is_exe(exe_file): + return exe_file + + return None + +# parse args + +args = sys.argv[1:] +nargs = len(args) +if nargs == 0: error() + +mpiflag = False +serialflag = False +zmqflag = False + +iarg = 0 +while iarg < nargs: + if args[iarg] == "-m": + mpiflag = True + iarg += 1 + elif args[iarg] == "-s": + serialflag = True + iarg += 1 + elif args[iarg] == "-z": + zmqflag = True + iarg += 1 + else: error() + +if (not mpiflag and not serialflag): + error("Must use either -m or -s flag") + +if (mpiflag and serialflag): + error("Cannot use -m and -s flag at the same time") + +# build CSlib +# copy resulting lib to cslib/src/libmessage.a +# copy appropriate Makefile.lammps.* to Makefile.lammps + +print("Building CSlib ...") +srcdir = fullpath("./cslib/src") + +if mpiflag and zmqflag: + cmd = "cd %s; make lib_parallel" % srcdir +elif mpiflag and not zmqflag: + cmd = "cd %s; make lib_parallel zmq=no" % srcdir +elif not mpiflag and zmqflag: + cmd = "cd %s; make lib_serial" % srcdir +elif not mpiflag and not zmqflag: + cmd = "cd %s; make lib_serial zmq=no" % srcdir + +print(cmd) +txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) +print(txt.decode('UTF-8')) + +if mpiflag: cmd = "cd %s; cp libcsmpi.a libmessage.a" % srcdir +else: cmd = "cd %s; cp libcsnompi.a libmessage.a" % srcdir +print(cmd) +txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) +print(txt.decode('UTF-8')) + +if zmqflag: cmd = "cp Makefile.lammps.zmq Makefile.lammps" +else: cmd = "cp Makefile.lammps.nozmq Makefile.lammps" +print(cmd) +txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) +print(txt.decode('UTF-8')) diff --git a/lib/message/Makefile.lammps.nozmq b/lib/message/Makefile.lammps.nozmq new file mode 100644 index 0000000000000000000000000000000000000000..1bb10cc98876d90ca1e34941451165fab7a51573 --- /dev/null +++ b/lib/message/Makefile.lammps.nozmq @@ -0,0 +1,5 @@ +# Settings that the LAMMPS build will import when this package library is used + +message_SYSINC = +message_SYSLIB = +message_SYSPATH = diff --git a/lib/message/Makefile.lammps.zmq b/lib/message/Makefile.lammps.zmq new file mode 100644 index 0000000000000000000000000000000000000000..759f2ce04b9ac229beb590d4fad8e861585591e8 --- /dev/null +++ b/lib/message/Makefile.lammps.zmq @@ -0,0 +1,5 @@ +# Settings that the LAMMPS build will import when this package library is used + +message_SYSINC = +message_SYSLIB = -lzmq +message_SYSPATH = diff --git a/lib/message/README b/lib/message/README new file mode 100644 index 0000000000000000000000000000000000000000..dafb94e9eff621f0b7a7782751f0bc91296d33b0 --- /dev/null +++ b/lib/message/README @@ -0,0 +1,51 @@ +This directory contains the CSlib library which is required +to use the MESSAGE package and its client/server commands +in a LAMMPS input script. + +The CSlib libary is included in the LAMMPS distribution. A fuller +version including documentation and test programs is available at +http://cslib.sandia.gov. It was developed by Steve Plimpton at Sandia +National Laboratories. + +You can type "make lib-message" from the src directory to see help on +how to build this library via make commands, or you can do the same +thing by typing "python Install.py" from within this directory, or you +can do it manually by following the instructions below. + +The CSlib can be optionally built with support for sockets using +the open-source ZeroMQ (ZMQ) library. If it is not installed +on your system, it is easy to download and install. + +Go to the ZMQ website for details: http://zeromq.org + +----------------- + +Instructions: + +1. Compile CSlib from within cslib/src with one of the following: + % make lib_parallel # build parallel library with ZMQ socket support + % make lib_serial # build serial library with ZMQ support + % make lib_parallel zmq=no # build parallel lib with no ZMQ support + % make lib_serial zmq=no # build serial lib with no ZMQ support + +2. Copy the produced cslib/src/libcsmpi.a or libscnompi.a file to + cslib/src/libmessage.a + +3. Copy either lib/message/Makefile.lammps.zmq or Makefile.lammps.nozmq + to lib/message/Makefile.lammps, depending on whether you + build the library with ZMQ support or not. + If your ZMQ library is not in a place your shell path finds, + you can set the INCLUDE and PATH variables in Makefile.lammps + to point to the dirs where the ZMQ include and library files are. + +----------------- + +When these steps are complete you can build LAMMPS +with the MESSAGAE package installed: + +% cd lammps/src +% make yes-message +% make mpi (or whatever target you wish) + +Note that if you download and unpack a new LAMMPS tarball, you will +need to re-build the CSlib in this dir. diff --git a/lib/message/cslib/LICENSE b/lib/message/cslib/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..7a36e21daf9120d3f5f49b25d70321cdd28a73c6 --- /dev/null +++ b/lib/message/cslib/LICENSE @@ -0,0 +1,32 @@ +Program: CSlib client/server coupling library + +Copyright 2018 National Technology & Engineering Solutions of Sandia, +LLC (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the +U.S. Government retains certain rights in this software. This +software is distributed under the modified Berkeley Software +Distribution (BSD) License. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of Sandia Corporation nor the names of contributors + to this software may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/message/cslib/README b/lib/message/cslib/README new file mode 100644 index 0000000000000000000000000000000000000000..37f4a97d54b3293c64f94bc09969256bee5a6015 --- /dev/null +++ b/lib/message/cslib/README @@ -0,0 +1,23 @@ +This is the the Client/Server messaging library (CSlib). + +Only the source directory and license file are included here as part +of the LAMMPS distribution. The full CSlib distribution, including +documentation and test codes, can be found at the website: +http://cslib.sandia.gov (as of Aug 2018). + +The contact author is + +Steve Plimpton +Sandia National Laboratories +sjplimp@sandia.gov +http://www.sandia.gov/~sjplimp + +The CSlib is distributed as open-source code under the modified +Berkeley Software Distribution (BSD) License. See the accompanying +LICENSE file. + +This directory contains the following: + +README this file +LICENSE GNU LGPL license +src source files for library diff --git a/lib/message/cslib/src/Makefile b/lib/message/cslib/src/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..83cf902220da9e68240bbf72b5e48423d5756f1a --- /dev/null +++ b/lib/message/cslib/src/Makefile @@ -0,0 +1,107 @@ +# Makefile for CSlib = client/server messaging library +# type "make help" for options + +SHELL = /bin/sh + +# ---------------------------------------- +# should only need to change this section +# compiler/linker settings +# ---------------------------------------- + +CC = g++ +CCFLAGS = -g -O3 -DZMQ_$(ZMQ) -DMPI_$(MPI) +SHFLAGS = -fPIC +ARCHIVE = ar +ARCHFLAGS = -rc +SHLIBFLAGS = -shared + +# files + +LIB = libcsmpi.a +SHLIB = libcsmpi.so +SRC = $(wildcard *.cpp) +INC = $(wildcard *.h) +OBJ = $(SRC:.cpp=.o) + +# build with ZMQ support or not + +zmq = yes +ZMQ = $(shell echo $(zmq) | tr a-z A-Z) + +ifeq ($(ZMQ),YES) + ZMQLIB = -lzmq +else + CCFLAGS += -I./STUBS_ZMQ +endif + +# build with MPI support or not + +mpi = yes +MPI = $(shell echo $(mpi) | tr a-z A-Z) + +ifeq ($(MPI),YES) + CC = mpicxx +else + CCFLAGS += -I./STUBS_MPI + LIB = libcsnompi.a + SHLIB = libcsnompi.so +endif + +# targets + +shlib: shlib_parallel shlib_serial + +lib: lib_parallel lib_serial + +all: shlib lib + +help: + @echo 'make default = shlib' + @echo 'make shlib build 2 shared CSlibs: parallel & serial' + @echo 'make lib build 2 static CSlibs: parallel & serial' + @echo 'make all build 4 CSlibs: shlib and lib' + @echo 'make shlib_parallel build shared parallel CSlib' + @echo 'make shlib_serial build shared serial CSlib' + @echo 'make lib_parallel build static parallel CSlib' + @echo 'make lib_serial build static serial CSlib' + @echo 'make ... zmq=no build w/out ZMQ support' + @echo 'make clean remove all *.o files' + @echo 'make clean-all remove *.o and lib files' + @echo 'make tar create a tarball, 2 levels up' + +shlib_parallel: + $(MAKE) clean + $(MAKE) shared zmq=$(zmq) mpi=yes + +shlib_serial: + $(MAKE) clean + $(MAKE) shared zmq=$(zmq) mpi=no + +lib_parallel: + $(MAKE) clean + $(MAKE) static zmq=$(zmq) mpi=yes + +lib_serial: + $(MAKE) clean + $(MAKE) static zmq=$(zmq) mpi=no + +static: $(OBJ) + $(ARCHIVE) $(ARCHFLAGS) $(LIB) $(OBJ) + +shared: $(OBJ) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) -o $(SHLIB) $(OBJ) $(ZMQLIB) + +clean: + @rm -f *.o *.pyc + +clean-all: + @rm -f *.o *.pyc lib*.a lib*.so + +tar: + cd ../..; tar cvf cslib.tar cslib/README cslib/LICENSE \ + cslib/doc cslib/src cslib/test + +# rules + +%.o:%.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) -c $< diff --git a/lib/message/cslib/src/STUBS_MPI/mpi.h b/lib/message/cslib/src/STUBS_MPI/mpi.h new file mode 100644 index 0000000000000000000000000000000000000000..2919e4c3a2f8810ba99c303e6748271b0dae229c --- /dev/null +++ b/lib/message/cslib/src/STUBS_MPI/mpi.h @@ -0,0 +1,96 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +// MPI constants and dummy functions + +#ifndef MPI_DUMMY_H +#define MPI_DUMMY_H + +#include +#include +#include + +namespace CSLIB_NS { + +typedef int MPI_Comm; +typedef int MPI_Fint; +typedef int MPI_Datatype; +typedef int MPI_Status; +typedef int MPI_Op; +typedef int MPI_Info; + +#define MPI_COMM_WORLD 0 +#define MPI_MAX_PORT_NAME 0 +#define MPI_INFO_NULL 0 +#define MPI_INT 1 +#define MPI_LONG_LONG 2 +#define MPI_FLOAT 3 +#define MPI_DOUBLE 4 +#define MPI_CHAR 5 +#define MPI_SUM 0 + +static void MPI_Init(int *, char ***) {} +static MPI_Comm MPI_Comm_f2c(MPI_Comm world) {return world;} +static void MPI_Comm_rank(MPI_Comm, int *) {} +static void MPI_Comm_size(MPI_Comm, int *) {} + +static void MPI_Open_port(MPI_Info, char *) {} +static void MPI_Close_port(const char *) {} +static void MPI_Comm_accept(const char *, MPI_Info, int, + MPI_Comm, MPI_Comm *) {} +static void MPI_Comm_connect(const char *, MPI_Info, int, + MPI_Comm, MPI_Comm *) {} + +static void MPI_Comm_split(MPI_Comm, int, int, MPI_Comm *) {} +static void MPI_Comm_free(MPI_Comm *) {} + +static void MPI_Send(const void *, int, MPI_Datatype, int, int, MPI_Comm) {} +static void MPI_Recv(void *, int, MPI_Datatype, int, int, + MPI_Comm, MPI_Status *) {} + +static void MPI_Allreduce(const void *in, void *out, int, MPI_Datatype type, + MPI_Op op, MPI_Comm) +{ + if (type == MPI_INT) *((int *) out) = *((int *) in); +} +static void MPI_Scan(const void *in, void *out, int, MPI_Datatype intype, + MPI_Op op,MPI_Comm) +{ + if (intype == MPI_INT) *((int *) out) = *((int *) in); +} + +static void MPI_Bcast(void *, int, MPI_Datatype, int, MPI_Comm) {} +static void MPI_Allgather(const void *in, int incount, MPI_Datatype intype, + void *out, int, MPI_Datatype, MPI_Comm) +{ + // assuming incount = 1 + if (intype == MPI_INT) *((int *) out) = *((int *) in); +} +static void MPI_Allgatherv(const void *in, int incount, MPI_Datatype intype, + void *out, const int *, const int *, + MPI_Datatype, MPI_Comm) +{ + if (intype == MPI_INT) memcpy(out,in,incount*sizeof(int)); + else if (intype == MPI_LONG_LONG) memcpy(out,in,incount*sizeof(int64_t)); + else if (intype == MPI_FLOAT) memcpy(out,in,incount*sizeof(float)); + else if (intype == MPI_DOUBLE) memcpy(out,in,incount*sizeof(double)); + else if (intype == MPI_CHAR) memcpy(out,in,incount*sizeof(char)); +} + +static void MPI_Abort(MPI_Comm, int) {exit(1);} +static void MPI_Finalize() {} + +} + +#endif diff --git a/lib/message/cslib/src/STUBS_ZMQ/zmq.h b/lib/message/cslib/src/STUBS_ZMQ/zmq.h new file mode 100644 index 0000000000000000000000000000000000000000..2f02eb4035c75cab753f430c3a31810c961d4702 --- /dev/null +++ b/lib/message/cslib/src/STUBS_ZMQ/zmq.h @@ -0,0 +1,36 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +// ZMQ constants and dummy functions + +#ifndef ZMQ_DUMMY_H +#define ZMQ_DUMMY_H + +namespace CSLIB_NS { + +#define ZMQ_REQ 0 +#define ZMQ_REP 0 + +static void *zmq_ctx_new() {return NULL;} +static void *zmq_connect(void *, char *) {return NULL;} +static int zmq_bind(void *, char *) {return 0;} +static void *zmq_socket(void *,int) {return NULL;} +static void zmq_close(void *) {} +static void zmq_ctx_destroy(void *) {} +static void zmq_send(void *, void *, int, int) {} +static void zmq_recv(void *, void *, int, int) {} + +}; + +#endif diff --git a/lib/message/cslib/src/cslib.cpp b/lib/message/cslib/src/cslib.cpp new file mode 100644 index 0000000000000000000000000000000000000000..874333607e5af076a4b6c73959127bbc7f2c9653 --- /dev/null +++ b/lib/message/cslib/src/cslib.cpp @@ -0,0 +1,768 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include + +#include "cslib.h" +#include "msg_file.h" +#include "msg_zmq.h" +#include "msg_mpi_one.h" +#include "msg_mpi_two.h" + +using namespace CSLIB_NS; + +#define MAXTYPE 5 // # of defined field data types + +/* ---------------------------------------------------------------------- */ + +CSlib::CSlib(int csflag, const char *mode, const void *ptr, const void *pcomm) +{ + if (pcomm) myworld = (uint64_t) *((MPI_Comm *) pcomm); + else myworld = 0; + +#ifdef MPI_NO + if (pcomm) + error_all("constructor(): CSlib invoked with MPI_Comm " + "but built w/out MPI support"); +#endif +#ifdef MPI_YES // NOTE: this could be OK to allow ?? + // would allow a parallel app to invoke CSlib + // in parallel and/or in serial + if (!pcomm) + error_all("constructor(): CSlib invoked w/out MPI_Comm " + "but built with MPI support"); +#endif + + client = server = 0; + if (csflag == 0) client = 1; + else if (csflag == 1) server = 1; + else error_all("constructor(): Invalid client/server arg"); + + if (pcomm == NULL) { + me = 0; + nprocs = 1; + + if (strcmp(mode,"file") == 0) msg = new MsgFile(csflag,ptr); + else if (strcmp(mode,"zmq") == 0) msg = new MsgZMQ(csflag,ptr); + else if (strcmp(mode,"mpi/one") == 0) + error_all("constructor(): No mpi/one mode for serial lib usage"); + else if (strcmp(mode,"mpi/two") == 0) + error_all("constructor(): No mpi/two mode for serial lib usage"); + else error_all("constructor(): Unknown mode"); + + } else if (pcomm) { + MPI_Comm world = (MPI_Comm) myworld; + MPI_Comm_rank(world,&me); + MPI_Comm_size(world,&nprocs); + + if (strcmp(mode,"file") == 0) msg = new MsgFile(csflag,ptr,world); + else if (strcmp(mode,"zmq") == 0) msg = new MsgZMQ(csflag,ptr,world); + else if (strcmp(mode,"mpi/one") == 0) msg = new MsgMPIOne(csflag,ptr,world); + else if (strcmp(mode,"mpi/two") == 0) msg = new MsgMPITwo(csflag,ptr,world); + else error_all("constructor(): Unknown mode"); + } + + maxfield = 0; + fieldID = fieldtype = fieldlen = fieldoffset = NULL; + maxheader = 0; + header = NULL; + maxbuf = 0; + buf = NULL; + + recvcounts = displs = NULL; + maxglobal = 0; + allids = NULL; + maxfieldbytes = 0; + fielddata = NULL; + + pad = "\0\0\0\0\0\0\0"; // just length 7 since will have trailing NULL + + nsend = nrecv = 0; +} + +/* ---------------------------------------------------------------------- */ + +CSlib::~CSlib() +{ + deallocate_fields(); + sfree(header); + sfree(buf); + + sfree(recvcounts); + sfree(displs); + sfree(allids); + sfree(fielddata); + + delete msg; +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::send(int msgID_caller, int nfield_caller) +{ + if (nfield_caller < 0) error_all("send(): Invalid nfield"); + + msgID = msgID_caller; + nfield = nfield_caller; + allocate_fields(); + + fieldcount = 0; + nbuf = 0; + + if (fieldcount == nfield) send_message(); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack_int(int id, int value) +{ + pack(id,1,1,&value); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack_int64(int id, int64_t value) +{ + pack(id,2,1,&value); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack_float(int id, float value) +{ + pack(id,3,1,&value); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack_double(int id, double value) +{ + pack(id,4,1,&value); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack_string(int id, char *value) +{ + pack(id,5,strlen(value)+1,value); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack(int id, int ftype, int flen, void *data) +{ + if (find_field(id,fieldcount) >= 0) + error_all("pack(): Reuse of field ID"); + if (ftype < 1 || ftype > MAXTYPE) error_all("pack(): Invalid ftype"); + if (flen < 0) error_all("pack(): Invalid flen"); + + fieldID[fieldcount] = id; + fieldtype[fieldcount] = ftype; + fieldlen[fieldcount] = flen; + + int nbytes,nbytesround; + onefield(ftype,flen,nbytes,nbytesround); + + memcpy(&buf[nbuf],data,nbytes); + memcpy(&buf[nbuf+nbytes],pad,nbytesround-nbytes); + nbuf += nbytesround; + + fieldcount++; + if (fieldcount == nfield) send_message(); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::pack_parallel(int id, int ftype, + int nlocal, int *ids, int nper, void *data) +{ + int i,j,k,m; + + if (find_field(id,fieldcount) >= 0) + error_all("pack_parallel(): Reuse of field ID"); + if (ftype < 1 || ftype > MAXTYPE) error_all("pack_parallel(): Invalid ftype"); + if (nlocal < 0) error_all("pack_parallel(): Invalid nlocal"); + if (nper < 1) error_all("pack_parallel(): Invalid nper"); + + MPI_Comm world = (MPI_Comm) myworld; + + // NOTE: check for overflow of maxglobal and flen + + int nglobal; + MPI_Allreduce(&nlocal,&nglobal,1,MPI_INT,MPI_SUM,world); + int flen = nper*nglobal; + + fieldID[fieldcount] = id; + fieldtype[fieldcount] = ftype; + fieldlen[fieldcount] = flen; + + // nlocal datums, each of nper length, from all procs + // final data in buf = datums for all natoms, ordered by ids + + if (recvcounts == NULL) { + recvcounts = (int *) smalloc(nprocs*sizeof(int)); + displs = (int *) smalloc(nprocs*sizeof(int)); + } + + MPI_Allgather(&nlocal,1,MPI_INT,recvcounts,1,MPI_INT,world); + + displs[0] = 0; + for (int iproc = 1; iproc < nprocs; iproc++) + displs[iproc] = displs[iproc-1] + recvcounts[iproc-1]; + + if (ids && nglobal > maxglobal) { + sfree(allids); + maxglobal = nglobal; + // NOTE: maxglobal*sizeof(int) could overflow int + allids = (int *) smalloc(maxglobal*sizeof(int)); + } + + MPI_Allgatherv(ids,nlocal,MPI_INT,allids, + recvcounts,displs,MPI_INT,world); + + int nlocalsize = nper*nlocal; + MPI_Allgather(&nlocalsize,1,MPI_INT,recvcounts,1,MPI_INT,world); + + displs[0] = 0; + for (int iproc = 1; iproc < nprocs; iproc++) + displs[iproc] = displs[iproc-1] + recvcounts[iproc-1]; + + int nbytes,nbytesround; + onefield(ftype,flen,nbytes,nbytesround); + + if (ftype == 1) { + int *alldata; + if (ids) { + if (nbytes > maxfieldbytes) { + sfree(fielddata); + maxfieldbytes = nbytes; + fielddata = (char *) smalloc(maxfieldbytes); + } + alldata = (int *) fielddata; + } else alldata = (int *) &buf[nbuf]; + MPI_Allgatherv(data,nlocalsize,MPI_INT,alldata, + recvcounts,displs,MPI_INT,world); + if (ids) { + int *bufptr = (int *) &buf[nbuf]; + m = 0; + for (i = 0; i < nglobal; i++) { + j = (allids[i]-1) * nper; + if (nper == 1) bufptr[j] = alldata[m++]; + else + for (k = 0; k < nper; k++) + bufptr[j++] = alldata[m++]; + } + } + + } else if (ftype == 2) { + int64_t *alldata; + if (ids) { + if (nbytes > maxfieldbytes) { + sfree(fielddata); + maxfieldbytes = nbytes; + fielddata = (char *) smalloc(maxfieldbytes); + } + alldata = (int64_t *) fielddata; + } else alldata = (int64_t *) &buf[nbuf]; + // NOTE: may be just MPI_LONG on some machines + MPI_Allgatherv(data,nlocalsize,MPI_LONG_LONG,alldata, + recvcounts,displs,MPI_LONG_LONG,world); + if (ids) { + int64_t *bufptr = (int64_t *) &buf[nbuf]; + m = 0; + for (i = 0; i < nglobal; i++) { + j = (allids[i]-1) * nper; + if (nper == 1) bufptr[j] = alldata[m++]; + else + for (k = 0; k < nper; k++) + bufptr[j++] = alldata[m++]; + } + } + + } else if (ftype == 3) { + float *alldata; + if (ids) { + if (nbytes > maxfieldbytes) { + sfree(fielddata); + maxfieldbytes = nbytes; + fielddata = (char *) smalloc(maxfieldbytes); + } + alldata = (float *) fielddata; + } else alldata = (float *) &buf[nbuf]; + MPI_Allgatherv(data,nlocalsize,MPI_FLOAT,alldata, + recvcounts,displs,MPI_FLOAT,world); + if (ids) { + float *bufptr = (float *) &buf[nbuf]; + m = 0; + for (i = 0; i < nglobal; i++) { + j = (allids[i]-1) * nper; + if (nper == 1) bufptr[j] = alldata[m++]; + else + for (k = 0; k < nper; k++) + bufptr[j++] = alldata[m++]; + } + } + + } else if (ftype == 4) { + double *alldata; + if (ids) { + if (nbytes > maxfieldbytes) { + sfree(fielddata); + maxfieldbytes = nbytes; + fielddata = (char *) smalloc(maxfieldbytes); + } + alldata = (double *) fielddata; + } else alldata = (double *) &buf[nbuf]; + MPI_Allgatherv(data,nlocalsize,MPI_DOUBLE,alldata, + recvcounts,displs,MPI_DOUBLE,world); + if (ids) { + double *bufptr = (double *) &buf[nbuf]; + m = 0; + for (i = 0; i < nglobal; i++) { + j = (allids[i]-1) * nper; + if (nper == 1) bufptr[j] = alldata[m++]; + else + for (k = 0; k < nper; k++) + bufptr[j++] = alldata[m++]; + } + } + + /* eventually ftype = BYTE, but not yet + } else if (ftype == 5) { + char *alldata; + if (ids) { + if (nbytes > maxfieldbytes) { + sfree(fielddata); + maxfieldbytes = nbytes; + fielddata = (char *) smalloc(maxfieldbytes); + } + alldata = (char *) fielddata; + } else alldata = (char *) &buf[nbuf]; + MPI_Allgatherv(data,nlocalsize,MPI_CHAR,alldata, + recvcounts,displs,MPI_CHAR,world); + if (ids) { + char *bufptr = (char *) &buf[nbuf]; + m = 0; + for (i = 0; i < nglobal; i++) { + j = (allids[i]-1) * nper; + memcpy(&bufptr[j],&alldata[m],nper); + m += nper; + } + } + */ + } + + memcpy(&buf[nbuf+nbytes],pad,nbytesround-nbytes); + nbuf += nbytesround; + + fieldcount++; + if (fieldcount == nfield) send_message(); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::send_message() +{ + // setup header message + + int m = 0; + header[m++] = msgID; + header[m++] = nfield; + for (int ifield = 0; ifield < nfield; ifield++) { + header[m++] = fieldID[ifield]; + header[m++] = fieldtype[ifield]; + header[m++] = fieldlen[ifield]; + } + + msg->send(nheader,header,nbuf,buf); + nsend++; +} + +/* ---------------------------------------------------------------------- */ + +int CSlib::recv(int &nfield_caller, int *&fieldID_caller, + int *&fieldtype_caller, int *&fieldlen_caller) +{ + msg->recv(maxheader,header,maxbuf,buf); + nrecv++; + + // unpack header message + + int m = 0; + msgID = header[m++]; + nfield = header[m++]; + allocate_fields(); + + int nbytes,nbytesround; + + nbuf = 0; + for (int ifield = 0; ifield < nfield; ifield++) { + fieldID[ifield] = header[m++]; + fieldtype[ifield] = header[m++]; + fieldlen[ifield] = header[m++]; + fieldoffset[ifield] = nbuf; + onefield(fieldtype[ifield],fieldlen[ifield],nbytes,nbytesround); + nbuf += nbytesround; + } + + // return message parameters + + nfield_caller = nfield; + fieldID_caller = fieldID; + fieldtype_caller = fieldtype; + fieldlen_caller = fieldlen; + + return msgID; +} + +/* ---------------------------------------------------------------------- */ + +int CSlib::unpack_int(int id) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack_int(): Unknown field ID"); + if (fieldtype[ifield] != 1) error_all("unpack_int(): Mis-match of ftype"); + if (fieldlen[ifield] != 1) error_all("unpack_int(): Flen is not 1"); + + int *ptr = (int *) unpack(id); + return *ptr; +} + +/* ---------------------------------------------------------------------- */ + +int64_t CSlib::unpack_int64(int id) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack_int64(): Unknown field ID"); + if (fieldtype[ifield] != 2) error_all("unpack_int64(): Mis-match of ftype"); + if (fieldlen[ifield] != 1) error_all("unpack_int64(): Flen is not 1"); + + int64_t *ptr = (int64_t *) unpack(id); + return *ptr; +} + +/* ---------------------------------------------------------------------- */ + +float CSlib::unpack_float(int id) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack_float(): Unknown field ID"); + if (fieldtype[ifield] != 3) error_all("unpack_float(): Mis-match of ftype"); + if (fieldlen[ifield] != 1) error_all("unpack_float(): Flen is not 1"); + + float *ptr = (float *) unpack(id); + return *ptr; +} + +/* ---------------------------------------------------------------------- */ + +double CSlib::unpack_double(int id) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack_double(): Unknown field ID"); + if (fieldtype[ifield] != 4) error_all("unpack_double(): Mis-match of ftype"); + if (fieldlen[ifield] != 1) error_all("unpack_double(): Flen is not 1"); + + double *ptr = (double *) unpack(id); + return *ptr; +} + +/* ---------------------------------------------------------------------- */ + +char *CSlib::unpack_string(int id) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack_string(): Unknown field ID"); + if (fieldtype[ifield] != 5) error_all("unpack_string(): Mis-match of ftype"); + + char *ptr = (char *) unpack(id); + return ptr; +} + +/* ---------------------------------------------------------------------- */ + +void *CSlib::unpack(int id) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack(): Unknown field ID"); + return &buf[fieldoffset[ifield]]; +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::unpack(int id, void *data) +{ + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack(): Unknown field ID"); + + int ftype = fieldtype[ifield]; + int nbytes = fieldlen[ifield]; + if (ftype == 1) nbytes *= sizeof(int); + else if (ftype == 2) nbytes *= sizeof(int64_t); + else if (ftype == 3) nbytes *= sizeof(float); + else if (ftype == 4) nbytes *= sizeof(double); + memcpy(data,&buf[fieldoffset[ifield]],nbytes); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::unpack_parallel(int id, int nlocal, int *ids, int nper, void *data) +{ + int i,j,k,m; + + int ifield = find_field(id,nfield); + if (ifield < 0) error_all("unpack_parallel(): Unknown field ID"); + if (nlocal < 0) error_all("unpack_parallel(): Invalid nlocal"); + if (nper < 1) error_all("pack_parallel(): Invalid nper"); + + MPI_Comm world = (MPI_Comm) myworld; + + int upto; + if (!ids) { + MPI_Scan(&nlocal,&upto,1,MPI_INT,MPI_SUM,world); + upto -= nlocal; + } + + if (fieldtype[ifield] == 1) { + int *local = (int *) data; + int *global = (int *) &buf[fieldoffset[ifield]]; + if (!ids) memcpy(local,&global[nper*upto],nper*nlocal*sizeof(int)); + else { + m = 0; + for (i = 0; i < nlocal; i++) { + j = (ids[i]-1) * nper; + if (nper == 1) local[m++] = global[j]; + else + for (k = 0; k < nper; k++) + local[m++] = global[j++]; + } + } + + } else if (fieldtype[ifield] == 2) { + int64_t *local = (int64_t *) data; + int64_t *global = (int64_t *) &buf[fieldoffset[ifield]]; + if (!ids) memcpy(local,&global[nper*upto],nper*nlocal*sizeof(int64_t)); + else { + m = 0; + for (i = 0; i < nlocal; i++) { + j = (ids[i]-1) * nper; + if (nper == 1) local[m++] = global[j]; + else + for (k = 0; k < nper; k++) + local[m++] = global[j++]; + } + } + + } else if (fieldtype[ifield] == 3) { + float *local = (float *) data; + float *global = (float *) &buf[fieldoffset[ifield]]; + if (!ids) memcpy(local,&global[nper*upto],nper*nlocal*sizeof(float)); + else { + m = 0; + for (i = 0; i < nlocal; i++) { + j = (ids[i]-1) * nper; + if (nper == 1) local[m++] = global[j]; + else + for (k = 0; k < nper; k++) + local[m++] = global[j++]; + } + } + + } else if (fieldtype[ifield] == 4) { + double *local = (double *) data; + double *global = (double *) &buf[fieldoffset[ifield]]; + if (!ids) memcpy(local,&global[nper*upto],nper*nlocal*sizeof(double)); + else { + m = 0; + for (i = 0; i < nlocal; i++) { + j = (ids[i]-1) * nper; + if (nper == 1) local[m++] = global[j]; + else + for (k = 0; k < nper; k++) + local[m++] = global[j++]; + } + } + + /* eventually ftype = BYTE, but not yet + } else if (fieldtype[ifield] == 5) { + char *local = (char *) data; + char *global = (char *) &buf[fieldoffset[ifield]]; + if (!ids) memcpy(local,&global[nper*upto],nper*nlocal*sizeof(char)); + else { + m = 0; + for (i = 0; i < nlocal; i++) { + j = (ids[i]-1) * nper; + memcpy(&local[m],&global[j],nper); + m += nper; + } + } + */ + } +} + +/* ---------------------------------------------------------------------- */ + +int CSlib::extract(int flag) +{ + if (flag == 1) return nsend; + if (flag == 2) return nrecv; + error_all("extract(): Invalid flag"); + return 0; +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::onefield(int ftype, int flen, int &nbytes, int &nbytesround) +{ + int64_t bigbytes,bigbytesround; + int64_t biglen = flen; + + if (ftype == 1) bigbytes = biglen * sizeof(int); + else if (ftype == 2) bigbytes = biglen * sizeof(int64_t); + else if (ftype == 3) bigbytes = biglen * sizeof(float); + else if (ftype == 4) bigbytes = biglen * sizeof(double); + else if (ftype == 5) bigbytes = biglen * sizeof(char); + bigbytesround = roundup(bigbytes,8); + + if (nbuf + bigbytesround > INT_MAX) + error_all("pack(): Message size exceeds 32-bit integer limit"); + + nbytes = (int) bigbytes; + nbytesround = (int) bigbytesround; + if (nbuf + nbytesround > maxbuf) { + maxbuf = nbuf + nbytesround; + buf = (char *) srealloc(buf,maxbuf); + } +} + +/* ---------------------------------------------------------------------- */ + +int CSlib::find_field(int id, int n) +{ + int ifield; + for (ifield = 0; ifield < n; ifield++) + if (id == fieldID[ifield]) return ifield; + return -1; +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::allocate_fields() +{ + int64_t bigbytes = (2 + 3*((int64_t) nfield)) * sizeof(int); + if (bigbytes > INT_MAX) + error_all("send(): Message header size exceeds 32-bit integer limit"); + + nheader = 2; + nheader += 3 * nfield; + + if (nfield > maxfield) { + deallocate_fields(); + maxfield = nfield; + fieldID = new int[maxfield]; + fieldtype = new int[maxfield]; + fieldlen = new int[maxfield]; + fieldoffset = new int[maxfield]; + } + + if (nheader > maxheader) { + sfree(header); + maxheader = nheader; + header = (int *) smalloc(maxheader*sizeof(int)); + } +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::deallocate_fields() +{ + delete [] fieldID; + delete [] fieldtype; + delete [] fieldlen; + delete [] fieldoffset; +} + +/* ---------------------------------------------------------------------- */ + +void *CSlib::smalloc(int nbytes) +{ + if (nbytes == 0) return NULL; + void *ptr = malloc(nbytes); + if (ptr == NULL) { + char str[128]; + sprintf(str,"malloc(): Failed to allocate %d bytes",nbytes); + error_one(str); + } + return ptr; +} + +/* ---------------------------------------------------------------------- */ + +void *CSlib::srealloc(void *ptr, int nbytes) +{ + if (nbytes == 0) { + sfree(ptr); + return NULL; + } + + ptr = realloc(ptr,nbytes); + if (ptr == NULL) { + char str[128]; + sprintf(str,"realloc(): Failed to reallocate %d bytes",nbytes); + error_one(str); + } + return ptr; +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::sfree(void *ptr) +{ + if (ptr == NULL) return; + free(ptr); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::error_all(const char *str) +{ + if (me == 0) printf("CSlib ERROR: %s\n",str); + MPI_Comm world = (MPI_Comm) myworld; + MPI_Abort(world,1); +} + +/* ---------------------------------------------------------------------- */ + +void CSlib::error_one(const char *str) +{ + printf("CSlib ERROR: %s\n",str); + MPI_Comm world = (MPI_Comm) myworld; + MPI_Abort(world,1); +} + +/* ---------------------------------------------------------------------- + round N up to multiple of nalign and return it + NOTE: see mapreduce/src/keyvalue.cpp for doing this as uint64_t +------------------------------------------------------------------------- */ + +int64_t CSlib::roundup(int64_t n, int nalign) +{ + if (n % nalign == 0) return n; + n = (n/nalign + 1) * nalign; + return n; +} diff --git a/lib/message/cslib/src/cslib.h b/lib/message/cslib/src/cslib.h new file mode 100644 index 0000000000000000000000000000000000000000..b4da9680268729c9ca75e29ebe73eac1c5b0522c --- /dev/null +++ b/lib/message/cslib/src/cslib.h @@ -0,0 +1,87 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#ifndef CSLIB_H +#define CSLIB_H + +#include + +namespace CSLIB_NS { + +class CSlib { + public: + int nsend,nrecv; + + CSlib(int, const char *, const void *, const void *); + ~CSlib(); + + void send(int, int); + + void pack_int(int, int); + void pack_int64(int, int64_t); + void pack_float(int, float); + void pack_double(int, double); + void pack_string(int, char *); + void pack(int, int, int, void *); + void pack_parallel(int, int, int, int *, int, void *); + + int recv(int &, int *&, int *&, int *&); + + int unpack_int(int); + int64_t unpack_int64(int); + float unpack_float(int); + double unpack_double(int); + char *unpack_string(int); + void *unpack(int); + void unpack(int, void *); + void unpack_parallel(int, int, int *, int, void *); + + int extract(int); + + private: + uint64_t myworld; // really MPI_Comm, but avoids use of mpi.h in this file + // so apps can include this file w/ no MPI on system + int me,nprocs; + int client,server; + int nfield,maxfield; + int msgID,fieldcount; + int nheader,maxheader; + int nbuf,maxbuf; + int maxglobal,maxfieldbytes; + int *fieldID,*fieldtype,*fieldlen,*fieldoffset; + int *header; + int *recvcounts,*displs; // nprocs size for Allgathers + int *allids; // nglobal size for pack_parallel() + char *buf; // maxbuf size for msg with all fields + char *fielddata; // maxfieldbytes size for one global field + const char *pad; + + class Msg *msg; + + void send_message(); + void onefield(int, int, int &, int &); + int find_field(int, int); + void allocate_fields(); + void deallocate_fields(); + int64_t roundup(int64_t, int); + void *smalloc(int); + void *srealloc(void *, int); + void sfree(void *); + void error_all(const char *); + void error_one(const char *); +}; + +} + +#endif diff --git a/lib/message/cslib/src/cslib.py b/lib/message/cslib/src/cslib.py new file mode 100644 index 0000000000000000000000000000000000000000..0ba3516255a4f7f3f54d98dc02279db29a91698a --- /dev/null +++ b/lib/message/cslib/src/cslib.py @@ -0,0 +1,362 @@ +# ------------------------------------------------------------------------ +# CSlib - Client/server library for code coupling +# http://cslib.sandia.gov, Sandia National Laboratories +# Steve Plimpton, sjplimp@sandia.gov +# +# Copyright 2018 National Technology & Engineering Solutions of +# Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with +# NTESS, the U.S. Government retains certain rights in this software. +# This software is distributed under the modified Berkeley Software +# Distribution (BSD) License. +# +# See the README file in the top-level CSlib directory. +# ------------------------------------------------------------------------- + +# Python wrapper on CSlib library via ctypes + +# ctypes and Numpy data types: +# 32-bit int = c_int = np.intc = np.int32 +# 64-bit int = c_longlong = np.int64 +# 32-bit floating point = c_float = np.float32 +# 64-bit floating point = c_double = np.float = np.float64 + +import sys,traceback +from ctypes import * + +# Numpy and mpi4py packages may not exist + +try: + import numpy as np + numpyflag = 1 +except: + numpyflag = 0 + +try: + from mpi4py import MPI + mpi4pyflag = 1 +except: + mpi4pyflag = 0 + +# wrapper class + +class CSlib: + + # instantiate CSlib thru its C-interface + + def __init__(self,csflag,mode,ptr,comm): + + # load libcslib.so + + try: + if comm: self.lib = CDLL("libcsmpi.so",RTLD_GLOBAL) + else: self.lib = CDLL("libcsnompi.so",RTLD_GLOBAL) + except: + etype,value,tb = sys.exc_info() + traceback.print_exception(etype,value,tb) + raise OSError,"Could not load CSlib dynamic library" + + # define ctypes API for each library method + + self.lib.cslib_open.argtypes = [c_int,c_char_p,c_void_p,c_void_p, + POINTER(c_void_p)] + self.lib.cslib_open.restype = None + + self.lib.cslib_close.argtypes = [c_void_p] + self.lib.cslib_close.restype = None + + self.lib.cslib_send.argtypes = [c_void_p,c_int,c_int] + self.lib.cslib_send.restype = None + + self.lib.cslib_pack_int.argtypes = [c_void_p,c_int,c_int] + self.lib.cslib_pack_int.restype = None + + self.lib.cslib_pack_int64.argtypes = [c_void_p,c_int,c_longlong] + self.lib.cslib_pack_int64.restype = None + + self.lib.cslib_pack_float.argtypes = [c_void_p,c_int,c_float] + self.lib.cslib_pack_float.restype = None + + self.lib.cslib_pack_double.argtypes = [c_void_p,c_int,c_double] + self.lib.cslib_pack_double.restype = None + + self.lib.cslib_pack_string.argtypes = [c_void_p,c_int,c_char_p] + self.lib.cslib_pack_string.restype = None + + self.lib.cslib_pack.argtypes = [c_void_p,c_int,c_int,c_int,c_void_p] + self.lib.cslib_pack.restype = None + + self.lib.cslib_pack_parallel.argtypes = [c_void_p,c_int,c_int,c_int, + POINTER(c_int),c_int,c_void_p] + self.lib.cslib_pack_parallel.restype = None + + self.lib.cslib_recv.argtypes = [c_void_p,POINTER(c_int), + POINTER(POINTER(c_int)), + POINTER(POINTER(c_int)), + POINTER(POINTER(c_int))] + self.lib.cslib_recv.restype = c_int + + self.lib.cslib_unpack_int.argtypes = [c_void_p,c_int] + self.lib.cslib_unpack_int.restype = c_int + + self.lib.cslib_unpack_int64.argtypes = [c_void_p,c_int] + self.lib.cslib_unpack_int64.restype = c_longlong + + self.lib.cslib_unpack_float.argtypes = [c_void_p,c_int] + self.lib.cslib_unpack_float.restype = c_float + + self.lib.cslib_unpack_double.argtypes = [c_void_p,c_int] + self.lib.cslib_unpack_double.restype = c_double + + self.lib.cslib_unpack_string.argtypes = [c_void_p,c_int] + self.lib.cslib_unpack_string.restype = c_char_p + + # override return in unpack() + self.lib.cslib_unpack.argtypes = [c_void_p,c_int] + self.lib.cslib_unpack.restype = c_void_p + + self.lib.cslib_unpack_data.argtypes = [c_void_p,c_int,c_void_p] + self.lib.cslib_unpack_data.restype = None + + # override last arg in unpack_parallel() + self.lib.cslib_unpack_parallel.argtypes = [c_void_p,c_int,c_int, + POINTER(c_int),c_int,c_void_p] + self.lib.cslib_unpack_parallel.restype = None + + self.lib.cslib_extract.argtypes = [c_void_p,c_int] + self.lib.cslib_extract.restype = c_int + + # create an instance of CSlib with or w/out MPI communicator + + self.cs = c_void_p() + + if not comm: + self.lib.cslib_open(csflag,mode,ptr,None,byref(self.cs)) + elif not mpi4pyflag: + print "Cannot pass MPI communicator to CSlib w/out mpi4py package" + sys.exit() + else: + address = MPI._addressof(comm) + comm_ptr = c_void_p(address) + if mode == "mpi/one": + address = MPI._addressof(ptr) + ptrcopy = c_void_p(address) + else: ptrcopy = ptr + self.lib.cslib_open(csflag,mode,ptrcopy,comm_ptr,byref(self.cs)) + + # destroy instance of CSlib + + def __del__(self): + if self.cs: self.lib.cslib_close(self.cs) + + def close(self): + self.lib.cslib_close(self.cs) + self.lib = None + + # send a message + + def send(self,msgID,nfield): + self.nfield = nfield + self.lib.cslib_send(self.cs,msgID,nfield) + + # pack one field of message + + def pack_int(self,id,value): + self.lib.cslib_pack_int(self.cs,id,value) + + def pack_int64(self,id,value): + self.lib.cslib_pack_int64(self.cs,id,value) + + def pack_float(self,id,value): + self.lib.cslib_pack_float(self.cs,id,value) + + def pack_double(self,id,value): + self.lib.cslib_pack_double(self.cs,id,value) + + def pack_string(self,id,value): + self.lib.cslib_pack_string(self.cs,id,value) + + def pack(self,id,ftype,flen,data): + cdata = self.data_convert(ftype,flen,data) + self.lib.cslib_pack(self.cs,id,ftype,flen,cdata) + + def pack_parallel(self,id,ftype,nlocal,ids,nper,data): + cids = self.data_convert(1,nlocal,ids) + cdata = self.data_convert(ftype,nper*nlocal,data) + self.lib.cslib_pack_parallel(self.cs,id,ftype,nlocal,cids,nper,cdata) + + # convert input data to a ctypes vector to pass to CSlib + + def data_convert(self,ftype,flen,data): + + # tflag = type of data + # tflag = 1 if data is list or tuple + # tflag = 2 if data is Numpy array + # tflag = 3 if data is ctypes vector + # same usage of tflag as in unpack function + + txttype = str(type(data)) + if "numpy" in txttype: tflag = 2 + elif "c_" in txttype: tflag = 3 + else: tflag = 1 + + # create ctypes vector out of data to pass to lib + # cdata = ctypes vector to return + # NOTE: error check on ftype and tflag everywhere, also flen + + if ftype == 1: + if tflag == 1: cdata = (flen * c_int)(*data) + elif tflag == 2: cdata = data.ctypes.data_as(POINTER(c_int)) + elif tflag == 3: cdata = data + elif ftype == 2: + if tflag == 1: cdata = (flen * c_longlong)(*data) + elif tflag == 2: cdata = data.ctypes.data_as(POINTER(c_longlong)) + elif tflag == 3: cdata = data + elif ftype == 3: + if tflag == 1: cdata = (flen * c_float)(*data) + elif tflag == 2: cdata = data.ctypes.data_as(POINTER(c_float)) + elif tflag == 3: cdata = data + elif ftype == 4: + if tflag == 1: cdata = (flen * c_double)(*data) + elif tflag == 2: cdata = data.ctypes.data_as(POINTER(c_double)) + elif tflag == 3: cdata = data + + return cdata + + # receive a message + + def recv(self): + self.lib.cslib_recv.restype = c_int + nfield = c_int() + fieldID = POINTER(c_int)() + fieldtype = POINTER(c_int)() + fieldlen = POINTER(c_int)() + msgID = self.lib.cslib_recv(self.cs,byref(nfield), + byref(fieldID),byref(fieldtype),byref(fieldlen)) + + # copy returned C args to native Python int and lists + # store them in class so unpack() methods can access the info + + self.nfield = nfield = nfield.value + self.fieldID = fieldID[:nfield] + self.fieldtype = fieldtype[:nfield] + self.fieldlen = fieldlen[:nfield] + + return msgID,self.nfield,self.fieldID,self.fieldtype,self.fieldlen + + # unpack one field of message + # tflag = type of data to return + # 3 = ctypes vector is default, since no conversion required + + def unpack_int(self,id): + return self.lib.cslib_unpack_int(self.cs,id) + + def unpack_int64(self,id): + return self.lib.cslib_unpack_int64(self.cs,id) + + def unpack_float(self,id): + return self.lib.cslib_unpack_float(self.cs,id) + + def unpack_double(self,id): + return self.lib.cslib_unpack_double(self.cs,id) + + def unpack_string(self,id): + return self.lib.cslib_unpack_string(self.cs,id) + + def unpack(self,id,tflag=3): + index = self.fieldID.index(id) + + # reset data type of return so can morph by tflag + # cannot do this for the generic c_void_p returned by CSlib + + if self.fieldtype[index] == 1: + self.lib.cslib_unpack.restype = POINTER(c_int) + elif self.fieldtype[index] == 2: + self.lib.cslib_unpack.restype = POINTER(c_longlong) + elif self.fieldtype[index] == 3: + self.lib.cslib_unpack.restype = POINTER(c_float) + elif self.fieldtype[index] == 4: + self.lib.cslib_unpack.restype = POINTER(c_double) + #elif self.fieldtype[index] == 5: + # self.lib.cslib_unpack.restype = POINTER(c_char) + + cdata = self.lib.cslib_unpack(self.cs,id) + + # tflag = user-requested type of data to return + # tflag = 1 to return data as list + # tflag = 2 to return data as Numpy array + # tflag = 3 to return data as ctypes vector + # same usage of tflag as in pack functions + # tflag = 2,3 should NOT perform a data copy + + if tflag == 1: + data = cdata[:self.fieldlen[index]] + elif tflag == 2: + if numpyflag == 0: + print "Cannot return Numpy array w/out numpy package" + sys.exit() + data = np.ctypeslib.as_array(cdata,shape=(self.fieldlen[index],)) + elif tflag == 3: + data = cdata + + return data + + # handle data array like pack() or unpack_parallel() ?? + + def unpack_data(self,id,tflag=3): + index = self.fieldID.index(id) + + # unpack one field of message in parallel + # tflag = type of data to return + # 3 = ctypes vector is default, since no conversion required + # NOTE: allow direct use of user array (e.g. Numpy), if user provides data arg? + # as opposed to creating this cdata + # does that make any performance difference ? + # e.g. should we allow CSlib to populate an existing Numpy array's memory + + def unpack_parallel(self,id,nlocal,ids,nper,tflag=3): + cids = self.data_convert(1,nlocal,ids) + + # allocate memory for the returned data + # pass cdata ptr to the memory to CSlib unpack_parallel() + # this resets data type of last unpack_parallel() arg + + index = self.fieldID.index(id) + if self.fieldtype[index] == 1: cdata = (nper*nlocal * c_int)() + elif self.fieldtype[index] == 2: cdata = (nlocal*nper * c_longlong)() + elif self.fieldtype[index] == 3: cdata = (nlocal*nper * c_float)() + elif self.fieldtype[index] == 4: cdata = (nlocal*nper * c_double)() + #elif self.fieldtype[index] == 5: cdata = (nlocal*nper * c_char)() + + self.lib.cslib_unpack_parallel(self.cs,id,nlocal,cids,nper,cdata) + + # tflag = user-requested type of data to return + # tflag = 1 to return data as list + # tflag = 2 to return data as Numpy array + # tflag = 3 to return data as ctypes vector + # same usage of tflag as in pack functions + + if tflag == 1: + data = cdata[:nper*nlocal] + elif tflag == 2: + if numpyflag == 0: + print "Cannot return Numpy array w/out numpy package" + sys.exit() + # NOTE: next line gives ctypes warning for fieldtype = 2 = 64-bit int + # not sure why, reported as bug between ctypes and Numpy here: + # https://stackoverflow.com/questions/4964101/pep-3118- + # warning-when-using-ctypes-array-as-numpy-array + # but why not same warning when just using unpack() ?? + # in Python these lines give same warning: + # >>> import ctypes,numpy + # >>> a = (10 * ctypes.c_longlong)() + # >>> b = numpy.ctypeslib.as_array(a) + data = np.ctypeslib.as_array(cdata,shape=(nlocal*nper,)) + elif tflag == 3: + data = cdata + + return data + + # extract a library value + + def extract(self,flag): + return self.lib.cslib_extract(self.cs,flag) diff --git a/lib/message/cslib/src/cslib_wrap.cpp b/lib/message/cslib/src/cslib_wrap.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c2d69eaf0d62863b1226f1d7119a627dd59c741a --- /dev/null +++ b/lib/message/cslib/src/cslib_wrap.cpp @@ -0,0 +1,239 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +// C style library interface to CSlib class + +#include +#include +#include +#include +#include + +#include "cslib_wrap.h" +#include "cslib.h" + +using namespace CSLIB_NS; + +// ---------------------------------------------------------------------- + +void cslib_open(int csflag, const char *mode, const void *ptr, + const void *pcomm, void **csptr) +{ + CSlib *cs = new CSlib(csflag,mode,ptr,pcomm); + *csptr = (void *) cs; +} + +// ---------------------------------------------------------------------- + +void cslib_open_fortran(int csflag, const char *mode, const char *str, + const void *pcomm, void **csptr) +{ + MPI_Comm ccomm; + void *pccomm = NULL; + + if (pcomm) { + MPI_Fint *fcomm = (MPI_Fint *) pcomm; + ccomm = MPI_Comm_f2c(*fcomm); + pccomm = &ccomm; + } + + CSlib *cs = new CSlib(csflag,mode,str,pccomm); + *csptr = (void *) cs; +} + +// ---------------------------------------------------------------------- + +void cslib_open_fortran_mpi_one(int csflag, const char *mode, + const void *pboth, const void *pcomm, + void **csptr) +{ + MPI_Comm ccomm,cboth; + void *pccomm,*pcboth; + + MPI_Fint *fcomm = (MPI_Fint *) pcomm; + ccomm = MPI_Comm_f2c(*fcomm); + pccomm = &ccomm; + + MPI_Fint *fboth = (MPI_Fint *) pboth; + cboth = MPI_Comm_f2c(*fboth); + pcboth = &cboth; + + CSlib *cs = new CSlib(csflag,mode,pcboth,pccomm); + *csptr = (void *) cs; +} + +// ---------------------------------------------------------------------- + +void cslib_close(void *ptr) +{ + CSlib *cs = (CSlib *) ptr; + delete cs; +} + +// ---------------------------------------------------------------------- + +void cslib_send(void *ptr, int msgID, int nfield) +{ + CSlib *cs = (CSlib *) ptr; + cs->send(msgID,nfield); +} + +// ---------------------------------------------------------------------- + +void cslib_pack_int(void *ptr, int id, int value) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack_int(id,value); +} + +// ---------------------------------------------------------------------- + +void cslib_pack_int64(void *ptr, int id, int64_t value) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack_int64(id,value); +} + +// ---------------------------------------------------------------------- + +void cslib_pack_float(void *ptr, int id, float value) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack_float(id,value); +} + +// ---------------------------------------------------------------------- + +void cslib_pack_double(void *ptr, int id, double value) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack_double(id,value); +} + +// ---------------------------------------------------------------------- + +void cslib_pack_string(void *ptr, int id, char *value) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack_string(id,value); +} + +// ---------------------------------------------------------------------- + +void cslib_pack(void *ptr, int id, int ftype, int flen, void *data) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack(id,ftype,flen,data); +} + +// ---------------------------------------------------------------------- + +void cslib_pack_parallel(void *ptr, int id, int ftype, + int nlocal, int *ids, int nper, void *data) +{ + CSlib *cs = (CSlib *) ptr; + cs->pack_parallel(id,ftype,nlocal,ids,nper,data); +} + +// ---------------------------------------------------------------------- + +int cslib_recv(void *ptr, int *nfield_caller, + int **fieldID_caller, int **fieldtype_caller, + int **fieldlen_caller) +{ + CSlib *cs = (CSlib *) ptr; + + int nfield; + int *fieldID,*fieldtype,*fieldlen; + int msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + + *nfield_caller = nfield; + *fieldID_caller = fieldID; + *fieldtype_caller = fieldtype; + *fieldlen_caller = fieldlen; + + return msgID; +} + +// ---------------------------------------------------------------------- + +int cslib_unpack_int(void *ptr, int id) +{ + CSlib *cs = (CSlib *) ptr; + return cs->unpack_int(id); +} +// ---------------------------------------------------------------------- + +int64_t cslib_unpack_int64(void *ptr, int id) +{ + CSlib *cs = (CSlib *) ptr; + return cs->unpack_int64(id); +} + +// ---------------------------------------------------------------------- + +float cslib_unpack_float(void *ptr, int id) +{ + CSlib *cs = (CSlib *) ptr; + return cs->unpack_float(id); +} + +// ---------------------------------------------------------------------- + +double cslib_unpack_double(void *ptr, int id) +{ + CSlib *cs = (CSlib *) ptr; + return cs->unpack_double(id); +} + +// ---------------------------------------------------------------------- + +char *cslib_unpack_string(void *ptr, int id) +{ + CSlib *cs = (CSlib *) ptr; + return cs->unpack_string(id); +} + +// ---------------------------------------------------------------------- + +void *cslib_unpack(void *ptr, int id) +{ + CSlib *cs = (CSlib *) ptr; + return cs->unpack(id); +} + +// ---------------------------------------------------------------------- + +void cslib_unpack_data(void *ptr, int id, void *data) +{ + CSlib *cs = (CSlib *) ptr; + cs->unpack(id,data); +} + +// ---------------------------------------------------------------------- + +void cslib_unpack_parallel(void *ptr, int id, int nlocal, int *ids, + int nper, void *data) +{ + CSlib *cs = (CSlib *) ptr; + cs->unpack_parallel(id,nlocal,ids,nper,data); +} + +// ---------------------------------------------------------------------- + +int cslib_extract(void *ptr, int flag) +{ + CSlib *cs = (CSlib *) ptr; + return cs->extract(flag); +} diff --git a/lib/message/cslib/src/cslib_wrap.f90 b/lib/message/cslib/src/cslib_wrap.f90 new file mode 100644 index 0000000000000000000000000000000000000000..cd2e058b78c6d16efbae4c503145148e8acd88a5 --- /dev/null +++ b/lib/message/cslib/src/cslib_wrap.f90 @@ -0,0 +1,147 @@ +! ISO_C_binding wrapper on CSlib C interface + +module cslib_wrap + +interface + subroutine cslib_open_fortran(csflag,mode,str,pcomm,ptr) bind(c) + use iso_c_binding + integer(c_int), value :: csflag + character(c_char) :: mode(*),str(*) + type(c_ptr), value :: pcomm + type(c_ptr) :: ptr + end subroutine cslib_open_fortran + + subroutine cslib_open_fortran_mpi_one(csflag,mode,pboth,pcomm,ptr) bind(c) + use iso_c_binding + integer(c_int), value :: csflag + character(c_char) :: mode(*) + type(c_ptr), value :: pboth,pcomm + type(c_ptr) :: ptr + end subroutine cslib_open_fortran_mpi_one + + subroutine cslib_close(ptr) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + end subroutine cslib_close + + subroutine cslib_send(ptr,msgID,nfield) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: msgID,nfield + end subroutine cslib_send + + subroutine cslib_pack_int(ptr,id,value) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id + integer(c_int), value :: value + end subroutine cslib_pack_int + + subroutine cslib_pack_int64(ptr,id,value) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id + integer(c_int64_t), value :: value + end subroutine cslib_pack_int64 + + subroutine cslib_pack_float(ptr,id,value) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id + real(c_float), value :: value + end subroutine cslib_pack_float + + subroutine cslib_pack_double(ptr,id,value) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id + real(c_double), value :: value + end subroutine cslib_pack_double + + subroutine cslib_pack_string(ptr,id,value) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id + character(c_char) :: value(*) + end subroutine cslib_pack_string + + subroutine cslib_pack(ptr,id,ftype,flen,data) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id,ftype,flen + type(c_ptr), value :: data + end subroutine cslib_pack + + subroutine cslib_pack_parallel(ptr,id,ftype,nlocal,ids,nper,data) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id,ftype,nlocal,nper + type(c_ptr), value :: ids,data + end subroutine cslib_pack_parallel + + function cslib_recv(ptr,nfield,fieldID,fieldtype,fieldlen) bind(c) + use iso_c_binding + integer(c_int) :: cslib_recv + type(c_ptr), value :: ptr + integer(c_int) :: nfield + type(c_ptr) :: fieldID,fieldtype,fieldlen + end function cslib_recv + + function cslib_unpack_int(ptr,id) bind(c) + use iso_c_binding + integer(c_int) :: cslib_unpack_int + type(c_ptr), value :: ptr + integer(c_int), value :: id + end function cslib_unpack_int + + function cslib_unpack_int64(ptr,id) bind(c) + use iso_c_binding + integer(c_int64_t) :: cslib_unpack_int64 + type(c_ptr), value :: ptr + integer(c_int), value :: id + end function cslib_unpack_int64 + + function cslib_unpack_float(ptr,id) bind(c) + use iso_c_binding + real(c_float) :: cslib_unpack_float + type(c_ptr), value :: ptr + integer(c_int), value :: id + end function cslib_unpack_float + + function cslib_unpack_double(ptr,id) bind(c) + use iso_c_binding + real(c_double) :: cslib_unpack_double + type(c_ptr), value :: ptr + integer(c_int), value :: id + end function cslib_unpack_double + + function cslib_unpack_string(ptr,id) bind(c) + use iso_c_binding + type(c_ptr) :: cslib_unpack_string + type(c_ptr), value :: ptr + integer(c_int), value :: id + end function cslib_unpack_string + + function cslib_unpack(ptr,id) bind(c) + use iso_c_binding + type(c_ptr) :: cslib_unpack + type(c_ptr), value :: ptr + integer(c_int), value :: id + end function cslib_unpack + + subroutine cslib_unpack_parallel(ptr,id,nlocal,ids,nper,data) bind(c) + use iso_c_binding + type(c_ptr), value :: ptr + integer(c_int), value :: id,nlocal,nper + type(c_ptr), value :: ids,data + end subroutine cslib_unpack_parallel + + function cslib_extract(ptr,flag) bind(c) + use iso_c_binding + integer(c_int) :: cslib_extract + type(c_ptr), value :: ptr + integer(c_int), value :: flag + end function cslib_extract +end interface + +end module cslib_wrap diff --git a/lib/message/cslib/src/cslib_wrap.h b/lib/message/cslib/src/cslib_wrap.h new file mode 100644 index 0000000000000000000000000000000000000000..bf7df029c391095f82bdbdd9891b4350ffd18375 --- /dev/null +++ b/lib/message/cslib/src/cslib_wrap.h @@ -0,0 +1,54 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +/* C style library interface to CSlib class + ifdefs allow this file to be included in a C program +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +void cslib_open(int, const char *, const void *, const void *, void **); +void cslib_open_fortran(int, const char *, const char *, const void *, void **); +void cslib_open_fortran_mpi_one(int, const char *, const void *, + const void *, void **); +void cslib_close(void *); + +void cslib_send(void *, int, int); + +void cslib_pack_int(void *, int, int); +void cslib_pack_int64(void *, int, int64_t); +void cslib_pack_float(void *, int, float); +void cslib_pack_double(void *, int, double); +void cslib_pack_string(void *, int, char *); +void cslib_pack(void *, int, int, int, void *); +void cslib_pack_parallel(void *, int, int, int, int *, int, void *); + +int cslib_recv(void *, int *, int **, int **, int **); + +int cslib_unpack_int(void *, int); +int64_t cslib_unpack_int64(void *, int); +float cslib_unpack_float(void *, int); +double cslib_unpack_double(void *, int); +char *cslib_unpack_string(void *, int); +void *cslib_unpack(void *, int); +void cslib_unpack_data(void *, int, void *); +void cslib_unpack_parallel(void *, int, int, int *, int, void *); + +int cslib_extract(void *, int); + +#ifdef __cplusplus +} +#endif diff --git a/lib/message/cslib/src/msg.cpp b/lib/message/cslib/src/msg.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c67e4a5c8ccf869c249ea926f96cc968dd2c33e7 --- /dev/null +++ b/lib/message/cslib/src/msg.cpp @@ -0,0 +1,110 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include + +#include "msg.h" + +using namespace CSLIB_NS; + +/* ---------------------------------------------------------------------- */ + +Msg::Msg(int csflag, const void *ptr, MPI_Comm cworld) +{ + world = cworld; + MPI_Comm_rank(world,&me); + MPI_Comm_size(world,&nprocs); + + init(csflag); +} + +/* ---------------------------------------------------------------------- */ + +Msg::Msg(int csflag, const void *ptr) +{ + world = 0; + me = 0; + nprocs = 1; + + init(csflag); +} + +/* ---------------------------------------------------------------------- */ + +void Msg::init(int csflag) +{ + client = server = 0; + if (csflag == 0) client = 1; + else if (csflag == 1) server = 1; + + nsend = nrecv = 0; +} + +/* ---------------------------------------------------------------------- */ + +void Msg::allocate(int nheader, int &maxheader, int *&header, + int nbuf, int &maxbuf, char *&buf) +{ + if (nheader > maxheader) { + sfree(header); + maxheader = nheader; + header = (int *) smalloc(maxheader*sizeof(int)); + } + + if (nbuf > maxbuf) { + sfree(buf); + maxbuf = nbuf; + buf = (char *) smalloc(maxbuf*sizeof(char)); + } +} + +/* ---------------------------------------------------------------------- */ + +void *Msg::smalloc(int nbytes) +{ + if (nbytes == 0) return NULL; + void *ptr = (void *) malloc(nbytes); + if (ptr == NULL) { + char str[128]; + sprintf(str,"Failed to allocate %d bytes",nbytes); + } + return ptr; +} + +/* ---------------------------------------------------------------------- */ + +void Msg::sfree(void *ptr) +{ + if (ptr == NULL) return; + free(ptr); +} + +/* ---------------------------------------------------------------------- */ + +void Msg::error_all(const char *str) +{ + if (me == 0) printf("CSlib ERROR: %s\n",str); + MPI_Abort(world,1); +} + +/* ---------------------------------------------------------------------- */ + +void Msg::error_one(const char *str) +{ + printf("CSlib ERROR: %s\n",str); + MPI_Abort(world,1); +} diff --git a/lib/message/cslib/src/msg.h b/lib/message/cslib/src/msg.h new file mode 100644 index 0000000000000000000000000000000000000000..f75942b027827e5f61a00837f95419e64bde1b94 --- /dev/null +++ b/lib/message/cslib/src/msg.h @@ -0,0 +1,52 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#ifndef MSG_H +#define MSG_H + +#include + +namespace CSLIB_NS { + +class Msg { + public: + int nsend,nrecv; + MPI_Comm world; + + Msg(int, const void *, MPI_Comm); + Msg(int, const void *); + virtual ~Msg() {} + virtual void send(int, int *, int, char *) = 0; + virtual void recv(int &, int *&, int &, char *&) = 0; + + protected: + int me,nprocs; + int client,server; + + int nfield; + int *fieldID,*fieldtype,*fieldlen; + int lengths[2]; + + void init(int); + void allocate(int, int &, int *&, int, int &, char *&); + void *smalloc(int); + void sfree(void *); + void error_all(const char *); + void error_one(const char *); +}; + + +} + +#endif diff --git a/lib/message/cslib/src/msg_file.cpp b/lib/message/cslib/src/msg_file.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d97e249fad7efdbc3228c6b463995facc315c7f3 --- /dev/null +++ b/lib/message/cslib/src/msg_file.cpp @@ -0,0 +1,143 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include + +#include "msg_file.h" + +using namespace CSLIB_NS; + +#define MAXLINE 256 +#define SLEEP 0.1 // delay in CPU secs to check for message file + +/* ---------------------------------------------------------------------- */ + +MsgFile::MsgFile(int csflag, const void *ptr, MPI_Comm cworld) : + Msg(csflag, ptr, cworld) +{ + char *filename = (char *) ptr; + init(filename); +} + +/* ---------------------------------------------------------------------- */ + +MsgFile::MsgFile(int csflag, const void *ptr) : Msg(csflag, ptr) +{ + char *filename = (char *) ptr; + init(filename); +} + +/* ---------------------------------------------------------------------- */ + +MsgFile::~MsgFile() +{ + delete [] fileroot; +} + +/* ---------------------------------------------------------------------- */ + +void MsgFile::init(char *filename) +{ + int n = strlen(filename) + 1; + fileroot = new char[n]; + strcpy(fileroot,filename); +} + +/* ---------------------------------------------------------------------- */ + +void MsgFile::send(int nheader, int *header, int nbuf, char *buf) +{ + char filename[MAXLINE]; + + lengths[0] = nheader; + lengths[1] = nbuf; + + if (me == 0) { + if (client) sprintf(filename,"%s.%s",fileroot,"client"); + else if (server) sprintf(filename,"%s.%s",fileroot,"server"); + + fp = fopen(filename,"wb"); + if (!fp) error_one("send(): Could not open send message file"); + fwrite(lengths,sizeof(int),2,fp); + fwrite(header,sizeof(int),nheader,fp); + fwrite(buf,1,nbuf,fp); + fclose(fp); + } + + // create empty signal file + + if (me == 0) { + if (client) sprintf(filename,"%s.%s",fileroot,"client.signal"); + else if (server) sprintf(filename,"%s.%s",fileroot,"server.signal"); + fp = fopen(filename,"w"); + fclose(fp); + } +} + +/* ---------------------------------------------------------------------- */ + +void MsgFile::recv(int &maxheader, int *&header, int &maxbuf, char *&buf) +{ + char filename[MAXLINE]; + + // wait until signal file exists to open message file + + if (me == 0) { + if (client) sprintf(filename,"%s.%s",fileroot,"server.signal"); + else if (server) sprintf(filename,"%s.%s",fileroot,"client.signal"); + + int delay = (int) (1000000 * SLEEP); + while (1) { + fp = fopen(filename,"r"); + if (fp) break; + usleep(delay); + } + fclose(fp); + + if (client) sprintf(filename,"%s.%s",fileroot,"server"); + else if (server) sprintf(filename,"%s.%s",fileroot,"client"); + fp = fopen(filename,"rb"); + if (!fp) error_one("recv(): Could not open recv message file"); + } + + // read and broadcast data + + if (me == 0) fread(lengths,sizeof(int),2,fp); + if (nprocs > 1) MPI_Bcast(lengths,2,MPI_INT,0,world); + + int nheader = lengths[0]; + int nbuf = lengths[1]; + allocate(nheader,maxheader,header,nbuf,maxbuf,buf); + + if (me == 0) fread(header,sizeof(int),nheader,fp); + if (nprocs > 1) MPI_Bcast(header,nheader,MPI_INT,0,world); + + if (me == 0) fread(buf,1,nbuf,fp); + if (nprocs > 1) MPI_Bcast(buf,nbuf,MPI_CHAR,0,world); + + // delete both message and signal file + + if (me == 0) { + fclose(fp); + unlink(filename); + if (client) sprintf(filename,"%s.%s",fileroot,"server.signal"); + else if (server) sprintf(filename,"%s.%s",fileroot,"client.signal"); + unlink(filename); + } +} diff --git a/lib/message/cslib/src/msg_file.h b/lib/message/cslib/src/msg_file.h new file mode 100644 index 0000000000000000000000000000000000000000..d6bd802607aa18c1b34b7c92a2ea3f08e4180563 --- /dev/null +++ b/lib/message/cslib/src/msg_file.h @@ -0,0 +1,40 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#ifndef MSG_FILE_H +#define MSG_FILE_H + +#include +#include "msg.h" + +namespace CSLIB_NS { + +class MsgFile : public Msg { + public: + MsgFile(int, const void *, MPI_Comm); + MsgFile(int, const void *); + ~MsgFile(); + void send(int, int *, int, char *); + void recv(int &, int *&, int &, char *&); + + private: + char *fileroot; + FILE *fp; + + void init(char *); +}; + +} + +#endif diff --git a/lib/message/cslib/src/msg_mpi_one.cpp b/lib/message/cslib/src/msg_mpi_one.cpp new file mode 100644 index 0000000000000000000000000000000000000000..db11735b277699dd08f30c7b8ec112050779fa19 --- /dev/null +++ b/lib/message/cslib/src/msg_mpi_one.cpp @@ -0,0 +1,82 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include + +#include "msg_mpi_one.h" + +using namespace CSLIB_NS; + +/* ---------------------------------------------------------------------- */ + +MsgMPIOne::MsgMPIOne(int csflag, const void *ptr, MPI_Comm cworld) : + Msg(csflag, ptr, cworld) +{ + // NOTE: ideally would skip this call if mpi/two + init(ptr); +} + +/* ---------------------------------------------------------------------- */ + +void MsgMPIOne::init(const void *ptr) +{ + MPI_Comm *pbothcomm = (MPI_Comm *) ptr; + bothcomm = *pbothcomm; + + if (client) { + MPI_Comm_size(world,&nprocs); + otherroot = nprocs; + } else if (server) { + otherroot = 0; + } +} + +/* ---------------------------------------------------------------------- */ + +void MsgMPIOne::send(int nheader, int *header, int nbuf, char *buf) +{ + lengths[0] = nheader; + lengths[1] = nbuf; + + if (me == 0) { + MPI_Send(lengths,2,MPI_INT,otherroot,0,bothcomm); + MPI_Send(header,nheader,MPI_INT,otherroot,0,bothcomm); + MPI_Send(buf,nbuf,MPI_CHAR,otherroot,0,bothcomm); + } +} + +/* ---------------------------------------------------------------------- */ + +void MsgMPIOne::recv(int &maxheader, int *&header, int &maxbuf, char *&buf) +{ + MPI_Status status; + + if (me == 0) MPI_Recv(lengths,2,MPI_INT,otherroot,0,bothcomm,&status); + if (nprocs > 1) MPI_Bcast(lengths,2,MPI_INT,0,world); + + int nheader = lengths[0]; + int nbuf = lengths[1]; + allocate(nheader,maxheader,header,nbuf,maxbuf,buf); + + if (me == 0) MPI_Recv(header,nheader,MPI_INT,otherroot,0,bothcomm,&status); + if (nprocs > 1) MPI_Bcast(header,nheader,MPI_INT,0,world); + + if (me == 0) MPI_Recv(buf,nbuf,MPI_CHAR,otherroot,0,bothcomm,&status); + if (nprocs > 1) MPI_Bcast(buf,nbuf,MPI_CHAR,0,world); +} diff --git a/lib/message/cslib/src/msg_mpi_one.h b/lib/message/cslib/src/msg_mpi_one.h new file mode 100644 index 0000000000000000000000000000000000000000..4b4140a3f70edaff50a1fe1aa6e0af2cfca2ed0a --- /dev/null +++ b/lib/message/cslib/src/msg_mpi_one.h @@ -0,0 +1,38 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#ifndef MSG_MPI_ONE_H +#define MSG_MPI_ONE_H + +#include "msg.h" + +namespace CSLIB_NS { + +class MsgMPIOne : public Msg { + public: + MsgMPIOne(int, const void *, MPI_Comm); + virtual ~MsgMPIOne() {} + void send(int, int *, int, char *); + void recv(int &, int *&, int &, char *&); + + protected: + MPI_Comm bothcomm; + int otherroot; + + void init(const void *); +}; + +} + +#endif diff --git a/lib/message/cslib/src/msg_mpi_two.cpp b/lib/message/cslib/src/msg_mpi_two.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e9a9e87eeba99b802554383473ba806e179dab06 --- /dev/null +++ b/lib/message/cslib/src/msg_mpi_two.cpp @@ -0,0 +1,81 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include + +#include "msg_mpi_two.h" + +using namespace CSLIB_NS; + +/* ---------------------------------------------------------------------- */ + +MsgMPITwo::MsgMPITwo(int csflag, const void *ptr, MPI_Comm cworld) : + MsgMPIOne(csflag, ptr, cworld) +{ + char *filename = (char *) ptr; + init(filename); +} + +/* ---------------------------------------------------------------------- */ + +MsgMPITwo::~MsgMPITwo() +{ + // free the inter comm that spans both client and server + + MPI_Comm_free(&bothcomm); + MPI_Close_port(port); +} + +/* ---------------------------------------------------------------------- */ + +void MsgMPITwo::init(char *filename) +{ + if (client) { + if (me == 0) { + FILE *fp = NULL; + while (!fp) { + fp = fopen(filename,"r"); + if (!fp) sleep(1); + } + fgets(port,MPI_MAX_PORT_NAME,fp); + //printf("Client port: %s\n",port); + fclose(fp); + } + + MPI_Bcast(port,MPI_MAX_PORT_NAME,MPI_CHAR,0,world); + MPI_Comm_connect(port,MPI_INFO_NULL,0,world,&bothcomm); + //if (me == 0) printf("CLIENT comm connect\n"); + if (me == 0) unlink(filename); + + } else if (server) { + MPI_Open_port(MPI_INFO_NULL,port); + + if (me == 0) { + //printf("Server name: %s\n",port); + FILE *fp = fopen(filename,"w"); + fprintf(fp,"%s",port); + fclose(fp); + } + + MPI_Comm_accept(port,MPI_INFO_NULL,0,world,&bothcomm); + //if (me == 0) printf("SERVER comm accept\n"); + } + + otherroot = 0; +} diff --git a/lib/message/cslib/src/msg_mpi_two.h b/lib/message/cslib/src/msg_mpi_two.h new file mode 100644 index 0000000000000000000000000000000000000000..7b31db5a63a49ac4eba75fa37b172262c59a017a --- /dev/null +++ b/lib/message/cslib/src/msg_mpi_two.h @@ -0,0 +1,35 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#ifndef MSG_MPI_TWO_H +#define MSG_MPI_TWO_H + +#include "msg_mpi_one.h" + +namespace CSLIB_NS { + +class MsgMPITwo : public MsgMPIOne { + public: + MsgMPITwo(int, const void *, MPI_Comm); + ~MsgMPITwo(); + + private: + char port[MPI_MAX_PORT_NAME]; + + void init(char *); +}; + +} + +#endif diff --git a/lib/message/cslib/src/msg_zmq.cpp b/lib/message/cslib/src/msg_zmq.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c2d408f3a5d73a35330b951e4d150d5312dea727 --- /dev/null +++ b/lib/message/cslib/src/msg_zmq.cpp @@ -0,0 +1,140 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include + +#include "msg_zmq.h" + +using namespace CSLIB_NS; + +/* ---------------------------------------------------------------------- */ + +MsgZMQ::MsgZMQ(int csflag, const void *ptr, MPI_Comm cworld) : + Msg(csflag, ptr, cworld) +{ + char *port = (char *) ptr; + init(port); +} + +MsgZMQ::MsgZMQ(int csflag, const void *ptr) : Msg(csflag, ptr) +{ + char *port = (char *) ptr; + init(port); +} + +/* ---------------------------------------------------------------------- */ + +MsgZMQ::~MsgZMQ() +{ + if (me == 0) { + zmq_close(socket); + zmq_ctx_destroy(context); + } +} + +/* ---------------------------------------------------------------------- */ + +void MsgZMQ::init(char *port) +{ +#ifdef ZMQ_NO + error_all("constructor(): Library not built with ZMQ support"); +#endif + + if (me == 0) { + int n = strlen(port) + 8; + char *socket_name = new char[n]; + strcpy(socket_name,"tcp://"); + strcat(socket_name,port); + + if (client) { + context = zmq_ctx_new(); + socket = zmq_socket(context,ZMQ_REQ); + zmq_connect(socket,socket_name); + } else if (server) { + context = zmq_ctx_new(); + socket = zmq_socket(context,ZMQ_REP); + int rc = zmq_bind(socket,socket_name); + if (rc) error_one("constructor(): Server could not make socket connection"); + } + + delete [] socket_name; + } +} + +/* ---------------------------------------------------------------------- + client/server sockets (REQ/REP) must follow this protocol: + client sends request (REQ) which server receives + server sends response (REP) which client receives + every exchange is of this form, server cannot initiate a send + thus each ZMQ send below has a following ZMQ recv, except last one + if client calls send(), it will next call recv() + if server calls send(), it will next call recv() from its wait loop + in either case, recv() issues a ZMQ recv to match last ZMQ send here +------------------------------------------------------------------------- */ + +void MsgZMQ::send(int nheader, int *header, int nbuf, char *buf) +{ + lengths[0] = nheader; + lengths[1] = nbuf; + + if (me == 0) { + zmq_send(socket,lengths,2*sizeof(int),0); + zmq_recv(socket,NULL,0,0); + } + + if (me == 0) { + zmq_send(socket,header,nheader*sizeof(int),0); + zmq_recv(socket,NULL,0,0); + } + + if (me == 0) zmq_send(socket,buf,nbuf,0); +} + +/* ---------------------------------------------------------------------- + client/server sockets (REQ/REP) must follow this protocol: + client sends request (REQ) which server receives + server sends response (REP) which client receives + every exchange is of this form, server cannot initiate a send + thus each ZMQ recv below has a following ZMQ send, except last one + if client calls recv(), it will next call send() to ping server again, + if server calls recv(), it will next call send() to respond to client + in either case, send() issues a ZMQ send to match last ZMQ recv here +------------------------------------------------------------------------- */ + +void MsgZMQ::recv(int &maxheader, int *&header, int &maxbuf, char *&buf) +{ + if (me == 0) { + zmq_recv(socket,lengths,2*sizeof(int),0); + zmq_send(socket,NULL,0,0); + } + if (nprocs > 1) MPI_Bcast(lengths,2,MPI_INT,0,world); + + int nheader = lengths[0]; + int nbuf = lengths[1]; + allocate(nheader,maxheader,header,nbuf,maxbuf,buf); + + if (me == 0) { + zmq_recv(socket,header,nheader*sizeof(int),0); + zmq_send(socket,NULL,0,0); + } + if (nprocs > 1) MPI_Bcast(header,nheader,MPI_INT,0,world); + + if (me == 0) zmq_recv(socket,buf,nbuf,0); + if (nprocs > 1) MPI_Bcast(buf,nbuf,MPI_CHAR,0,world); +} diff --git a/lib/message/cslib/src/msg_zmq.h b/lib/message/cslib/src/msg_zmq.h new file mode 100644 index 0000000000000000000000000000000000000000..c0621a26ff1356a6410c6f8267a5640f04522681 --- /dev/null +++ b/lib/message/cslib/src/msg_zmq.h @@ -0,0 +1,38 @@ +/* ---------------------------------------------------------------------- + CSlib - Client/server library for code coupling + http://cslib.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright 2018 National Technology & Engineering Solutions of + Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with + NTESS, the U.S. Government retains certain rights in this software. + This software is distributed under the modified Berkeley Software + Distribution (BSD) License. + + See the README file in the top-level CSlib directory. +------------------------------------------------------------------------- */ + +#ifndef MSG_ZMQ_H +#define MSG_ZMQ_H + +#include "msg.h" + +namespace CSLIB_NS { + +class MsgZMQ : public Msg { + public: + MsgZMQ(int, const void *, MPI_Comm); + MsgZMQ(int, const void *); + ~MsgZMQ(); + void send(int, int *, int, char *); + void recv(int &, int *&, int &, char *&); + + private: + void *context,*socket; + + void init(char *); +}; + +} + +#endif diff --git a/lib/scafacos/Install.py b/lib/scafacos/Install.py new file mode 100644 index 0000000000000000000000000000000000000000..d23e8a36862852f9599f882011d452432c2adba4 --- /dev/null +++ b/lib/scafacos/Install.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python + +# Install.py tool to download, unpack, build, and link to the Scafacos library +# used to automate the steps described in the README file in this dir + +from __future__ import print_function +import sys,os,re,subprocess + +# help message + +help = """ +Syntax from src dir: make lib-scafacos args="-b" + or: make lib-scafacos args="-p /usr/local/scafacos" +Syntax from lib dir: python Install.py -b + or: python Install.py -p /usr/local/scafacos + +specify zero or more options, order does not matter + + -b = download and build the Scafacos library + -p = specify folder of existing Scafacos installation + + always creates includelink, liblink to Scafacos dirs + +Example: + +make lib-scafacos args="-b" # download/build in lib/scafacos/scafacos +make lib-scafacos args="-p $HOME/scafacos" # use existing Scafacos installation in $HOME +""" + +# settings + +version = "scafacos-1.0.1" +url = "https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz" +#url = "https://gigamove.rz.rwth-aachen.de/d/id/CTzyApN76MXMJ6/dd/100" % version + +# print error message or help + +def error(str=None): + if not str: print(help) + else: print("ERROR",str) + sys.exit() + +# expand to full path name +# process leading '~' or relative path + +def fullpath(path): + return os.path.abspath(os.path.expanduser(path)) + +def which(program): + def is_exe(fpath): + return os.path.isfile(fpath) and os.access(fpath, os.X_OK) + + fpath, fname = os.path.split(program) + if fpath: + if is_exe(program): + return program + else: + for path in os.environ["PATH"].split(os.pathsep): + path = path.strip('"') + exe_file = os.path.join(path, program) + if is_exe(exe_file): + return exe_file + + return None + +def geturl(url,fname): + success = False + + if which('curl') != None: + cmd = 'curl -L -o "%s" %s' % (fname,url) + try: + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + success = True + except subprocess.CalledProcessError as e: + print("Calling curl failed with: %s" % e.output.decode('UTF-8')) + + if not success and which('wget') != None: + cmd = 'wget -O "%s" %s' % (fname,url) + print("Wget command: %s" % cmd) + try: + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + success = True + except subprocess.CalledProcessError as e: + print("Calling wget failed with: %s" % e.output.decode('UTF-8')) + + if not success: + error("Failed to download source code with 'curl' or 'wget'") + return + +# parse args + +args = sys.argv[1:] +nargs = len(args) + +homepath = "." + +buildflag = True +pathflag = False +linkflag = True + +iarg = 0 +while iarg < nargs: + if args[iarg] == "-v": + if iarg+2 > nargs: error() + version = args[iarg+1] + iarg += 2 + elif args[iarg] == "-p": + if iarg+2 > nargs: error() + scafacospath = fullpath(args[iarg+1]) + pathflag = True + iarg += 2 + elif args[iarg] == "-b": + buildflag = True + iarg += 1 + else: error() + +homepath = fullpath(homepath) +homedir = "%s/%s" % (homepath,version) + +if (pathflag): + if not os.path.isdir(scafacospath): error("Scafacos path does not exist") + homedir =scafacospath + +if (buildflag and pathflag): + error("Cannot use -b and -p flag at the same time") + +# download and unpack Scafacos tarball + +if buildflag: + print("Downloading Scafacos ...") + geturl(url,"%s/%s.tar.gz" % (homepath,version)) + + print("Unpacking Scafacos tarball ...") + if os.path.exists("%s/%s" % (homepath,version)): + cmd = 'rm -rf "%s/%s"' % (homepath,version) + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + cmd = 'cd "%s"; tar -xzvf %s.tar.gz' % (homepath,version) + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + os.remove("%s/%s.tar.gz" % (homepath,version)) + if os.path.basename(homedir) != version: + if os.path.exists(homedir): + cmd = 'rm -rf "%s"' % homedir + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + os.rename("%s/%s" % (homepath,version),homedir) + +# build Scafacos + +if buildflag: + print("Building Scafacos ...") + cmd = 'cd "%s"; ./configure --prefix="`pwd`/build" --disable-doc --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m --with-internal-fftw --with-internal-pfft --with-internal-pnfft CC=mpicc FC=mpif90 CXX=mpicxx F77= > log.txt; make -j; make install' % homedir + txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + print(txt.decode('UTF-8')) + +# create 2 links in lib/scafacos to Scafacos include/lib dirs + +if linkflag: + print("Creating links to Scafacos include and lib files") + if os.path.isfile("includelink") or os.path.islink("includelink"): + os.remove("includelink") + if os.path.isfile("liblink") or os.path.islink("liblink"): + os.remove("liblink") + cmd = 'ln -s "%s/build/include" includelink' % homedir + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + cmd = 'ln -s "%s/build/lib" liblink' % homedir + subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) diff --git a/lib/scafacos/README b/lib/scafacos/README new file mode 100644 index 0000000000000000000000000000000000000000..e5f1ecd92c05dbe095faa149065f066e6e135406 --- /dev/null +++ b/lib/scafacos/README @@ -0,0 +1,76 @@ +This directory contains links to the ScaFaCoS library which +is required to use the KSPACE scafacos and its kspace_style +scafacos command in a LAMMPS input script. + +The ScaFaCoS library is available at http://scafacos.de or +on github at https://github.com/scafacos, the libary was +developed by a consortium of different universities in +Germany (Bonn, Chemnitz, Stuttgart, Wuppertal) and +the Research Centre Juelich (Juelich Supercomputing Centre). + +----------------- + +Instructions: + +1.) Download ScaFaCoS at http://scafacos.de or directly from github + https://github.com/scafacos where you can either clone the + repository or download the latest stable release. + NOTE: For the P2NFFT solver, you require an installation of the + GNU Scientific Library (GSL). Also to ensure the correct + linker-flags are used, ScaFaCoS employs the pkg-config + tool, which is also required. + If you cloned the repository, please refer to 2.), else continue + with 3.) + +2.) If you cloned the git repository, you require autotools to setup + the library. For that the following packages are required: + m4 + autotools + automake + libtools + In the build_aux folder of the scafacos folder, you can find the + get_autotools.sh script, that downloads and installs the tools + to ${HOME}/local. To change the target folder, please change the + value of 'myprefix' in that script. + To start the auto-configuration process, please run the './bootstrap' + command in the scafacos base-folder. + +3.) If you downloaded the library as a tarball, please extract the file + to somewhere in your file system, or if you finished running + './bootstrap', please run './configure' in the base folder. + Important flags for './configure' are: + --prefix=: sets the directory the compiled files will + be installed to [default: /usr/local] + --fcs-enable-solvers=: sets the list of solvers that are going to + be built. By default all solvers will be + built. Currently supported by the kspace in LAMMPS + are: direct, ewald, fmm, p2nfft + The other solvers might work, but support + is purely experimental at the moment. To + give a list of solvers, use a comma seperated + list. + --fcs-disable-doc: disables the compilation of the documentation, + e.g. if no Latex is available on the system. + +4.) To build the library after configuration, run 'make' from the base folder. + +5.) To install the libray in the designated installation folder, run 'make install'. + Installation is required, as ScaFaCoS does not support an in-source build! + +6.) Create two soft links to this directory (lib/scafacos) to where the libary + is installed. E.g. if you built ScaFaCoS in the default install directory: + % ln -s /usr/local/include includelink + % ln -s /usr/local/lib liblink + for any custom directory : + % ln -s /include includelink + % ln -s /lib liblink + +7.) ScaFaCoS uses the pkg-config tool to supply the correct, so you need to setup your + PKG_CONFIG_PATH environment variable to include the lib/pkgconfig folder in the + installation directory. + Depending on the shell you use, this can be done either by: + % export PKG_CONFIG_PATH=/lib/pkgconfig:${PKG_CONFIG_PATH} + or + % setenv PKG_CONFIG_PATH=/lib/pkgconfig:${PKG_CONFIG_PATH} + +----------------- diff --git a/potentials/BNCH.ILP b/potentials/BNCH.ILP index 3f38b5e35aea826c1732f61e68830cbedc874db0..6ca56ca18620a049ab2d5227f33a61039e7bced9 100644 --- a/potentials/BNCH.ILP +++ b/potentials/BNCH.ILP @@ -1,6 +1,6 @@ # Interlayer Potential (ILP) for graphene/graphene, graphene/hBN and hBN/hBN junctions # -# Cite as Wengen Ouyang,Davide Mandelli, Michael Urbakh, Oded Hod, arXiv:1806.09555 (2018). +# Cite as W. Ouyang, D. Mandelli, M. Urbakh and O. Hod, Nano Letters 18, 6009-6016 (2018). # # ----------------- Repulsion Potential ------------------++++++++++++++ Vdw Potential ++++++++++++++++************ # beta(A) alpha delta(A) epsilon(meV) C(meV) d sR reff(A) C6(meV*A^6) S rcut diff --git a/potentials/CH.KC b/potentials/CH.KC index d2fe543cf8f11cd21581767edcb0ad0a1e93121f..029f682f3494725ce1b5f16bc2ea7f8fa72c0325 100644 --- a/potentials/CH.KC +++ b/potentials/CH.KC @@ -1,6 +1,6 @@ -# Refined parameters for Kolmogorov-Crespi Potential +# Refined parameters for Kolmogorov-Crespi Potential without taper function # -# Cite as Wengen Ouyang,Davide Mandelli, Michael Urbakh, Oded Hod, arXiv:1806.09555 (2018). +# Cite as W. Ouyang, D. Mandelli, M. Urbakh and O. Hod, Nano Letters 18, 6009-6016 (2018). # # z0 C0 C2 C4 C delta lambda A S rcut C C 3.328819 21.847167 12.060173 4.711099 6.678908e-4 0.7718101 3.143921 12.660270 1.0 2.0 diff --git a/potentials/CH_taper.KC b/potentials/CH_taper.KC new file mode 100644 index 0000000000000000000000000000000000000000..0f08b2e6dd3d7ad069f3b70aeb50dde7e7ae2c4d --- /dev/null +++ b/potentials/CH_taper.KC @@ -0,0 +1,10 @@ +# Refined parameters for Kolmogorov-Crespi Potential with taper function +# +# Cite as W. Ouyang, D. Mandelli, M. Urbakh and O. Hod, Nano Letters 18, 6009-6016 (2018). +# +# z0 C0 C2 C4 C delta lambda A S rcut +C C 3.416084 20.021583 10.9055107 4.2756354 1.0010836E-2 0.8447122 2.9360584 14.3132588 1.0 2.0 +C H 2.849054 72.557245 1.0164169E-2 65.923312 8.7962504E-5 0.3349237 3.0402632 14.7533201 1.0 1.5 +H H 2.187478 3.915802E-5 5.0896431E-5 3.6657827 1.5373722446 0.9633581 0.4249989 1.570737E-4 1.0 1.2 +H C 2.849054 72.557245 1.0164169E-2 65.923312 8.7962504E-5 0.3349237 3.0402632 14.7533201 1.0 2.2 + diff --git a/python/lammps.py b/python/lammps.py index 2f4ffb642ef084fbbd1b7567bfc363220288dafc..598e4c506f1bf64d451432305d8c15ae8bd82fdb 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -173,6 +173,9 @@ class lammps(object): self.lib.lammps_open(narg,cargs,comm_val,byref(self.lmp)) else: + if lammps.has_mpi4py: + from mpi4py import MPI + self.comm = MPI.COMM_WORLD self.opened = 1 if cmdargs: cmdargs.insert(0,"lammps.py") @@ -862,6 +865,10 @@ class PyLammps(object): def run(self, *args, **kwargs): output = self.__getattr__('run')(*args, **kwargs) + + if(lammps.has_mpi4py): + output = self.lmp.comm.bcast(output, root=0) + self.runs += get_thermo_data(output) return output diff --git a/src/.gitignore b/src/.gitignore index df3a22a5cd08b1a924aadde018674d972f340a5f..5699a87089cea119b080ce2b67a223fcf67ff45f 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -41,6 +41,11 @@ /pair_meamc.cpp /pair_meamc.h +/ptm_*.cpp +/ptm_*.h +/compute_ptm.cpp +/compute_ptm.h + /fix_qeq*.cpp /fix_qeq*.h @@ -296,12 +301,18 @@ /compute_plasticity_atom.h /compute_pressure_bocs.cpp /compute_pressure_bocs.h +/compute_pressure_cylinder.cpp +/compute_pressure_cylinder.h /compute_pressure_grem.cpp /compute_pressure_grem.h /compute_rigid_local.cpp /compute_rigid_local.h /compute_spec_atom.cpp /compute_spec_atom.h +/compute_stress_mop.cpp +/compute_stress_mop.h +/compute_stress_mop.profile.cpp +/compute_stress_mop.profile.h /compute_stress_tally.cpp /compute_stress_tally.h /compute_temp_asphere.cpp @@ -420,6 +431,8 @@ /fix_eos_table.h /fix_evaporate.cpp /fix_evaporate.h +/fix_ffl.cpp +/fix_ffl.h /fix_filter_corotate.cpp /fix_filter_corotate.h /fix_viscosity.cpp diff --git a/src/ASPHERE/fix_nve_asphere.cpp b/src/ASPHERE/fix_nve_asphere.cpp index a33848f1a1dac5c143c411414a8eba0c8a50c683..61e3c35293bb9eb146e4a4b05573f384373ce995 100644 --- a/src/ASPHERE/fix_nve_asphere.cpp +++ b/src/ASPHERE/fix_nve_asphere.cpp @@ -62,7 +62,7 @@ void FixNVEAsphere::init() /* ---------------------------------------------------------------------- */ -void FixNVEAsphere::initial_integrate(int vflag) +void FixNVEAsphere::initial_integrate(int /*vflag*/) { double dtfm; double inertia[3],omega[3]; diff --git a/src/ASPHERE/fix_nve_asphere_noforce.cpp b/src/ASPHERE/fix_nve_asphere_noforce.cpp index d944b68f35a425cceae1f6faec6ed3b5e70a68ac..9cc430592a075bd7e61fbf7fe56f8c9882daf7f9 100644 --- a/src/ASPHERE/fix_nve_asphere_noforce.cpp +++ b/src/ASPHERE/fix_nve_asphere_noforce.cpp @@ -64,7 +64,7 @@ void FixNVEAsphereNoforce::init() /* ---------------------------------------------------------------------- */ -void FixNVEAsphereNoforce::initial_integrate(int vflag) +void FixNVEAsphereNoforce::initial_integrate(int /*vflag*/) { AtomVecEllipsoid::Bonus *bonus; if (avec) bonus = avec->bonus; diff --git a/src/ASPHERE/fix_nve_line.cpp b/src/ASPHERE/fix_nve_line.cpp index c145e99fcb1a608e540941eb2b6402a58e6a5a33..51a502df89fffcf4dfacd4407e01934ad41a41ef 100644 --- a/src/ASPHERE/fix_nve_line.cpp +++ b/src/ASPHERE/fix_nve_line.cpp @@ -81,7 +81,7 @@ void FixNVELine::init() /* ---------------------------------------------------------------------- */ -void FixNVELine::initial_integrate(int vflag) +void FixNVELine::initial_integrate(int /*vflag*/) { double dtfm,dtirotate,length,theta; diff --git a/src/ASPHERE/fix_nve_tri.cpp b/src/ASPHERE/fix_nve_tri.cpp index d06063d905940276941a14f1d3f46e1f95a0ff5d..fb9bf64c58bf7cbbede432939718394e7cd73d17 100644 --- a/src/ASPHERE/fix_nve_tri.cpp +++ b/src/ASPHERE/fix_nve_tri.cpp @@ -75,7 +75,7 @@ void FixNVETri::init() /* ---------------------------------------------------------------------- */ -void FixNVETri::initial_integrate(int vflag) +void FixNVETri::initial_integrate(int /*vflag*/) { double dtfm; double omega[3]; diff --git a/src/BODY/body_nparticle.cpp b/src/BODY/body_nparticle.cpp index 684e5768dae00176fa05eaacf75cf43c1cb60468..10529ad3af8252c713c18bb9914f757aebb5e075 100644 --- a/src/BODY/body_nparticle.cpp +++ b/src/BODY/body_nparticle.cpp @@ -195,7 +195,7 @@ void BodyNparticle::data_body(int ibonus, int ninteger, int ndouble, called by Molecule class which needs single body size ------------------------------------------------------------------------- */ -double BodyNparticle::radius_body(int ninteger, int ndouble, +double BodyNparticle::radius_body(int /*ninteger*/, int ndouble, int *ifile, double *dfile) { int nsub = ifile[0]; @@ -258,7 +258,7 @@ void BodyNparticle::output(int ibonus, int m, double *values) /* ---------------------------------------------------------------------- */ -int BodyNparticle::image(int ibonus, double flag1, double flag2, +int BodyNparticle::image(int ibonus, double flag1, double /*flag2*/, int *&ivec, double **&darray) { double p[3][3]; diff --git a/src/BODY/body_rounded_polygon.cpp b/src/BODY/body_rounded_polygon.cpp index 1e232f0f3f59fbbdab6bf470920bcf2a70ff2036..00a09c912d8982e959de8c1ab46ff719fcfe39f6 100644 --- a/src/BODY/body_rounded_polygon.cpp +++ b/src/BODY/body_rounded_polygon.cpp @@ -323,7 +323,7 @@ void BodyRoundedPolygon::data_body(int ibonus, int ninteger, int ndouble, called by Molecule class which needs single body size ------------------------------------------------------------------------- */ -double BodyRoundedPolygon::radius_body(int ninteger, int ndouble, +double BodyRoundedPolygon::radius_body(int /*ninteger*/, int ndouble, int *ifile, double *dfile) { int nsub = ifile[0]; @@ -392,7 +392,7 @@ void BodyRoundedPolygon::output(int ibonus, int m, double *values) /* ---------------------------------------------------------------------- */ -int BodyRoundedPolygon::image(int ibonus, double flag1, double flag2, +int BodyRoundedPolygon::image(int ibonus, double flag1, double /*flag2*/, int *&ivec, double **&darray) { int j; diff --git a/src/BODY/body_rounded_polyhedron.cpp b/src/BODY/body_rounded_polyhedron.cpp index 6a9b97ae2348ec344b75656afbb3d5261282e5b5..0e2ebbed8307e90341247be332e1d9a90f0219d6 100644 --- a/src/BODY/body_rounded_polyhedron.cpp +++ b/src/BODY/body_rounded_polyhedron.cpp @@ -96,7 +96,7 @@ int BodyRoundedPolyhedron::nedges(AtomVecBody::Bonus *bonus) { int nvertices = bonus->ivalue[0]; int nedges = bonus->ivalue[1]; - int nfaces = bonus->ivalue[2]; + //int nfaces = bonus->ivalue[2]; if (nvertices == 1) return 0; else if (nvertices == 2) return 1; return nedges; //(nvertices+nfaces-2); // Euler's polyon formula: V-E+F=2 @@ -381,7 +381,7 @@ void BodyRoundedPolyhedron::data_body(int ibonus, int ninteger, int ndouble, called by Molecule class which needs single body size ------------------------------------------------------------------------- */ -double BodyRoundedPolyhedron::radius_body(int ninteger, int ndouble, +double BodyRoundedPolyhedron::radius_body(int /*ninteger*/, int ndouble, int *ifile, double *dfile) { int nsub = ifile[0]; @@ -460,10 +460,10 @@ void BodyRoundedPolyhedron::output(int ibonus, int m, double *values) /* ---------------------------------------------------------------------- */ -int BodyRoundedPolyhedron::image(int ibonus, double flag1, double flag2, +int BodyRoundedPolyhedron::image(int ibonus, double flag1, double /*flag2*/, int *&ivec, double **&darray) { - int j, nelements; + int nelements; double p[3][3]; double *x, rrad; @@ -488,7 +488,7 @@ int BodyRoundedPolyhedron::image(int ibonus, double flag1, double flag2, nelements = nvertices; } else { - int nfaces = bonus->ivalue[2]; + //int nfaces = bonus->ivalue[2]; int nedges = bonus->ivalue[1]; //nvertices + nfaces - 2; if (nvertices == 2) nedges = 1; // special case: rods double* edge_ends = &bonus->dvalue[3*nvertices]; diff --git a/src/BODY/fix_nve_body.cpp b/src/BODY/fix_nve_body.cpp index 0606723cb77d558c8500c5469e16d64773f962fd..0c74facf34b83e5c152f8511073c7f56c95b5754 100644 --- a/src/BODY/fix_nve_body.cpp +++ b/src/BODY/fix_nve_body.cpp @@ -54,7 +54,7 @@ void FixNVEBody::init() /* ---------------------------------------------------------------------- */ -void FixNVEBody::initial_integrate(int vflag) +void FixNVEBody::initial_integrate(int /*vflag*/) { double dtfm; double omega[3]; diff --git a/src/BODY/fix_wall_body_polygon.cpp b/src/BODY/fix_wall_body_polygon.cpp index 0e7aaea1e1a2a6c9ac0060c092eb703eaf90f2b6..3f8c08b6bdfae307512aae97d1b88be821a4b433 100644 --- a/src/BODY/fix_wall_body_polygon.cpp +++ b/src/BODY/fix_wall_body_polygon.cpp @@ -204,7 +204,7 @@ void FixWallBodyPolygon::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixWallBodyPolygon::post_force(int vflag) +void FixWallBodyPolygon::post_force(int /*vflag*/) { double vwall[3],dx,dy,dz,del1,del2,delxy,delr,rsq,eradi,rradi,wall_pos; int i,ni,npi,ifirst,nei,iefirst,side; @@ -310,9 +310,6 @@ void FixWallBodyPolygon::post_force(int vflag) rsq = dx*dx + dy*dy + dz*dz; if (rsq > radius[i]*radius[i]) continue; - double r = sqrt(rsq); - double rsqinv = 1.0 / rsq; - if (dnum[i] == 0) body2space(i); npi = dnum[i]; ifirst = dfirst[i]; @@ -475,12 +472,11 @@ void FixWallBodyPolygon::body2space(int i) int FixWallBodyPolygon::vertex_against_wall(int i, double wall_pos, double** x, double** f, double** torque, int side, - Contact* contact_list, int &num_contacts, double* facc) + Contact* contact_list, int &num_contacts, double* /*facc*/) { int ni, npi, ifirst, interact; - double xpi[3], xpj[3], dist, eradi, rradi; - double fx, fy, fz, rx, ry, rz; - int nlocal = atom->nlocal; + double xpi[3], eradi, rradi; + double fx, fy, fz; npi = dnum[i]; ifirst = dfirst[i]; @@ -499,9 +495,9 @@ int FixWallBodyPolygon::vertex_against_wall(int i, double wall_pos, xpi[1] = x[i][1] + discrete[ifirst+ni][1]; xpi[2] = x[i][2] + discrete[ifirst+ni][2]; - int mode, contact, p2vertex; - double d, R, hi[3], t, delx, dely, delz, fpair, shift; - double xj[3], rij; + int mode, contact; + double d, R, hi[3], delx, dely, delz, fpair; + double rij; // compute the distance from the vertex xpi to the wall @@ -671,7 +667,7 @@ void FixWallBodyPolygon::contact_forces(Contact& contact, double j_a, double** x, double** v, double** angmom, double** f, double** torque, double* vwall, double* facc) { - int ibody,ibonus,ifirst, jefirst, ni; + int ibody,ibonus,ifirst, ni; double fx,fy,fz,delx,dely,delz,rsq,rsqinv; double vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3; double fn[3],ft[3],vi[3]; diff --git a/src/BODY/fix_wall_body_polyhedron.cpp b/src/BODY/fix_wall_body_polyhedron.cpp index 17e9f0b8b5e05441dff0c93f333dde24793fd3e8..9504e256b497b45a9266a4680be2d5c8a4c7d9a4 100644 --- a/src/BODY/fix_wall_body_polyhedron.cpp +++ b/src/BODY/fix_wall_body_polyhedron.cpp @@ -211,9 +211,9 @@ void FixWallBodyPolyhedron::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixWallBodyPolyhedron::post_force(int vflag) +void FixWallBodyPolyhedron::post_force(int /*vflag*/) { - double vwall[3],dx,dy,dz,del1,del2,delxy,delr,rsq,eradi,rradi,wall_pos; + double vwall[3],dx,dy,dz,del1,del2,rsq,eradi,rradi,wall_pos; int i,ni,npi,ifirst,nei,iefirst,nfi,iffirst,side; double facc[3]; @@ -325,9 +325,6 @@ void FixWallBodyPolyhedron::post_force(int vflag) rsq = dx*dx + dy*dy + dz*dz; if (rsq > radius[i]*radius[i]) continue; - double r = sqrt(rsq); - double rsqinv = 1.0 / rsq; - if (dnum[i] == 0) body2space(i); npi = dnum[i]; ifirst = dfirst[i]; @@ -359,8 +356,7 @@ void FixWallBodyPolyhedron::post_force(int vflag) edge[iefirst+ni][5] = 0; } - int interact, num_contacts, done; - double delta_a, delta_ua, j_a; + int interact, num_contacts; Contact contact_list[MAX_CONTACTS]; num_contacts = 0; @@ -485,7 +481,7 @@ void FixWallBodyPolyhedron::body2space(int i) ---------------------------------------------------------------------- */ int FixWallBodyPolyhedron::sphere_against_wall(int i, double wall_pos, - int side, double* vwall, double** x, double** v, double** f, + int /*side*/, double* vwall, double** x, double** v, double** f, double** angmom, double** torque) { int mode; @@ -545,12 +541,11 @@ int FixWallBodyPolyhedron::sphere_against_wall(int i, double wall_pos, ---------------------------------------------------------------------- */ int FixWallBodyPolyhedron::edge_against_wall(int i, double wall_pos, - int side, double* vwall, double** x, double** f, double** torque, - Contact* contact_list, int &num_contacts, double* facc) + int side, double* vwall, double** x, double** /*f*/, double** /*torque*/, + Contact* /*contact_list*/, int &/*num_contacts*/, double* /*facc*/) { int ni, nei, mode, contact; double rradi; - int nlocal = atom->nlocal; nei = ednum[i]; rradi = rounded_radius[i]; @@ -584,7 +579,7 @@ int FixWallBodyPolyhedron::edge_against_wall(int i, double wall_pos, int FixWallBodyPolyhedron::compute_distance_to_wall(int ibody, int edge_index, double *xmi, double rounded_radius_i, double wall_pos, - int side, double* vwall, int &contact) + int /*side*/, double* vwall, int &contact) { int mode,ifirst,iefirst,npi1,npi2; double d1,d2,xpi1[3],xpi2[3],hi[3]; @@ -698,14 +693,14 @@ int FixWallBodyPolyhedron::compute_distance_to_wall(int ibody, int edge_index, ------------------------------------------------------------------------- */ void FixWallBodyPolyhedron::contact_forces(int ibody, - double j_a, double *xi, double *xj, double delx, double dely, double delz, + double j_a, double *xi, double * /*xj*/, double delx, double dely, double delz, double fx, double fy, double fz, double** x, double** v, double** angmom, double** f, double** torque, double* vwall) { - int ibonus,jbonus; + int ibonus; double fxt,fyt,fzt,rsq,rsqinv; double vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3; - double fn[3],ft[3],vi[3],vj[3]; + double fn[3],ft[3],vi[3]; double *quat, *inertia; AtomVecBody::Bonus *bonus; @@ -787,7 +782,7 @@ void FixWallBodyPolyhedron::contact_forces(Contact& contact, double j_a, double** x, double** v, double** angmom, double** f, double** torque, double* vwall, double* facc) { - int ibody,ibonus,ifirst, jefirst, ni; + int ibody,ibonus,ifirst,ni; double fx,fy,fz,delx,dely,delz,rsq,rsqinv; double vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3; double fn[3],ft[3],vi[3]; diff --git a/src/BODY/pair_body_rounded_polygon.cpp b/src/BODY/pair_body_rounded_polygon.cpp index 14ef70f476061f1240dad92b7e694e6aa1f5957c..6a176f1083542857951051d2cf6d456991663854 100644 --- a/src/BODY/pair_body_rounded_polygon.cpp +++ b/src/BODY/pair_body_rounded_polygon.cpp @@ -105,10 +105,9 @@ void PairBodyRoundedPolygon::compute(int eflag, int vflag) int i,j,ii,jj,inum,jnum,itype,jtype; int ni,nj,npi,npj,ifirst,jfirst; int nei,nej,iefirst,jefirst; - double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fx,fy,fz; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl; double rsq,rsqinv,r,radi,radj,eradi,eradj,rradi,rradj,k_nij,k_naij; - double xi[3],xj[3],fi[3],fj[3],ti[3],tj[3],facc[3]; - double *dxi,*dxj; + double xi[3],xj[3],facc[3]; int *ilist,*jlist,*numneigh,**firstneigh; evdwl = 0.0; @@ -598,7 +597,7 @@ void PairBodyRoundedPolygon::body2space(int i) void PairBodyRoundedPolygon::sphere_against_sphere(int i, int j, double delx, double dely, double delz, double rsq, - double k_n, double k_na, double** x, double** v, + double k_n, double k_na, double** /*x*/, double** v, double** f, int evflag) { double eradi,eradj,rradi,rradj; @@ -709,9 +708,8 @@ int PairBodyRoundedPolygon::vertex_against_edge(int i, int j, int ni, npi, ifirst, nei, iefirst; int nj, npj, jfirst, nej, jefirst; double xpi[3], xpj[3], dist, eradi, eradj, rradi, rradj; - double fx, fy, fz, rx, ry, rz, energy; + double fx, fy, fz, energy; int interact; - int nlocal = atom->nlocal; npi = dnum[i]; ifirst = dfirst[i]; @@ -758,7 +756,7 @@ int PairBodyRoundedPolygon::vertex_against_edge(int i, int j, int mode, contact, p2vertex; double d, R, hi[3], t, delx, dely, delz, fpair, shift; - double xj[3], rij; + double rij; // loop through body j's edges @@ -781,6 +779,7 @@ int PairBodyRoundedPolygon::vertex_against_edge(int i, int j, if (mode == VERTEXI) p2vertex = edge[jefirst+nj][0]; else if (mode == VERTEXJ) p2vertex = edge[jefirst+nj][1]; + // double xj[3]; // p2.body2space(p2vertex, xj); xpj[0] = x[j][0] + discrete[jfirst+p2vertex][0]; xpj[1] = x[j][1] + discrete[jfirst+p2vertex][1]; @@ -1166,7 +1165,7 @@ int PairBodyRoundedPolygon::compute_distance_to_vertex(int ibody, void PairBodyRoundedPolygon::contact_forces(Contact& contact, double j_a, double** x, double** v, double** angmom, double** f, - double** torque, double &evdwl, double* facc) + double** torque, double &/*evdwl*/, double* facc) { int ibody,jbody,ibonus,jbonus,ifirst,jefirst,ni,nj; double fx,fy,fz,delx,dely,delz,rsq,rsqinv; diff --git a/src/BODY/pair_body_rounded_polyhedron.cpp b/src/BODY/pair_body_rounded_polyhedron.cpp index 051be762e5a432193326596e6acbc3ad7bb9e616..eea2aa37249e011bab1a5122282c4b3511f48f5d 100644 --- a/src/BODY/pair_body_rounded_polyhedron.cpp +++ b/src/BODY/pair_body_rounded_polyhedron.cpp @@ -603,7 +603,7 @@ void PairBodyRoundedPolyhedron::sphere_against_sphere(int ibody, int jbody, { double rradi,rradj,contact_dist; double vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3; - double rij,rsqinv,R,fx,fy,fz,fn[3],ft[3],fpair,shift,energy; + double rij,rsqinv,R,fx,fy,fz,fn[3],ft[3],fpair,energy; int nlocal = atom->nlocal; int newton_pair = force->newton_pair; @@ -685,7 +685,7 @@ void PairBodyRoundedPolyhedron::sphere_against_edge(int ibody, int jbody, { int ni,nei,ifirst,iefirst,npi1,npi2,ibonus; double xi1[3],xi2[3],vti[3],h[3],fn[3],ft[3],d,t; - double delx,dely,delz,rsq,rij,rsqinv,R,fx,fy,fz,fpair,shift,energy; + double delx,dely,delz,rsq,rij,rsqinv,R,fx,fy,fz,fpair,energy; double rradi,rradj,contact_dist; double vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3; double *quat, *inertia; @@ -835,7 +835,7 @@ void PairBodyRoundedPolyhedron::sphere_against_face(int ibody, int jbody, { int ni,nfi,inside,ifirst,iffirst,npi1,npi2,npi3,ibonus,tmp; double xi1[3],xi2[3],xi3[3],ui[3],vi[3],vti[3],n[3],h[3],fn[3],ft[3],d; - double delx,dely,delz,rsq,rij,rsqinv,R,fx,fy,fz,fpair,shift,energy; + double delx,dely,delz,rsq,rij,rsqinv,R,fx,fy,fz,fpair,energy; double rradi,rradj,contact_dist; double vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3; double *quat, *inertia; @@ -988,7 +988,7 @@ int PairBodyRoundedPolyhedron::edge_against_edge(int ibody, int jbody, int itype, int jtype, double** x, Contact* contact_list, int &num_contacts, double &evdwl, double* facc) { - int ni,nei,nj,nej,contact,interact; + int ni,nei,nj,nej,interact; double rradi,rradj,energy; nei = ednum[ibody]; @@ -1045,7 +1045,7 @@ int PairBodyRoundedPolyhedron::edge_against_face(int ibody, int jbody, int itype, int jtype, double** x, Contact* contact_list, int &num_contacts, double &evdwl, double* facc) { - int ni,nei,nj,nfj,contact,interact; + int ni,nei,nj,nfj,interact; double rradi,rradj,energy; nei = ednum[ibody]; @@ -1118,7 +1118,7 @@ int PairBodyRoundedPolyhedron::interaction_edge_to_edge(int ibody, int ifirst,iefirst,jfirst,jefirst,npi1,npi2,npj1,npj2,interact; double xi1[3],xi2[3],xpj1[3],xpj2[3]; double r,t1,t2,h1[3],h2[3]; - double contact_dist, shift; + double contact_dist; double** x = atom->x; double** v = atom->v; @@ -1314,7 +1314,7 @@ int PairBodyRoundedPolyhedron::interaction_face_to_edge(int ibody, // determine the intersection of the edge to the face - double hi1[3], hi2[3], d1, d2, contact_dist, shift; + double hi1[3], hi2[3], d1, d2, contact_dist; int inside1 = 0; int inside2 = 0; @@ -2345,9 +2345,8 @@ void PairBodyRoundedPolyhedron::find_unique_contacts(Contact* contact_list, void PairBodyRoundedPolyhedron::sanity_check() { - double x1[3],x2[3],x3[3],x4[3],h_a[3],h_b[3],d_a,d_b,u[3],v[3],n[3]; + double x1[3],x2[3],x3[3],x4[3],h_a[3],h_b[3],d_a,d_b; double a[3],b[3],t_a,t_b; - int inside_a, inside_b; x1[0] = 0; x1[1] = 3; x1[2] = 0; x2[0] = 3; x2[1] = 0; x2[2] = 0; @@ -2364,9 +2363,11 @@ void PairBodyRoundedPolyhedron::sanity_check() h_a[0], h_a[1], h_a[2], h_b[0], h_b[1], h_b[2], t_a, t_b, d_a, d_b); */ /* + int inside_a, inside_b; int mode = edge_face_intersect(x1, x2, x3, a, b, h_a, h_b, d_a, d_b, inside_a, inside_b); + double u[3],v[3],n[3]; MathExtra::sub3(x2, x1, u); MathExtra::sub3(x3, x1, v); MathExtra::cross3(u, v, n); diff --git a/src/CLASS2/bond_class2.cpp b/src/CLASS2/bond_class2.cpp index c3dc09715c9c341b57a73e274251cdc35bdeb0da..af20313e0ad1f6e6ffbe7f259ede42ce09abe0bb 100644 --- a/src/CLASS2/bond_class2.cpp +++ b/src/CLASS2/bond_class2.cpp @@ -209,7 +209,7 @@ void BondClass2::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -double BondClass2::single(int type, double rsq, int i, int j, double &fforce) +double BondClass2::single(int type, double rsq, int /*i*/, int /*j*/, double &fforce) { double r = sqrt(rsq); double dr = r - r0[type]; diff --git a/src/CLASS2/improper_class2.cpp b/src/CLASS2/improper_class2.cpp index 3b3811584d07e4f71a53b986084cd735841decbd..77f594af9d33cbeb6f92c8d70a365c3837df432d 100644 --- a/src/CLASS2/improper_class2.cpp +++ b/src/CLASS2/improper_class2.cpp @@ -633,7 +633,7 @@ void ImproperClass2::read_restart(FILE *fp) angle-angle interactions within improper ------------------------------------------------------------------------- */ -void ImproperClass2::angleangle(int eflag, int vflag) +void ImproperClass2::angleangle(int eflag, int /*vflag*/) { int i1,i2,i3,i4,i,j,k,n,type; double eimproper; diff --git a/src/CLASS2/pair_lj_class2.cpp b/src/CLASS2/pair_lj_class2.cpp index e255807ab6a5f217f076892d9a695d5d5d4cd787..6451921dc54ee6a348fe0e6de1d3fd9cec1b6e93 100644 --- a/src/CLASS2/pair_lj_class2.cpp +++ b/src/CLASS2/pair_lj_class2.cpp @@ -377,8 +377,8 @@ void PairLJClass2::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJClass2::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairLJClass2::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,rinv,r3inv,r6inv,forcelj,philj; diff --git a/src/COLLOID/pair_colloid.cpp b/src/COLLOID/pair_colloid.cpp index 4448d6e110ec8ca21840eab06258692e356ca650..c16dbf41af4e8c35082bb1d107c34ca744c88a24 100644 --- a/src/COLLOID/pair_colloid.cpp +++ b/src/COLLOID/pair_colloid.cpp @@ -469,8 +469,8 @@ void PairColloid::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairColloid::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairColloid::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double K[9],h[4],g[4]; diff --git a/src/COLLOID/pair_lubricate.cpp b/src/COLLOID/pair_lubricate.cpp index f0f7ce8c143f259c298e053ae1b509f1531837ce..de53d918181b0542d6e044a611b81a9f6294f286 100644 --- a/src/COLLOID/pair_lubricate.cpp +++ b/src/COLLOID/pair_lubricate.cpp @@ -749,7 +749,7 @@ void PairLubricate::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ int PairLubricate::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; @@ -797,7 +797,7 @@ void PairLubricate::unpack_forward_comm(int n, int first, double *buf) if type pair setting, return -2 if no type pairs are set ------------------------------------------------------------------------- */ -int PairLubricate::pre_adapt(char *name, int ilo, int ihi, int jlo, int jhi) +int PairLubricate::pre_adapt(char *name, int /*ilo*/, int /*ihi*/, int /*jlo*/, int /*jhi*/) { if (strcmp(name,"mu") == 0) return 0; return -1; @@ -809,7 +809,7 @@ int PairLubricate::pre_adapt(char *name, int ilo, int ihi, int jlo, int jhi) if type pair setting, set I-J and J-I coeffs ------------------------------------------------------------------------- */ -void PairLubricate::adapt(int which, int ilo, int ihi, int jlo, int jhi, +void PairLubricate::adapt(int /*which*/, int /*ilo*/, int /*ihi*/, int /*jlo*/, int /*jhi*/, double value) { mu = value; diff --git a/src/COLLOID/pair_lubricateU.cpp b/src/COLLOID/pair_lubricateU.cpp index 11fb2131577c6f32a20358fc9a769038d20e0075..35fe33c84eb7203f89804265c27f1784114735c7 100644 --- a/src/COLLOID/pair_lubricateU.cpp +++ b/src/COLLOID/pair_lubricateU.cpp @@ -2010,7 +2010,7 @@ void PairLubricateU::copy_uo_vec(int inum, double **f, double **torque, /* ---------------------------------------------------------------------- */ int PairLubricateU::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/COLLOID/pair_yukawa_colloid.cpp b/src/COLLOID/pair_yukawa_colloid.cpp index 5965fd3aa86913824e3a21be449d607a89f87e83..d21bc43524307448f905b0de8c63a721a6fbea4d 100644 --- a/src/COLLOID/pair_yukawa_colloid.cpp +++ b/src/COLLOID/pair_yukawa_colloid.cpp @@ -160,9 +160,9 @@ double PairYukawaColloid::init_one(int i, int j) /* ---------------------------------------------------------------------- */ -double PairYukawaColloid::single(int i, int j, int itype, int jtype, +double PairYukawaColloid::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double factor_lj, double &fforce) { double r,rinv,screening,forceyukawa,phi; diff --git a/src/GPU/pair_eam_alloy_gpu.cpp b/src/GPU/pair_eam_alloy_gpu.cpp index 3a8e440bdc0c88164e3e3f8c3ea17def4659bb4e..11af562f15438cd0a5180ed8c32c14c1b5c2b796 100644 --- a/src/GPU/pair_eam_alloy_gpu.cpp +++ b/src/GPU/pair_eam_alloy_gpu.cpp @@ -364,7 +364,7 @@ void PairEAMAlloyGPU::read_file(char *filename) fptr = fopen(filename,"r"); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); + snprintf(str,128,"Cannot open EAM potential file %s",filename); error->one(FLERR,str); } } diff --git a/src/GPU/pair_eam_fs_gpu.cpp b/src/GPU/pair_eam_fs_gpu.cpp index 51681d563bc94894015219bb7d3dd5a69fbc436a..ef8dd09e2382b4ad4e66a6a420aa2b2c59d2eefa 100644 --- a/src/GPU/pair_eam_fs_gpu.cpp +++ b/src/GPU/pair_eam_fs_gpu.cpp @@ -364,7 +364,7 @@ void PairEAMFSGPU::read_file(char *filename) fptr = force->open_potential(filename); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); + snprintf(str,128,"Cannot open EAM potential file %s",filename); error->one(FLERR,str); } } diff --git a/src/GRANULAR/fix_freeze.cpp b/src/GRANULAR/fix_freeze.cpp index 0f581be01c4718b52e6fa9b686329c2c26fc34b4..73c1c9fc111a3239993ebe88d8154a8698ecdc16 100644 --- a/src/GRANULAR/fix_freeze.cpp +++ b/src/GRANULAR/fix_freeze.cpp @@ -83,7 +83,7 @@ void FixFreeze::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixFreeze::post_force(int vflag) +void FixFreeze::post_force(int /*vflag*/) { double **f = atom->f; double **torque = atom->torque; @@ -110,7 +110,7 @@ void FixFreeze::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixFreeze::post_force_respa(int vflag, int ilevel, int iloop) +void FixFreeze::post_force_respa(int vflag, int /*ilevel*/, int /*iloop*/) { post_force(vflag); } diff --git a/src/GRANULAR/fix_wall_gran.cpp b/src/GRANULAR/fix_wall_gran.cpp index 368ff99fb75929303f85b7a2bf8ffaaacc3a37ed..f0957423f94f6d9cb4db4400693619abb2a5bf9f 100644 --- a/src/GRANULAR/fix_wall_gran.cpp +++ b/src/GRANULAR/fix_wall_gran.cpp @@ -302,7 +302,7 @@ void FixWallGran::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixWallGran::post_force(int vflag) +void FixWallGran::post_force(int /*vflag*/) { int i,j; double dx,dy,dz,del1,del2,delxy,delr,rsq,rwall,meff; @@ -446,7 +446,7 @@ void FixWallGran::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixWallGran::post_force_respa(int vflag, int ilevel, int iloop) +void FixWallGran::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_force(vflag); } @@ -1041,7 +1041,7 @@ void FixWallGran::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixWallGran::copy_arrays(int i, int j, int delflag) +void FixWallGran::copy_arrays(int i, int j, int /*delflag*/) { if (history) for (int m = 0; m < sheardim; m++) @@ -1136,7 +1136,7 @@ int FixWallGran::maxsize_restart() size of atom nlocal's restart data ------------------------------------------------------------------------- */ -int FixWallGran::size_restart(int nlocal) +int FixWallGran::size_restart(int /*nlocal*/) { if (!history) return 0; return 1 + sheardim; diff --git a/src/GRANULAR/fix_wall_gran_region.cpp b/src/GRANULAR/fix_wall_gran_region.cpp index 12fa25714ccbbf8447cbda043ee8ba00d0d66c14..8633587ad5545174cc705926256ba7e0cf10441d 100644 --- a/src/GRANULAR/fix_wall_gran_region.cpp +++ b/src/GRANULAR/fix_wall_gran_region.cpp @@ -113,16 +113,16 @@ void FixWallGranRegion::init() strcmp(region_style,region->style) != 0 || nregion != region->nregion) { char str[256]; - sprintf(str,"Region properties for region %s changed between runs, " - "resetting its motion",idregion); + snprintf(str,256,"Region properties for region %s changed between runs, " + "resetting its motion",idregion); error->warning(FLERR,str); region->reset_vel(); } if (motion_resetflag){ char str[256]; - sprintf(str,"Region properties for region %s are inconsistent " - "with restart file, resetting its motion",idregion); + snprintf(str,256,"Region properties for region %s are inconsistent " + "with restart file, resetting its motion",idregion); error->warning(FLERR,str); region->reset_vel(); } @@ -130,7 +130,7 @@ void FixWallGranRegion::init() /* ---------------------------------------------------------------------- */ -void FixWallGranRegion::post_force(int vflag) +void FixWallGranRegion::post_force(int /*vflag*/) { int i,m,nc,iwall; double dx,dy,dz,rsq,meff; @@ -347,7 +347,7 @@ void FixWallGranRegion::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixWallGranRegion::copy_arrays(int i, int j, int delflag) +void FixWallGranRegion::copy_arrays(int i, int j, int /*delflag*/) { int m,n,iwall; diff --git a/src/GRANULAR/pair_gran_hertz_history.cpp b/src/GRANULAR/pair_gran_hertz_history.cpp index 9d4f5c1a9b8a703d4dd83600e84186a6f140f5fe..d1f3c7bbe1eb02e0a23a00071ca4728292f62ef0 100644 --- a/src/GRANULAR/pair_gran_hertz_history.cpp +++ b/src/GRANULAR/pair_gran_hertz_history.cpp @@ -306,9 +306,9 @@ void PairGranHertzHistory::settings(int narg, char **arg) /* ---------------------------------------------------------------------- */ -double PairGranHertzHistory::single(int i, int j, int itype, int jtype, +double PairGranHertzHistory::single(int i, int j, int /*itype*/, int /*jtype*/, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double /*factor_lj*/, double &fforce) { double radi,radj,radsum; diff --git a/src/GRANULAR/pair_gran_hooke.cpp b/src/GRANULAR/pair_gran_hooke.cpp index 4937c2fe8b1142816d20c03f8548b208b594a860..5244396ead10434b1d5b39fb9cfc29d4ca4a7210 100644 --- a/src/GRANULAR/pair_gran_hooke.cpp +++ b/src/GRANULAR/pair_gran_hooke.cpp @@ -219,8 +219,8 @@ void PairGranHooke::compute(int eflag, int vflag) /* ---------------------------------------------------------------------- */ -double PairGranHooke::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairGranHooke::single(int i, int j, int /*itype*/, int /*jtype*/, double rsq, + double /*factor_coul*/, double /*factor_lj*/, double &fforce) { double radi,radj,radsum,r,rinv,rsqinv; diff --git a/src/GRANULAR/pair_gran_hooke_history.cpp b/src/GRANULAR/pair_gran_hooke_history.cpp index df6db8ddfaef10e944d29e8b9bce3b5313447031..83f75c221dc0c9497407884a47594d5a3866b107 100644 --- a/src/GRANULAR/pair_gran_hooke_history.cpp +++ b/src/GRANULAR/pair_gran_hooke_history.cpp @@ -589,9 +589,9 @@ void PairGranHookeHistory::reset_dt() /* ---------------------------------------------------------------------- */ -double PairGranHookeHistory::single(int i, int j, int itype, int jtype, +double PairGranHookeHistory::single(int i, int j, int /*itype*/, int /*jtype*/, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double /*factor_lj*/, double &fforce) { double radi,radj,radsum; @@ -748,7 +748,7 @@ double PairGranHookeHistory::single(int i, int j, int itype, int jtype, /* ---------------------------------------------------------------------- */ int PairGranHookeHistory::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.cpp b/src/KOKKOS/fix_qeq_reax_kokkos.cpp index 52822856ee014cbb5b13b09ef87e3f54186a4a53..578afd20775ca2c79b5904a905b7b4b0acbb2eac 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reax_kokkos.cpp @@ -247,6 +247,13 @@ void FixQEqReaxKokkos::pre_force(int vflag) k_t.template modify(); k_t.template sync(); + need_dup = lmp->kokkos->need_dup(); + + if (need_dup) + dup_o = Kokkos::Experimental::create_scatter_view (d_o); // allocate duplicated memory + else + ndup_o = Kokkos::Experimental::create_scatter_view (d_o); + // 1st cg solve over b_s, s cg_solve1(); @@ -262,6 +269,10 @@ void FixQEqReaxKokkos::pre_force(int vflag) if (!allocated_flag) allocated_flag = 1; + + // free duplicated memory + if (need_dup) + dup_o = decltype(dup_o)(); } /* ---------------------------------------------------------------------- */ @@ -480,10 +491,12 @@ void FixQEqReaxKokkos::cg_solve1() if (neighflag == HALF) { FixQEqReaxKokkosSparse13Functor sparse13_functor(this); Kokkos::parallel_for(inum,sparse13_functor); - } else { + } else if (neighflag == HALFTHREAD) { FixQEqReaxKokkosSparse13Functor sparse13_functor(this); Kokkos::parallel_for(inum,sparse13_functor); } + if (need_dup) + Kokkos::Experimental::contribute(d_o, dup_o); } else { Kokkos::parallel_for(Kokkos::TeamPolicy (inum, teamsize), *this); } @@ -531,18 +544,21 @@ void FixQEqReaxKokkos::cg_solve1() Kokkos::parallel_for(inum,sparse22_functor); if (neighflag != FULL) { Kokkos::parallel_for(Kokkos::RangePolicy(nlocal,nlocal+atom->nghost),*this); + if (need_dup) + dup_o.reset_except(d_o); if (neighflag == HALF) { FixQEqReaxKokkosSparse23Functor sparse23_functor(this); Kokkos::parallel_for(inum,sparse23_functor); - } else { + } else if (neighflag == HALFTHREAD) { FixQEqReaxKokkosSparse23Functor sparse23_functor(this); Kokkos::parallel_for(inum,sparse23_functor); } + if (need_dup) + Kokkos::Experimental::contribute(d_o, dup_o); } else { Kokkos::parallel_for(Kokkos::TeamPolicy (inum, teamsize), *this); } - if (neighflag != FULL) { k_o.template modify(); k_o.template sync(); @@ -607,13 +623,17 @@ void FixQEqReaxKokkos::cg_solve2() Kokkos::parallel_for(inum,sparse32_functor); if (neighflag != FULL) { Kokkos::parallel_for(Kokkos::RangePolicy(nlocal,nlocal+atom->nghost),*this); + if (need_dup) + dup_o.reset_except(d_o); if (neighflag == HALF) { FixQEqReaxKokkosSparse33Functor sparse33_functor(this); Kokkos::parallel_for(inum,sparse33_functor); - } else { + } else if (neighflag == HALFTHREAD) { FixQEqReaxKokkosSparse33Functor sparse33_functor(this); Kokkos::parallel_for(inum,sparse33_functor); } + if (need_dup) + Kokkos::Experimental::contribute(d_o, dup_o); } else { Kokkos::parallel_for(Kokkos::TeamPolicy (inum, teamsize), *this); } @@ -661,13 +681,17 @@ void FixQEqReaxKokkos::cg_solve2() Kokkos::parallel_for(inum,sparse22_functor); if (neighflag != FULL) { Kokkos::parallel_for(Kokkos::RangePolicy(nlocal,nlocal+atom->nghost),*this); + if (need_dup) + dup_o.reset_except(d_o); if (neighflag == HALF) { FixQEqReaxKokkosSparse23Functor sparse23_functor(this); Kokkos::parallel_for(inum,sparse23_functor); - } else { + } else if (neighflag == HALFTHREAD) { FixQEqReaxKokkosSparse23Functor sparse23_functor(this); Kokkos::parallel_for(inum,sparse23_functor); } + if (need_dup) + Kokkos::Experimental::contribute(d_o, dup_o); } else { Kokkos::parallel_for(Kokkos::TeamPolicy (inum, teamsize), *this); } @@ -779,8 +803,9 @@ template KOKKOS_INLINE_FUNCTION void FixQEqReaxKokkos::sparse13_item(int ii) const { - // The q array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_o = d_o; + // The q array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + auto v_o = ScatterViewHelper::value,decltype(dup_o),decltype(ndup_o)>::get(dup_o,ndup_o); + auto a_o = v_o.template access::value>(); const int i = d_ilist[ii]; if (mask[i] & groupbit) { @@ -831,8 +856,9 @@ template KOKKOS_INLINE_FUNCTION void FixQEqReaxKokkos::sparse23_item(int ii) const { - // The q array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_o = d_o; + // The q array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + auto v_o = ScatterViewHelper::value,decltype(dup_o),decltype(ndup_o)>::get(dup_o,ndup_o); + auto a_o = v_o.template access::value>(); const int i = d_ilist[ii]; if (mask[i] & groupbit) { @@ -890,8 +916,9 @@ template KOKKOS_INLINE_FUNCTION void FixQEqReaxKokkos::sparse33_item(int ii) const { - // The q array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_o = d_o; + // The q array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + auto v_o = ScatterViewHelper::value,decltype(dup_o),decltype(ndup_o)>::get(dup_o,ndup_o); + auto a_o = v_o.template access::value>(); const int i = d_ilist[ii]; if (mask[i] & groupbit) { diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.h b/src/KOKKOS/fix_qeq_reax_kokkos.h index 517b541f6f0b328efe02b9939d472f38584d84c4..23bb4f32eea1e46e3bb9d04b0e36a571c3626826 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.h +++ b/src/KOKKOS/fix_qeq_reax_kokkos.h @@ -148,6 +148,7 @@ class FixQEqReaxKokkos : public FixQEqReax { private: int inum; int allocated_flag; + int need_dup; typedef Kokkos::DualView tdual_int_1d; Kokkos::DualView k_params; @@ -192,6 +193,9 @@ class FixQEqReaxKokkos : public FixQEqReax { HAT::t_ffloat_2d h_s_hist, h_t_hist; typename AT::t_ffloat_2d_randomread r_s_hist, r_t_hist; + Kokkos::Experimental::ScatterView dup_o; + Kokkos::Experimental::ScatterView ndup_o; + void init_shielding_k(); void init_hist(); void allocate_matrix(); diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index fb6b8d8d45aa5d4e1e582c9b745ec53906aa999b..9973b5a68812be2d162874a348547a9b226fec88 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -166,6 +166,13 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) } #endif +#ifndef KOKKOS_HAVE_SERIAL + if (num_threads == 1) + error->warning(FLERR,"When using a single thread, the Kokkos Serial backend " + "(i.e. Makefile.kokkos_mpi_only) gives better performance " + "than the OpenMP backend"); +#endif + Kokkos::InitArguments args; args.num_threads = num_threads; args.num_numa = numa; diff --git a/src/KOKKOS/kokkos.h b/src/KOKKOS/kokkos.h index cf209c0adb97e10a7bf5b45daa4502b3ad15d46a..e1e17a425a3c3e99fff4f615cfa958431e0448ea 100644 --- a/src/KOKKOS/kokkos.h +++ b/src/KOKKOS/kokkos.h @@ -16,6 +16,7 @@ #include "pointers.h" #include "kokkos_type.h" +#include "pair_kokkos.h" namespace LAMMPS_NS { @@ -40,6 +41,18 @@ class KokkosLMP : protected Pointers { ~KokkosLMP(); void accelerator(int, char **); int neigh_count(int); + + template + int need_dup() + { + int value = 0; + + if (neighflag == HALFTHREAD) + value = NeedDup::value; + + return value; + } + private: static void my_signal_handler(int); }; diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index ddea35ca8892244c053f232af7fda8f6c73ca82c..b88c92ff7309667fa2c300efdd31b4590ebd2b4a 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -20,6 +20,9 @@ #include #include #include +#include + +enum{FULL=1u,HALFTHREAD=2u,HALF=4u,N2=8u}; #if defined(KOKKOS_HAVE_CXX11) #undef ISFINITE @@ -205,6 +208,100 @@ struct ExecutionSpaceFromDevice { }; #endif + +// Determine memory traits for force array +// Do atomic trait when running HALFTHREAD neighbor list style +template +struct AtomicF { + enum {value = Kokkos::Unmanaged}; +}; + +template<> +struct AtomicF { + enum {value = Kokkos::Atomic|Kokkos::Unmanaged}; +}; + + +// Determine memory traits for force array +// Do atomic trait when running HALFTHREAD neighbor list style with CUDA +template +struct AtomicDup { + enum {value = Kokkos::Experimental::ScatterNonAtomic}; +}; + +#ifdef KOKKOS_ENABLE_CUDA +template<> +struct AtomicDup { + enum {value = Kokkos::Experimental::ScatterAtomic}; +}; +#endif + +#ifdef LMP_KOKKOS_USE_ATOMICS + +#ifdef KOKKOS_ENABLE_OPENMP +template<> +struct AtomicDup { + enum {value = Kokkos::Experimental::ScatterAtomic}; +}; +#endif + +#ifdef KOKKOS_ENABLE_THREADS +template<> +struct AtomicDup { + enum {value = Kokkos::Experimental::ScatterAtomic}; +}; +#endif + +#endif + + +// Determine duplication traits for force array +// Use duplication when running threaded and not using atomics +template +struct NeedDup { + enum {value = Kokkos::Experimental::ScatterNonDuplicated}; +}; + +#ifndef LMP_KOKKOS_USE_ATOMICS + +#ifdef KOKKOS_ENABLE_OPENMP +template<> +struct NeedDup { + enum {value = Kokkos::Experimental::ScatterDuplicated}; +}; +#endif + +#ifdef KOKKOS_ENABLE_THREADS +template<> +struct NeedDup { + enum {value = Kokkos::Experimental::ScatterDuplicated}; +}; +#endif + +#endif + +template +class ScatterViewHelper {}; + +template +class ScatterViewHelper { +public: + KOKKOS_INLINE_FUNCTION + static T1 get(const T1 &dup, const T2 &nondup) { + return dup; + } +}; + +template +class ScatterViewHelper { +public: + KOKKOS_INLINE_FUNCTION + static T2 get(const T1 &dup, const T2 &nondup) { + return nondup; + } +}; + + // define precision // handle global precision, force, energy, positions, kspace separately diff --git a/src/KOKKOS/neigh_list_kokkos.h b/src/KOKKOS/neigh_list_kokkos.h index 1c433f321c9684b34b2181214b65b6d39bc069bf..585422c54f3d51a4a0ea2cfbadaa2acdd4a0ec68 100644 --- a/src/KOKKOS/neigh_list_kokkos.h +++ b/src/KOKKOS/neigh_list_kokkos.h @@ -20,8 +20,6 @@ namespace LAMMPS_NS { -enum{FULL=1u,HALFTHREAD=2u,HALF=4u,N2=8u}; - class AtomNeighbors { public: diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.cpp b/src/KOKKOS/pair_eam_alloy_kokkos.cpp index f21ea2335dd36c00429064fd3924dd78055ce88f..e198ddb85a9fa0072e0f0bc1aea58a7cf93a9e21 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.cpp +++ b/src/KOKKOS/pair_eam_alloy_kokkos.cpp @@ -109,7 +109,6 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) x = atomKK->k_x.view(); f = atomKK->k_f.view(); - v_rho = k_rho.view(); type = atomKK->k_type.view(); tag = atomKK->k_tag.view(); nlocal = atom->nlocal; @@ -122,6 +121,19 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) d_ilist = k_list->d_ilist; int inum = list->inum; + need_dup = lmp->kokkos->need_dup(); + if (need_dup) { + dup_rho = Kokkos::Experimental::create_scatter_view(d_rho); + dup_f = Kokkos::Experimental::create_scatter_view(f); + dup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + dup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } else { + ndup_rho = Kokkos::Experimental::create_scatter_view(d_rho); + ndup_f = Kokkos::Experimental::create_scatter_view(f); + ndup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + ndup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } + copymode = 1; // zero out density @@ -153,6 +165,9 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) } } + if (need_dup) + Kokkos::Experimental::contribute(d_rho, dup_rho); + // communicate and sum densities (on the host) if (newton_pair) { @@ -233,6 +248,9 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) } } + if (need_dup) + Kokkos::Experimental::contribute(f, dup_f); + if (eflag_global) eng_vdwl += ev.evdwl; if (vflag_global) { virial[0] += ev.v[0]; @@ -244,11 +262,15 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) } if (eflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_eatom, dup_eatom); k_eatom.template modify(); k_eatom.template sync(); } if (vflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_vatom, dup_vatom); k_vatom.template modify(); k_vatom.template sync(); } @@ -256,6 +278,14 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; + + // free duplicated memory + if (need_dup) { + dup_rho = decltype(dup_rho)(); + dup_f = decltype(dup_f)(); + dup_eatom = decltype(dup_eatom)(); + dup_vatom = decltype(dup_vatom)(); + } } /* ---------------------------------------------------------------------- @@ -503,8 +533,10 @@ void PairEAMAlloyKokkos::operator()(TagPairEAMAlloyKernelA::value> > rho = v_rho; + // The rho array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_rho = ScatterViewHelper::value,decltype(dup_rho),decltype(ndup_rho)>::get(dup_rho,ndup_rho); + auto a_rho = v_rho.template access::value>(); const int i = d_ilist[ii]; const X_FLOAT xtmp = x(i,0); @@ -672,8 +704,10 @@ template KOKKOS_INLINE_FUNCTION void PairEAMAlloyKokkos::operator()(TagPairEAMAlloyKernelC, const int &ii, EV_FLOAT& ev) const { - // The f array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_f = f; + // The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); const int i = d_ilist[ii]; const X_FLOAT xtmp = x(i,0); @@ -780,18 +814,22 @@ void PairEAMAlloyKokkos::ev_tally(EV_FLOAT &ev, const int &i, const const int EFLAG = eflag; const int VFLAG = vflag_either; - // The eatom and vatom arrays are atomic for Half/Thread neighbor style - Kokkos::View::value> > v_eatom = k_eatom.view(); - Kokkos::View::value> > v_vatom = k_vatom.view(); + // The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_eatom = ScatterViewHelper::value,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom); + auto a_eatom = v_eatom.template access::value>(); + + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); if (EFLAG) { if (eflag_atom) { const E_FLOAT epairhalf = 0.5 * epair; if (NEIGHFLAG!=FULL) { - if (NEWTON_PAIR || i < nlocal) v_eatom[i] += epairhalf; - if (NEWTON_PAIR || j < nlocal) v_eatom[j] += epairhalf; + if (NEWTON_PAIR || i < nlocal) a_eatom[i] += epairhalf; + if (NEWTON_PAIR || j < nlocal) a_eatom[j] += epairhalf; } else { - v_eatom[i] += epairhalf; + a_eatom[i] += epairhalf; } } } @@ -835,28 +873,28 @@ void PairEAMAlloyKokkos::ev_tally(EV_FLOAT &ev, const int &i, const if (vflag_atom) { if (NEIGHFLAG!=FULL) { if (NEWTON_PAIR || i < nlocal) { - v_vatom(i,0) += 0.5*v0; - v_vatom(i,1) += 0.5*v1; - v_vatom(i,2) += 0.5*v2; - v_vatom(i,3) += 0.5*v3; - v_vatom(i,4) += 0.5*v4; - v_vatom(i,5) += 0.5*v5; + a_vatom(i,0) += 0.5*v0; + a_vatom(i,1) += 0.5*v1; + a_vatom(i,2) += 0.5*v2; + a_vatom(i,3) += 0.5*v3; + a_vatom(i,4) += 0.5*v4; + a_vatom(i,5) += 0.5*v5; } if (NEWTON_PAIR || j < nlocal) { - v_vatom(j,0) += 0.5*v0; - v_vatom(j,1) += 0.5*v1; - v_vatom(j,2) += 0.5*v2; - v_vatom(j,3) += 0.5*v3; - v_vatom(j,4) += 0.5*v4; - v_vatom(j,5) += 0.5*v5; + a_vatom(j,0) += 0.5*v0; + a_vatom(j,1) += 0.5*v1; + a_vatom(j,2) += 0.5*v2; + a_vatom(j,3) += 0.5*v3; + a_vatom(j,4) += 0.5*v4; + a_vatom(j,5) += 0.5*v5; } } else { - v_vatom(i,0) += 0.5*v0; - v_vatom(i,1) += 0.5*v1; - v_vatom(i,2) += 0.5*v2; - v_vatom(i,3) += 0.5*v3; - v_vatom(i,4) += 0.5*v4; - v_vatom(i,5) += 0.5*v5; + a_vatom(i,0) += 0.5*v0; + a_vatom(i,1) += 0.5*v1; + a_vatom(i,2) += 0.5*v2; + a_vatom(i,3) += 0.5*v3; + a_vatom(i,4) += 0.5*v4; + a_vatom(i,5) += 0.5*v5; } } } @@ -957,7 +995,7 @@ void PairEAMAlloyKokkos::read_file(char *filename) fptr = force->open_potential(filename); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); + snprintf(str,128,"Cannot open EAM potential file %s",filename); error->one(FLERR,str); } } @@ -1165,4 +1203,3 @@ template class PairEAMAlloyKokkos; template class PairEAMAlloyKokkos; #endif } - diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.h b/src/KOKKOS/pair_eam_alloy_kokkos.h index 584839967218b3d8ea1079c9cbf7a2ea597436e4..6593ccae734ba038d21b2b85b70522c67512abee 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.h +++ b/src/KOKKOS/pair_eam_alloy_kokkos.h @@ -129,10 +129,19 @@ class PairEAMAlloyKokkos : public PairEAM, public KokkosBase { typename ArrayTypes::t_efloat_1d d_eatom; typename ArrayTypes::t_virial_array d_vatom; + int need_dup; + Kokkos::Experimental::ScatterView dup_rho; + Kokkos::Experimental::ScatterView dup_f; + Kokkos::Experimental::ScatterView dup_eatom; + Kokkos::Experimental::ScatterView dup_vatom; + Kokkos::Experimental::ScatterView ndup_rho; + Kokkos::Experimental::ScatterView ndup_f; + Kokkos::Experimental::ScatterView ndup_eatom; + Kokkos::Experimental::ScatterView ndup_vatom; + DAT::tdual_ffloat_1d k_rho; DAT::tdual_ffloat_1d k_fp; typename AT::t_ffloat_1d d_rho; - typename AT::t_ffloat_1d v_rho; typename AT::t_ffloat_1d d_fp; HAT::t_ffloat_1d h_rho; HAT::t_ffloat_1d h_fp; diff --git a/src/KOKKOS/pair_eam_fs_kokkos.cpp b/src/KOKKOS/pair_eam_fs_kokkos.cpp index 627b56b84ac10e76e9c189d80abde07fe2b8678f..f5e4445db3a2f7854ae2609e7dce414d9f586fcd 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.cpp +++ b/src/KOKKOS/pair_eam_fs_kokkos.cpp @@ -109,7 +109,6 @@ void PairEAMFSKokkos::compute(int eflag_in, int vflag_in) x = atomKK->k_x.view(); f = atomKK->k_f.view(); - v_rho = k_rho.view(); type = atomKK->k_type.view(); tag = atomKK->k_tag.view(); nlocal = atom->nlocal; @@ -122,6 +121,19 @@ void PairEAMFSKokkos::compute(int eflag_in, int vflag_in) d_ilist = k_list->d_ilist; int inum = list->inum; + need_dup = lmp->kokkos->need_dup(); + if (need_dup) { + dup_rho = Kokkos::Experimental::create_scatter_view(d_rho); + dup_f = Kokkos::Experimental::create_scatter_view(f); + dup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + dup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } else { + ndup_rho = Kokkos::Experimental::create_scatter_view(d_rho); + ndup_f = Kokkos::Experimental::create_scatter_view(f); + ndup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + ndup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } + copymode = 1; // zero out density @@ -153,6 +165,9 @@ void PairEAMFSKokkos::compute(int eflag_in, int vflag_in) } } + if (need_dup) + Kokkos::Experimental::contribute(d_rho, dup_rho); + // communicate and sum densities (on the host) if (newton_pair) { @@ -233,6 +248,9 @@ void PairEAMFSKokkos::compute(int eflag_in, int vflag_in) } } + if (need_dup) + Kokkos::Experimental::contribute(f, dup_f); + if (eflag_global) eng_vdwl += ev.evdwl; if (vflag_global) { virial[0] += ev.v[0]; @@ -246,16 +264,28 @@ void PairEAMFSKokkos::compute(int eflag_in, int vflag_in) if (vflag_fdotr) pair_virial_fdotr_compute(this); if (eflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_eatom, dup_eatom); k_eatom.template modify(); k_eatom.template sync(); } if (vflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_vatom, dup_vatom); k_vatom.template modify(); k_vatom.template sync(); } copymode = 0; + + // free duplicated memory + if (need_dup) { + dup_rho = decltype(dup_rho)(); + dup_f = decltype(dup_f)(); + dup_eatom = decltype(dup_eatom)(); + dup_vatom = decltype(dup_vatom)(); + } } /* ---------------------------------------------------------------------- @@ -503,8 +533,10 @@ void PairEAMFSKokkos::operator()(TagPairEAMFSKernelA::value> > rho = v_rho; + // The rho array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_rho = ScatterViewHelper::value,decltype(dup_rho),decltype(ndup_rho)>::get(dup_rho,ndup_rho); + auto a_rho = v_rho.template access::value>(); const int i = d_ilist[ii]; const X_FLOAT xtmp = x(i,0); @@ -672,8 +704,10 @@ template KOKKOS_INLINE_FUNCTION void PairEAMFSKokkos::operator()(TagPairEAMFSKernelC, const int &ii, EV_FLOAT& ev) const { - // The f array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_f = f; + // The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); const int i = d_ilist[ii]; const X_FLOAT xtmp = x(i,0); @@ -780,18 +814,22 @@ void PairEAMFSKokkos::ev_tally(EV_FLOAT &ev, const int &i, const int const int EFLAG = eflag; const int VFLAG = vflag_either; - // The eatom and vatom arrays are atomic for Half/Thread neighbor style - Kokkos::View::value> > v_eatom = k_eatom.view(); - Kokkos::View::value> > v_vatom = k_vatom.view(); + // The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_eatom = ScatterViewHelper::value,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom); + auto a_eatom = v_eatom.template access::value>(); + + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); if (EFLAG) { if (eflag_atom) { const E_FLOAT epairhalf = 0.5 * epair; if (NEIGHFLAG!=FULL) { - if (NEWTON_PAIR || i < nlocal) v_eatom[i] += epairhalf; - if (NEWTON_PAIR || j < nlocal) v_eatom[j] += epairhalf; + if (NEWTON_PAIR || i < nlocal) a_eatom[i] += epairhalf; + if (NEWTON_PAIR || j < nlocal) a_eatom[j] += epairhalf; } else { - v_eatom[i] += epairhalf; + a_eatom[i] += epairhalf; } } } @@ -835,28 +873,28 @@ void PairEAMFSKokkos::ev_tally(EV_FLOAT &ev, const int &i, const int if (vflag_atom) { if (NEIGHFLAG!=FULL) { if (NEWTON_PAIR || i < nlocal) { - v_vatom(i,0) += 0.5*v0; - v_vatom(i,1) += 0.5*v1; - v_vatom(i,2) += 0.5*v2; - v_vatom(i,3) += 0.5*v3; - v_vatom(i,4) += 0.5*v4; - v_vatom(i,5) += 0.5*v5; + a_vatom(i,0) += 0.5*v0; + a_vatom(i,1) += 0.5*v1; + a_vatom(i,2) += 0.5*v2; + a_vatom(i,3) += 0.5*v3; + a_vatom(i,4) += 0.5*v4; + a_vatom(i,5) += 0.5*v5; } if (NEWTON_PAIR || j < nlocal) { - v_vatom(j,0) += 0.5*v0; - v_vatom(j,1) += 0.5*v1; - v_vatom(j,2) += 0.5*v2; - v_vatom(j,3) += 0.5*v3; - v_vatom(j,4) += 0.5*v4; - v_vatom(j,5) += 0.5*v5; + a_vatom(j,0) += 0.5*v0; + a_vatom(j,1) += 0.5*v1; + a_vatom(j,2) += 0.5*v2; + a_vatom(j,3) += 0.5*v3; + a_vatom(j,4) += 0.5*v4; + a_vatom(j,5) += 0.5*v5; } } else { - v_vatom(i,0) += 0.5*v0; - v_vatom(i,1) += 0.5*v1; - v_vatom(i,2) += 0.5*v2; - v_vatom(i,3) += 0.5*v3; - v_vatom(i,4) += 0.5*v4; - v_vatom(i,5) += 0.5*v5; + a_vatom(i,0) += 0.5*v0; + a_vatom(i,1) += 0.5*v1; + a_vatom(i,2) += 0.5*v2; + a_vatom(i,3) += 0.5*v3; + a_vatom(i,4) += 0.5*v4; + a_vatom(i,5) += 0.5*v5; } } } @@ -957,7 +995,7 @@ void PairEAMFSKokkos::read_file(char *filename) fptr = force->open_potential(filename); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); + snprintf(str,128,"Cannot open EAM potential file %s",filename); error->one(FLERR,str); } } @@ -1174,4 +1212,3 @@ template class PairEAMFSKokkos; template class PairEAMFSKokkos; #endif } - diff --git a/src/KOKKOS/pair_eam_fs_kokkos.h b/src/KOKKOS/pair_eam_fs_kokkos.h index ce0b572ea2054113b32064e748a970027b66ab35..f75605ff6dbca4a131f14fea488c57164f2d14b1 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.h +++ b/src/KOKKOS/pair_eam_fs_kokkos.h @@ -129,10 +129,19 @@ class PairEAMFSKokkos : public PairEAM, public KokkosBase { typename ArrayTypes::t_efloat_1d d_eatom; typename ArrayTypes::t_virial_array d_vatom; + int need_dup; + Kokkos::Experimental::ScatterView dup_rho; + Kokkos::Experimental::ScatterView dup_f; + Kokkos::Experimental::ScatterView dup_eatom; + Kokkos::Experimental::ScatterView dup_vatom; + Kokkos::Experimental::ScatterView ndup_rho; + Kokkos::Experimental::ScatterView ndup_f; + Kokkos::Experimental::ScatterView ndup_eatom; + Kokkos::Experimental::ScatterView ndup_vatom; + DAT::tdual_ffloat_1d k_rho; DAT::tdual_ffloat_1d k_fp; typename AT::t_ffloat_1d d_rho; - typename AT::t_ffloat_1d v_rho; typename AT::t_ffloat_1d d_fp; HAT::t_ffloat_1d h_rho; HAT::t_ffloat_1d h_fp; diff --git a/src/KOKKOS/pair_eam_kokkos.cpp b/src/KOKKOS/pair_eam_kokkos.cpp index 1bfb8255dc68b089bc7362501691a577970d4af4..6ef3d99ac3934783c9ed4887db6c81bd37aba9d0 100644 --- a/src/KOKKOS/pair_eam_kokkos.cpp +++ b/src/KOKKOS/pair_eam_kokkos.cpp @@ -34,7 +34,6 @@ using namespace LAMMPS_NS; - /* ---------------------------------------------------------------------- */ template @@ -104,7 +103,6 @@ void PairEAMKokkos::compute(int eflag_in, int vflag_in) x = atomKK->k_x.view(); f = atomKK->k_f.view(); - v_rho = k_rho.view(); type = atomKK->k_type.view(); tag = atomKK->k_tag.view(); nlocal = atom->nlocal; @@ -117,6 +115,19 @@ void PairEAMKokkos::compute(int eflag_in, int vflag_in) d_ilist = k_list->d_ilist; int inum = list->inum; + need_dup = lmp->kokkos->need_dup(); + if (need_dup) { + dup_rho = Kokkos::Experimental::create_scatter_view(d_rho); + dup_f = Kokkos::Experimental::create_scatter_view(f); + dup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + dup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } else { + ndup_rho = Kokkos::Experimental::create_scatter_view(d_rho); + ndup_f = Kokkos::Experimental::create_scatter_view(f); + ndup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + ndup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } + copymode = 1; // zero out density @@ -148,6 +159,9 @@ void PairEAMKokkos::compute(int eflag_in, int vflag_in) } } + if (need_dup) + Kokkos::Experimental::contribute(d_rho, dup_rho); + // communicate and sum densities (on the host) if (newton_pair) { @@ -228,6 +242,9 @@ void PairEAMKokkos::compute(int eflag_in, int vflag_in) } } + if (need_dup) + Kokkos::Experimental::contribute(f, dup_f); + if (eflag_global) eng_vdwl += ev.evdwl; if (vflag_global) { virial[0] += ev.v[0]; @@ -241,16 +258,28 @@ void PairEAMKokkos::compute(int eflag_in, int vflag_in) if (vflag_fdotr) pair_virial_fdotr_compute(this); if (eflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_eatom, dup_eatom); k_eatom.template modify(); k_eatom.template sync(); } if (vflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_vatom, dup_vatom); k_vatom.template modify(); k_vatom.template sync(); } copymode = 0; + + // free duplicated memory + if (need_dup) { + dup_rho = decltype(dup_rho)(); + dup_f = decltype(dup_f)(); + dup_eatom = decltype(dup_eatom)(); + dup_vatom = decltype(dup_vatom)(); + } } /* ---------------------------------------------------------------------- @@ -503,8 +532,10 @@ void PairEAMKokkos::operator()(TagPairEAMKernelA::value> > rho = v_rho; + // The rho array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_rho = ScatterViewHelper::value,decltype(dup_rho),decltype(ndup_rho)>::get(dup_rho,ndup_rho); + auto a_rho = v_rho.template access::value>(); const int i = d_ilist[ii]; const X_FLOAT xtmp = x(i,0); @@ -538,13 +569,13 @@ void PairEAMKokkos::operator()(TagPairEAMKernelA KOKKOS_INLINE_FUNCTION void PairEAMKokkos::operator()(TagPairEAMKernelC, const int &ii, EV_FLOAT& ev) const { - // The f array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_f = f; + // The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); const int i = d_ilist[ii]; const X_FLOAT xtmp = x(i,0); @@ -778,18 +811,22 @@ void PairEAMKokkos::ev_tally(EV_FLOAT &ev, const int &i, const int & const int EFLAG = eflag; const int VFLAG = vflag_either; - // The eatom and vatom arrays are atomic for Half/Thread neighbor style - Kokkos::View::value> > v_eatom = k_eatom.view(); - Kokkos::View::value> > v_vatom = k_vatom.view(); + // The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_eatom = ScatterViewHelper::value,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom); + auto a_eatom = v_eatom.template access::value>(); + + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); if (EFLAG) { if (eflag_atom) { const E_FLOAT epairhalf = 0.5 * epair; if (NEIGHFLAG!=FULL) { - if (NEWTON_PAIR || i < nlocal) v_eatom[i] += epairhalf; - if (NEWTON_PAIR || j < nlocal) v_eatom[j] += epairhalf; + if (NEWTON_PAIR || i < nlocal) a_eatom[i] += epairhalf; + if (NEWTON_PAIR || j < nlocal) a_eatom[j] += epairhalf; } else { - v_eatom[i] += epairhalf; + a_eatom[i] += epairhalf; } } } @@ -833,28 +870,28 @@ void PairEAMKokkos::ev_tally(EV_FLOAT &ev, const int &i, const int & if (vflag_atom) { if (NEIGHFLAG!=FULL) { if (NEWTON_PAIR || i < nlocal) { - v_vatom(i,0) += 0.5*v0; - v_vatom(i,1) += 0.5*v1; - v_vatom(i,2) += 0.5*v2; - v_vatom(i,3) += 0.5*v3; - v_vatom(i,4) += 0.5*v4; - v_vatom(i,5) += 0.5*v5; + a_vatom(i,0) += 0.5*v0; + a_vatom(i,1) += 0.5*v1; + a_vatom(i,2) += 0.5*v2; + a_vatom(i,3) += 0.5*v3; + a_vatom(i,4) += 0.5*v4; + a_vatom(i,5) += 0.5*v5; } if (NEWTON_PAIR || j < nlocal) { - v_vatom(j,0) += 0.5*v0; - v_vatom(j,1) += 0.5*v1; - v_vatom(j,2) += 0.5*v2; - v_vatom(j,3) += 0.5*v3; - v_vatom(j,4) += 0.5*v4; - v_vatom(j,5) += 0.5*v5; + a_vatom(j,0) += 0.5*v0; + a_vatom(j,1) += 0.5*v1; + a_vatom(j,2) += 0.5*v2; + a_vatom(j,3) += 0.5*v3; + a_vatom(j,4) += 0.5*v4; + a_vatom(j,5) += 0.5*v5; } } else { - v_vatom(i,0) += 0.5*v0; - v_vatom(i,1) += 0.5*v1; - v_vatom(i,2) += 0.5*v2; - v_vatom(i,3) += 0.5*v3; - v_vatom(i,4) += 0.5*v4; - v_vatom(i,5) += 0.5*v5; + a_vatom(i,0) += 0.5*v0; + a_vatom(i,1) += 0.5*v1; + a_vatom(i,2) += 0.5*v2; + a_vatom(i,3) += 0.5*v3; + a_vatom(i,4) += 0.5*v4; + a_vatom(i,5) += 0.5*v5; } } } diff --git a/src/KOKKOS/pair_eam_kokkos.h b/src/KOKKOS/pair_eam_kokkos.h index c821750da54a0c2faf2eeb49ad0689f016bf1e41..4040eba8588413c61e5b1984e28026fa9db34372 100644 --- a/src/KOKKOS/pair_eam_kokkos.h +++ b/src/KOKKOS/pair_eam_kokkos.h @@ -126,10 +126,19 @@ class PairEAMKokkos : public PairEAM, public KokkosBase { typename ArrayTypes::t_efloat_1d d_eatom; typename ArrayTypes::t_virial_array d_vatom; + int need_dup; + Kokkos::Experimental::ScatterView dup_rho; + Kokkos::Experimental::ScatterView dup_f; + Kokkos::Experimental::ScatterView dup_eatom; + Kokkos::Experimental::ScatterView dup_vatom; + Kokkos::Experimental::ScatterView ndup_rho; + Kokkos::Experimental::ScatterView ndup_f; + Kokkos::Experimental::ScatterView ndup_eatom; + Kokkos::Experimental::ScatterView ndup_vatom; + DAT::tdual_ffloat_1d k_rho; DAT::tdual_ffloat_1d k_fp; typename AT::t_ffloat_1d d_rho; - typename AT::t_ffloat_1d v_rho; typename AT::t_ffloat_1d d_fp; HAT::t_ffloat_1d h_rho; HAT::t_ffloat_1d h_fp; diff --git a/src/KOKKOS/pair_exp6_rx_kokkos.cpp b/src/KOKKOS/pair_exp6_rx_kokkos.cpp index 810173d2195ad39c8715dcd6761691535bc85d72..f38feea5f4ec027f0d07d74d32eba56118360ec1 100644 --- a/src/KOKKOS/pair_exp6_rx_kokkos.cpp +++ b/src/KOKKOS/pair_exp6_rx_kokkos.cpp @@ -1725,7 +1725,7 @@ void PairExp6rxKokkos::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open exp6/rx potential file %s",file); + snprintf(str,128,"Cannot open exp6/rx potential file %s",file); error->one(FLERR,str); } } diff --git a/src/KOKKOS/pair_kokkos.h b/src/KOKKOS/pair_kokkos.h index 6257566ba761bfc1314c6b403cb25545f9ebba12..ab616d2c07ab5cca684821483ab81766ae83fca4 100644 --- a/src/KOKKOS/pair_kokkos.h +++ b/src/KOKKOS/pair_kokkos.h @@ -23,6 +23,7 @@ #include "neighbor_kokkos.h" #include "neigh_list_kokkos.h" #include "Kokkos_Vectorization.hpp" +#include "Kokkos_ScatterView.hpp" namespace LAMMPS_NS { @@ -47,45 +48,48 @@ struct DoCoul<1> { typedef CoulTag type; }; -// Determine memory traits for force array -// Do atomic trait when running HALFTHREAD neighbor list style -template -struct AtomicF { - enum {value = Kokkos::Unmanaged}; -}; - -template<> -struct AtomicF { - enum {value = Kokkos::Atomic|Kokkos::Unmanaged}; -}; //Specialisation for Neighborlist types Half, HalfThread, Full template struct PairComputeFunctor { typedef typename PairStyle::device_type device_type ; + typedef ArrayTypes AT; // Reduction type, contains evdwl, ecoul and virial[6] typedef EV_FLOAT value_type; // The copy of the pair style PairStyle c; + typename AT::t_f_array f; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; // The force array is atomic for Half/Thread neighbor style - Kokkos::View::value> > f; + //Kokkos::View::value> > f; + Kokkos::Experimental::ScatterView::value > dup_f; // The eatom and vatom arrays are atomic for Half/Thread neighbor style - Kokkos::View::value> > eatom; - Kokkos::View::value> > vatom; + //Kokkos::View::value> > eatom; + Kokkos::Experimental::ScatterView::value > dup_eatom; + + //Kokkos::View::value> > vatom; + Kokkos::Experimental::ScatterView::value > dup_vatom; + + NeighListKokkos list; PairComputeFunctor(PairStyle* c_ptr, NeighListKokkos* list_ptr): - c(*c_ptr),f(c.f),eatom(c.d_eatom), - vatom(c.d_vatom),list(*list_ptr) {}; + c(*c_ptr),list(*list_ptr) { + // allocate duplicated memory + dup_f = Kokkos::Experimental::create_scatter_view::value >(c.f); + dup_eatom = Kokkos::Experimental::create_scatter_view::value >(c.d_eatom); + dup_vatom = Kokkos::Experimental::create_scatter_view::value >(c.d_vatom); + }; // Call cleanup_copy which sets allocations NULL which are destructed by the PairStyle ~PairComputeFunctor() {c.cleanup_copy();list.copymode = 1;}; @@ -94,12 +98,25 @@ struct PairComputeFunctor { return j >> SBBITS & 3; } + void contribute() { + Kokkos::Experimental::contribute(c.f, dup_f); + + if (c.eflag_atom) + Kokkos::Experimental::contribute(c.d_eatom, dup_eatom); + + if (c.vflag_atom) + Kokkos::Experimental::contribute(c.d_vatom, dup_vatom); + } + // Loop over neighbors of one atom without coulomb interaction // This function is called in parallel template KOKKOS_FUNCTION EV_FLOAT compute_item(const int& ii, const NeighListKokkos &list, const NoCoulTag&) const { + + auto a_f = dup_f.template access::value>(); + EV_FLOAT ev; const int i = list.d_ilist[ii]; const X_FLOAT xtmp = c.x(i,0); @@ -133,9 +150,9 @@ struct PairComputeFunctor { fztmp += delz*fpair; if ((NEIGHFLAG==HALF || NEIGHFLAG==HALFTHREAD) && (NEWTON_PAIR || j < c.nlocal)) { - f(j,0) -= delx*fpair; - f(j,1) -= dely*fpair; - f(j,2) -= delz*fpair; + a_f(j,0) -= delx*fpair; + a_f(j,1) -= dely*fpair; + a_f(j,2) -= delz*fpair; } if (EVFLAG) { @@ -151,9 +168,9 @@ struct PairComputeFunctor { } - f(i,0) += fxtmp; - f(i,1) += fytmp; - f(i,2) += fztmp; + a_f(i,0) += fxtmp; + a_f(i,1) += fytmp; + a_f(i,2) += fztmp; return ev; } @@ -164,6 +181,9 @@ struct PairComputeFunctor { KOKKOS_FUNCTION EV_FLOAT compute_item(const int& ii, const NeighListKokkos &list, const CoulTag& ) const { + + auto a_f = dup_f.template access::value>(); + EV_FLOAT ev; const int i = list.d_ilist[ii]; const X_FLOAT xtmp = c.x(i,0); @@ -204,9 +224,9 @@ struct PairComputeFunctor { fztmp += delz*fpair; if ((NEIGHFLAG==HALF || NEIGHFLAG==HALFTHREAD) && (NEWTON_PAIR || j < c.nlocal)) { - f(j,0) -= delx*fpair; - f(j,1) -= dely*fpair; - f(j,2) -= delz*fpair; + a_f(j,0) -= delx*fpair; + a_f(j,1) -= dely*fpair; + a_f(j,2) -= delz*fpair; } if (EVFLAG) { @@ -228,9 +248,9 @@ struct PairComputeFunctor { } } - f(i,0) += fxtmp; - f(i,1) += fytmp; - f(i,2) += fztmp; + a_f(i,0) += fxtmp; + a_f(i,1) += fytmp; + a_f(i,2) += fztmp; return ev; } @@ -240,6 +260,9 @@ struct PairComputeFunctor { const F_FLOAT &epair, const F_FLOAT &fpair, const F_FLOAT &delx, const F_FLOAT &dely, const F_FLOAT &delz) const { + auto a_eatom = dup_eatom.template access::value>(); + auto a_vatom = dup_vatom.template access::value>(); + const int EFLAG = c.eflag; const int NEWTON_PAIR = c.newton_pair; const int VFLAG = c.vflag_either; @@ -247,8 +270,8 @@ struct PairComputeFunctor { if (EFLAG) { if (c.eflag_atom) { const E_FLOAT epairhalf = 0.5 * epair; - if (NEWTON_PAIR || i < c.nlocal) eatom[i] += epairhalf; - if ((NEWTON_PAIR || j < c.nlocal) && NEIGHFLAG != FULL) eatom[j] += epairhalf; + if (NEWTON_PAIR || i < c.nlocal) a_eatom[i] += epairhalf; + if ((NEWTON_PAIR || j < c.nlocal) && NEIGHFLAG != FULL) a_eatom[j] += epairhalf; } } @@ -299,20 +322,20 @@ struct PairComputeFunctor { if (c.vflag_atom) { if (NEWTON_PAIR || i < c.nlocal) { - vatom(i,0) += 0.5*v0; - vatom(i,1) += 0.5*v1; - vatom(i,2) += 0.5*v2; - vatom(i,3) += 0.5*v3; - vatom(i,4) += 0.5*v4; - vatom(i,5) += 0.5*v5; + a_vatom(i,0) += 0.5*v0; + a_vatom(i,1) += 0.5*v1; + a_vatom(i,2) += 0.5*v2; + a_vatom(i,3) += 0.5*v3; + a_vatom(i,4) += 0.5*v4; + a_vatom(i,5) += 0.5*v5; } if ((NEWTON_PAIR || j < c.nlocal) && NEIGHFLAG != FULL) { - vatom(j,0) += 0.5*v0; - vatom(j,1) += 0.5*v1; - vatom(j,2) += 0.5*v2; - vatom(j,3) += 0.5*v3; - vatom(j,4) += 0.5*v4; - vatom(j,5) += 0.5*v5; + a_vatom(j,0) += 0.5*v0; + a_vatom(j,1) += 0.5*v1; + a_vatom(j,2) += 0.5*v2; + a_vatom(j,3) += 0.5*v3; + a_vatom(j,4) += 0.5*v4; + a_vatom(j,5) += 0.5*v5; } } } @@ -351,6 +374,9 @@ struct PairComputeFunctor { return j >> SBBITS & 3; } + + void contribute() {} + template KOKKOS_FUNCTION EV_FLOAT compute_item(const int& ii, @@ -489,10 +515,12 @@ EV_FLOAT pair_compute_neighlist (PairStyle* fpair, typename Kokkos::Impl::enable PairComputeFunctor ff(fpair,list); if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(list->inum,ff,ev); else Kokkos::parallel_for(list->inum,ff); + ff.contribute(); } else { PairComputeFunctor ff(fpair,list); if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(list->inum,ff,ev); else Kokkos::parallel_for(list->inum,ff); + ff.contribute(); } return ev; } diff --git a/src/KOKKOS/pair_reaxc_kokkos.cpp b/src/KOKKOS/pair_reaxc_kokkos.cpp index e2e2e6f6de96197435a3bcb4dcca3af53ed3ec45..46ecddfd83849f0f0b6fcfcfa2d5aa301faa1758 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.cpp +++ b/src/KOKKOS/pair_reaxc_kokkos.cpp @@ -708,6 +708,19 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) d_neighbors = k_list->d_neighbors; d_ilist = k_list->d_ilist; + need_dup = lmp->kokkos->need_dup(); + + // allocate duplicated memory + if (need_dup) { + dup_f = Kokkos::Experimental::create_scatter_view(f); + dup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + dup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } else { + ndup_f = Kokkos::Experimental::create_scatter_view(f); + ndup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + ndup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } + if (eflag_global) { for (int i = 0; i < 14; i++) pvector[i] = 0.0; @@ -777,6 +790,15 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) allocate_array(); } + // allocate duplicated memory + if (need_dup) { + dup_dDeltap_self = Kokkos::Experimental::create_scatter_view(d_dDeltap_self); + dup_total_bo = Kokkos::Experimental::create_scatter_view(d_total_bo); + } else { + ndup_dDeltap_self = Kokkos::Experimental::create_scatter_view(d_dDeltap_self); + ndup_total_bo = Kokkos::Experimental::create_scatter_view(d_total_bo); + } + // Neighbor lists for bond and hbond // try, resize if necessary @@ -799,7 +821,7 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) if (neighflag == HALF) Kokkos::parallel_for(Kokkos::RangePolicy >(0,ignum),*this); else if (neighflag == HALFTHREAD) - Kokkos::parallel_for(Kokkos::RangePolicy >(0,ignum),*this); + Kokkos::parallel_for(Kokkos::RangePolicy >(0,ignum),*this); else //(neighflag == FULL) Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); @@ -814,14 +836,40 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) if (resize_hb) maxhb++; resize = resize_bo || resize_hb; - if (resize) allocate_array(); + if (resize) { + allocate_array(); + if (need_dup) { + dup_dDeltap_self = Kokkos::Experimental::create_scatter_view(d_dDeltap_self); + dup_total_bo = Kokkos::Experimental::create_scatter_view(d_total_bo); + } else { + ndup_dDeltap_self = Kokkos::Experimental::create_scatter_view(d_dDeltap_self); + ndup_total_bo = Kokkos::Experimental::create_scatter_view(d_total_bo); + } + } } + // allocate duplicated memory + if (need_dup) { + dup_CdDelta = Kokkos::Experimental::create_scatter_view(d_CdDelta); + //dup_Cdbo = Kokkos::Experimental::create_scatter_view(d_Cdbo); + //dup_Cdbopi = Kokkos::Experimental::create_scatter_view(d_Cdbopi); + //dup_Cdbopi2 = Kokkos::Experimental::create_scatter_view(d_Cdbopi2); + } else { + ndup_CdDelta = Kokkos::Experimental::create_scatter_view(d_CdDelta); + //ndup_Cdbo = Kokkos::Experimental::create_scatter_view(d_Cdbo); + //ndup_Cdbopi = Kokkos::Experimental::create_scatter_view(d_Cdbopi); + //ndup_Cdbopi2 = Kokkos::Experimental::create_scatter_view(d_Cdbopi2); + } + + // reduction over duplicated memory + if (need_dup) + Kokkos::Experimental::contribute(d_total_bo, dup_total_bo); // needed in BondOrder1 + // Bond order if (neighflag == HALF) { Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); } else if (neighflag == HALFTHREAD) { - Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); + Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); } Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); Kokkos::parallel_for(Kokkos::RangePolicy(0,ignum),*this); @@ -920,9 +968,30 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) pvector[7] = ev.ereax[8]; ev_all.evdwl += ev.ereax[8]; + // reduction over duplicated memory + if (need_dup) { + Kokkos::Experimental::contribute(d_dDeltap_self, dup_dDeltap_self); // needed in ComputeBond2 + Kokkos::Experimental::contribute(d_CdDelta, dup_CdDelta); // needed in ComputeBond2 + + //Kokkos::Experimental::contribute(d_Cdbo, dup_Cdbo); // needed in UpdateBond, but also used in UpdateBond + //Kokkos::Experimental::contribute(d_Cdbopi, dup_Cdbopi); // needed in UpdateBond, but also used in UpdateBond + //Kokkos::Experimental::contribute(d_Cdbopi2, dup_Cdbopi2); // needed in UpdateBond, but also used in UpdateBond + //dup_Cdbo.reset_except(d_Cdbo); + //dup_Cdbopi.reset_except(d_Cdbopi); + //dup_Cdbopi2.reset_except(d_Cdbopi2); + } + // Bond force if (neighflag == HALF) { Kokkos::parallel_for(Kokkos::RangePolicy >(0,ignum),*this); + + // reduction over duplicated memory + //if (need_dup) { + // Kokkos::Experimental::contribute(d_Cdbo, dup_Cdbo); // needed in ComputeBond2 + // Kokkos::Experimental::contribute(d_Cdbopi, dup_Cdbopi); // needed in ComputeBond2 + // Kokkos::Experimental::contribute(d_Cdbopi2, dup_Cdbopi2); // needed in ComputeBond2 + //} + if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,ignum),*this,ev); else @@ -931,6 +1000,14 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) pvector[0] += ev.evdwl; } else { //if (neighflag == HALFTHREAD) { Kokkos::parallel_for(Kokkos::RangePolicy >(0,ignum),*this); + + // reduction over duplicated memory + //if (need_dup) { + // Kokkos::Experimental::contribute(d_Cdbo, dup_Cdbo); // needed in ComputeBond2 + // Kokkos::Experimental::contribute(d_Cdbopi, dup_Cdbopi); // needed in ComputeBond2 + // Kokkos::Experimental::contribute(d_Cdbopi2, dup_Cdbopi2); // needed in ComputeBond2 + //} + if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy >(0,ignum),*this,ev); else @@ -939,6 +1016,10 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) pvector[0] += ev.evdwl; } + // reduction over duplicated memory + if (need_dup) + Kokkos::Experimental::contribute(f, dup_f); + if (eflag_global) { eng_vdwl += ev_all.evdwl; eng_coul += ev_all.ecoul; @@ -955,11 +1036,15 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) if (vflag_fdotr) pair_virial_fdotr_compute(this); if (eflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_eatom, dup_eatom); k_eatom.template modify(); k_eatom.template sync(); } if (vflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_vatom, dup_vatom); k_vatom.template modify(); k_vatom.template sync(); } @@ -968,6 +1053,19 @@ void PairReaxCKokkos::compute(int eflag_in, int vflag_in) FindBondSpecies(); copymode = 0; + + // free duplicated memory + if (need_dup) { + dup_f = decltype(dup_f)(); + dup_dDeltap_self = decltype(dup_dDeltap_self)(); + dup_total_bo = decltype(dup_total_bo)(); + dup_CdDelta = decltype(dup_CdDelta)(); + //dup_Cdbo = decltype(dup_Cdbo)(); + //dup_Cdbopi = decltype(dup_Cdbopi)(); + //dup_Cdbopi2 = decltype(dup_Cdbopi2)(); + dup_eatom = decltype(dup_eatom)(); + dup_vatom = decltype(dup_vatom)(); + } } /* ---------------------------------------------------------------------- */ @@ -1006,8 +1104,10 @@ template KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::operator()(PairReaxComputeLJCoulomb, const int &ii, EV_FLOAT_REAX& ev) const { - // The f array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_f = f; + // The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); F_FLOAT powr_vdw, powgi_vdw, fn13, dfn13, exp1, exp2, etmp; F_FLOAT evdwl, fvdwl; @@ -1165,8 +1265,10 @@ template KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::operator()(PairReaxComputeTabulatedLJCoulomb, const int &ii, EV_FLOAT_REAX& ev) const { - // The f array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_f = f; + // The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); const int i = d_ilist[ii]; const X_FLOAT xtmp = x(i,0); @@ -1366,18 +1468,18 @@ void PairReaxCKokkos::operator()(PairReaxZero, const int &n) const { template KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::operator()(PairReaxZeroEAtom, const int &i) const { - v_eatom(i) = 0.0; + d_eatom(i) = 0.0; } template KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::operator()(PairReaxZeroVAtom, const int &i) const { - v_vatom(i,0) = 0.0; - v_vatom(i,1) = 0.0; - v_vatom(i,2) = 0.0; - v_vatom(i,3) = 0.0; - v_vatom(i,4) = 0.0; - v_vatom(i,5) = 0.0; + d_vatom(i,0) = 0.0; + d_vatom(i,1) = 0.0; + d_vatom(i,2) = 0.0; + d_vatom(i,3) = 0.0; + d_vatom(i,4) = 0.0; + d_vatom(i,5) = 0.0; } /* ---------------------------------------------------------------------- */ @@ -1547,8 +1649,11 @@ void PairReaxCKokkos::operator()(PairReaxBuildListsHalf, if (d_resize_bo() || d_resize_hb()) return; - Kokkos::View::value> > a_dDeltap_self = d_dDeltap_self; - Kokkos::View::value> > a_total_bo = d_total_bo; + auto v_dDeltap_self = ScatterViewHelper::value,decltype(dup_dDeltap_self),decltype(ndup_dDeltap_self)>::get(dup_dDeltap_self,ndup_dDeltap_self); + auto a_dDeltap_self = v_dDeltap_self.template access::value>(); + + auto v_total_bo = ScatterViewHelper::value,decltype(dup_total_bo),decltype(ndup_total_bo)>::get(dup_total_bo,ndup_total_bo); + auto a_total_bo = v_total_bo.template access::value>(); const int i = d_ilist[ii]; const X_FLOAT xtmp = x(i,0); @@ -2239,10 +2344,8 @@ template KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::operator()(PairReaxComputeMulti2, const int &ii, EV_FLOAT_REAX& ev) const { - Kokkos::View::value> > a_CdDelta = d_CdDelta; - Kokkos::View::value> > a_Cdbo = d_Cdbo; - Kokkos::View::value> > a_Cdbopi = d_Cdbopi; - Kokkos::View::value> > a_Cdbopi2 = d_Cdbopi2; + auto v_CdDelta = ScatterViewHelper::value,decltype(dup_CdDelta),decltype(ndup_CdDelta)>::get(dup_CdDelta,ndup_CdDelta); + auto a_CdDelta = v_CdDelta.template access::value>(); const int i = d_ilist[ii]; const int itype = type(i); @@ -2393,9 +2496,12 @@ template KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::operator()(PairReaxComputeAngular, const int &ii, EV_FLOAT_REAX& ev) const { - Kokkos::View::value> > a_f = f; + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); Kokkos::View::value> > a_Cdbo = d_Cdbo; - Kokkos::View::value> > a_CdDelta = d_CdDelta; + + auto v_CdDelta = ScatterViewHelper::value,decltype(dup_CdDelta),decltype(ndup_CdDelta)>::get(dup_CdDelta,ndup_CdDelta); + auto a_CdDelta = v_CdDelta.template access::value>(); const int i = d_ilist[ii]; const int itype = type(i); @@ -2702,9 +2808,13 @@ template KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::operator()(PairReaxComputeTorsion, const int &ii, EV_FLOAT_REAX& ev) const { - Kokkos::View::value> > a_f = f; - Kokkos::View::value> > a_CdDelta = d_CdDelta; + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); + + auto v_CdDelta = ScatterViewHelper::value,decltype(dup_CdDelta),decltype(ndup_CdDelta)>::get(dup_CdDelta,ndup_CdDelta); + auto a_CdDelta = v_CdDelta.template access::value>(); Kokkos::View::value> > a_Cdbo = d_Cdbo; + //auto a_Cdbo = dup_Cdbo.template access::value>(); // in reaxc_torsion_angles: j = i, k = j, i = k; @@ -3074,7 +3184,8 @@ template KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::operator()(PairReaxComputeHydrogen, const int &ii, EV_FLOAT_REAX& ev) const { - Kokkos::View::value> > a_f = f; + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); int hblist[MAX_BONDS]; F_FLOAT theta, cos_theta, sin_xhz4, cos_xhz1, sin_theta2; @@ -3224,6 +3335,9 @@ void PairReaxCKokkos::operator()(PairReaxUpdateBond, cons Kokkos::View::value> > a_Cdbo = d_Cdbo; Kokkos::View::value> > a_Cdbopi = d_Cdbopi; Kokkos::View::value> > a_Cdbopi2 = d_Cdbopi2; + //auto a_Cdbo = dup_Cdbo.template access::value>(); + //auto a_Cdbopi = dup_Cdbopi.template access::value>(); + //auto a_Cdbopi2 = dup_Cdbopi2.template access::value>(); const int i = d_ilist[ii]; const tagint itag = tag(i); @@ -3270,8 +3384,11 @@ template KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::operator()(PairReaxComputeBond1, const int &ii, EV_FLOAT_REAX& ev) const { - Kokkos::View::value> > a_f = f; - Kokkos::View::value> > a_CdDelta = d_CdDelta; + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); + + auto v_CdDelta = ScatterViewHelper::value,decltype(dup_CdDelta),decltype(ndup_CdDelta)>::get(dup_CdDelta,ndup_CdDelta); + auto a_CdDelta = v_CdDelta.template access::value>(); F_FLOAT delij[3]; F_FLOAT p_be1, p_be2, De_s, De_p, De_pp, pow_BOs_be2, exp_be12, CEbo, ebond; @@ -3408,7 +3525,8 @@ template KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::operator()(PairReaxComputeBond2, const int &ii, EV_FLOAT_REAX& ev) const { - Kokkos::View::value> > a_f = f; + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); F_FLOAT delij[3], delik[3], deljk[3], tmpvec[3]; F_FLOAT dBOp_i[3], dBOp_k[3], dln_BOp_pi[3], dln_BOp_pi2[3]; @@ -3620,9 +3738,13 @@ void PairReaxCKokkos::ev_tally(EV_FLOAT_REAX &ev, const int &i, cons { const int VFLAG = vflag_either; - // The eatom and vatom arrays are atomic for Half/Thread neighbor style - Kokkos::View::value> > a_eatom = v_eatom; - Kokkos::View::value> > a_vatom = v_vatom; + // The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_eatom = ScatterViewHelper::value,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom); + auto a_eatom = v_eatom.template access::value>(); + + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); if (eflag_atom) { const E_FLOAT epairhalf = 0.5 * epair; @@ -3685,10 +3807,13 @@ void PairReaxCKokkos::e_tally(EV_FLOAT_REAX &ev, const int &i, const const F_FLOAT &epair) const { - // The eatom array is atomic for Half/Thread neighbor style + // The eatom array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + if (eflag_atom) { - Kokkos::View::value> > a_eatom = v_eatom; + auto v_eatom = ScatterViewHelper::value,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom); + auto a_eatom = v_eatom.template access::value>(); + const E_FLOAT epairhalf = 0.5 * epair; a_eatom[i] += epairhalf; a_eatom[j] += epairhalf; @@ -3703,8 +3828,9 @@ KOKKOS_INLINE_FUNCTION void PairReaxCKokkos::e_tally_single(EV_FLOAT_REAX &ev, const int &i, const F_FLOAT &epair) const { - // The eatom array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_eatom = v_eatom; + // The eatom array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + auto v_eatom = ScatterViewHelper::value,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom); + auto a_eatom = v_eatom.template access::value>(); a_eatom[i] += epair; } @@ -3737,7 +3863,9 @@ void PairReaxCKokkos::v_tally(EV_FLOAT_REAX &ev, const int &i, } if (vflag_atom) { - Kokkos::View::value> > a_vatom = v_vatom; + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); + a_vatom(i,0) += v[0]; a_vatom(i,1) += v[1]; a_vatom(i,2) += v[2]; a_vatom(i,3) += v[3]; a_vatom(i,4) += v[4]; a_vatom(i,5) += v[5]; } @@ -3752,8 +3880,9 @@ void PairReaxCKokkos::v_tally3(EV_FLOAT_REAX &ev, const int &i, cons F_FLOAT *fj, F_FLOAT *fk, F_FLOAT *drij, F_FLOAT *drik) const { - // The eatom and vatom arrays are atomic for Half/Thread neighbor style - Kokkos::View::value> > a_vatom = v_vatom; + // The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); F_FLOAT v[6]; @@ -3793,7 +3922,8 @@ void PairReaxCKokkos::v_tally4(EV_FLOAT_REAX &ev, const int &i, cons const int &l, F_FLOAT *fi, F_FLOAT *fj, F_FLOAT *fk, F_FLOAT *dril, F_FLOAT *drjl, F_FLOAT *drkl) const { - // The vatom array is atomic for Half/Thread neighbor style + // The vatom array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + F_FLOAT v[6]; v[0] = dril[0]*fi[0] + drjl[0]*fj[0] + drkl[0]*fk[0]; @@ -3813,7 +3943,9 @@ void PairReaxCKokkos::v_tally4(EV_FLOAT_REAX &ev, const int &i, cons } if (vflag_atom) { - Kokkos::View::value> > a_vatom = v_vatom; + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); + a_vatom(i,0) += 0.25 * v[0]; a_vatom(i,1) += 0.25 * v[1]; a_vatom(i,2) += 0.25 * v[2]; a_vatom(i,3) += 0.25 * v[3]; a_vatom(i,4) += 0.25 * v[4]; a_vatom(i,5) += 0.25 * v[5]; a_vatom(j,0) += 0.25 * v[0]; a_vatom(j,1) += 0.25 * v[1]; a_vatom(j,2) += 0.25 * v[2]; @@ -3910,13 +4042,13 @@ void PairReaxCKokkos::ev_setup(int eflag, int vflag, int) maxeatom = atom->nmax; memoryKK->destroy_kokkos(k_eatom,eatom); memoryKK->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); - v_eatom = k_eatom.view(); + d_eatom = k_eatom.view(); } if (vflag_atom && atom->nmax > maxvatom) { maxvatom = atom->nmax; memoryKK->destroy_kokkos(k_vatom,vatom); memoryKK->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); - v_vatom = k_vatom.view(); + d_vatom = k_vatom.view(); } // zero accumulators diff --git a/src/KOKKOS/pair_reaxc_kokkos.h b/src/KOKKOS/pair_reaxc_kokkos.h index 5c96d44618361ca3828ba26ceb1738a1dac4de51..89dfc4d884309eb642a594438ded96e29100c209 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.h +++ b/src/KOKKOS/pair_reaxc_kokkos.h @@ -380,11 +380,10 @@ class PairReaxCKokkos : public PairReaxC { typename AT::t_tagint_1d_randomread molecule; DAT::tdual_efloat_1d k_eatom; - typename AT::t_efloat_1d v_eatom; + typename AT::t_efloat_1d d_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_virial_array d_vatom; - typename AT::t_virial_array v_vatom; + typename AT::t_virial_array d_vatom; HAT::t_virial_array h_vatom; DAT::tdual_float_1d k_tap; @@ -401,6 +400,28 @@ class PairReaxCKokkos : public PairReaxC { typename AT::t_ffloat_2d_dl d_C1dbopi2, d_C2dbopi2, d_C3dbopi2, d_C4dbopi2; typename AT::t_ffloat_2d_dl d_Cdbo, d_Cdbopi, d_Cdbopi2, d_dDeltap_self; + Kokkos::Experimental::ScatterView dup_total_bo; + Kokkos::Experimental::ScatterView dup_CdDelta; + Kokkos::Experimental::ScatterView dup_eatom; + Kokkos::Experimental::ScatterView dup_f; + Kokkos::Experimental::ScatterView dup_vatom; + Kokkos::Experimental::ScatterView dup_dDeltap_self; + Kokkos::Experimental::ScatterView dup_Cdbo; + Kokkos::Experimental::ScatterView dup_Cdbopi; + Kokkos::Experimental::ScatterView dup_Cdbopi2; + + Kokkos::Experimental::ScatterView ndup_total_bo; + Kokkos::Experimental::ScatterView ndup_CdDelta; + Kokkos::Experimental::ScatterView ndup_eatom; + Kokkos::Experimental::ScatterView ndup_f; + Kokkos::Experimental::ScatterView ndup_vatom; + Kokkos::Experimental::ScatterView ndup_dDeltap_self; + Kokkos::Experimental::ScatterView ndup_Cdbo; + Kokkos::Experimental::ScatterView ndup_Cdbopi; + Kokkos::Experimental::ScatterView ndup_Cdbopi2; + + int need_dup; + typedef Kokkos::DualView tdual_ffloat_2d_n7; typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread; typedef typename tdual_ffloat_2d_n7::t_host t_host_ffloat_2d_n7; diff --git a/src/KOKKOS/pair_snap_kokkos.h b/src/KOKKOS/pair_snap_kokkos.h index 5c68284219fe2829e589a6dcd5c041587cc4cd71..b2019879edf0449459d734c69e6d204e818282d2 100644 --- a/src/KOKKOS/pair_snap_kokkos.h +++ b/src/KOKKOS/pair_snap_kokkos.h @@ -129,6 +129,12 @@ inline double dist2(double* x,double* y); typename AT::t_f_array f; typename AT::t_int_1d_randomread type; + int need_dup; + Kokkos::Experimental::ScatterView dup_f; + Kokkos::Experimental::ScatterView dup_vatom; + Kokkos::Experimental::ScatterView ndup_f; + Kokkos::Experimental::ScatterView ndup_vatom; + friend void pair_virial_fdotr_compute(PairSNAPKokkos*); }; diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index a024e5cbd19238a739663870c8e21fcabaea0a41..c452042cfecbd5730a2a35cfda2c5fc64e5eaecf 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -170,6 +170,15 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) d_ilist = k_list->d_ilist; int inum = list->inum; + need_dup = lmp->kokkos->need_dup(); + if (need_dup) { + dup_f = Kokkos::Experimental::create_scatter_view(f); + dup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } else { + ndup_f = Kokkos::Experimental::create_scatter_view(f); + ndup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } + /* for (int i = 0; i < nlocal; i++) { typename t_neigh_list::t_neighs neighs_i = neigh_list.get_neighs(i); @@ -232,6 +241,9 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) //if (step%10==0) // printf(" %e %e %e %e %e (%e %e): %e\n",t1,t2,t3,t4,t5,t6,t7,t1+t2+t3+t4+t5); + if (need_dup) + Kokkos::Experimental::contribute(f, dup_f); + if (eflag_global) eng_vdwl += ev.evdwl; if (vflag_global) { virial[0] += ev.v[0]; @@ -244,18 +256,28 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) if (vflag_fdotr) pair_virial_fdotr_compute(this); + if (eflag_atom) { k_eatom.template modify(); k_eatom.template sync(); } if (vflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_vatom, dup_vatom); k_vatom.template modify(); k_vatom.template sync(); } atomKK->modified(execution_space,F_MASK); + copymode = 0; + + // free duplicated memory + if (need_dup) { + dup_f = decltype(dup_f)(); + dup_vatom = decltype(dup_vatom)(); + } } /* ---------------------------------------------------------------------- @@ -349,8 +371,11 @@ template template KOKKOS_INLINE_FUNCTION void PairSNAPKokkos::operator() (TagPairSNAP,const typename Kokkos::TeamPolicy >::member_type& team, EV_FLOAT& ev) const { - // The f array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_f = f; + + // The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); const int ii = team.league_rank(); const int i = d_ilist[ii]; @@ -591,8 +616,10 @@ void PairSNAPKokkos::v_tally_xyz(EV_FLOAT &ev, const int &i, const i const F_FLOAT &fx, const F_FLOAT &fy, const F_FLOAT &fz, const F_FLOAT &delx, const F_FLOAT &dely, const F_FLOAT &delz) const { - // The vatom array is atomic for Half/Thread neighbor style - Kokkos::View::value> > v_vatom = k_vatom.view(); + // The vatom array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); const E_FLOAT v0 = delx*fx; const E_FLOAT v1 = dely*fy; @@ -611,18 +638,18 @@ void PairSNAPKokkos::v_tally_xyz(EV_FLOAT &ev, const int &i, const i } if (vflag_atom) { - v_vatom(i,0) += 0.5*v0; - v_vatom(i,1) += 0.5*v1; - v_vatom(i,2) += 0.5*v2; - v_vatom(i,3) += 0.5*v3; - v_vatom(i,4) += 0.5*v4; - v_vatom(i,5) += 0.5*v5; - v_vatom(j,0) += 0.5*v0; - v_vatom(j,1) += 0.5*v1; - v_vatom(j,2) += 0.5*v2; - v_vatom(j,3) += 0.5*v3; - v_vatom(j,4) += 0.5*v4; - v_vatom(j,5) += 0.5*v5; + a_vatom(i,0) += 0.5*v0; + a_vatom(i,1) += 0.5*v1; + a_vatom(i,2) += 0.5*v2; + a_vatom(i,3) += 0.5*v3; + a_vatom(i,4) += 0.5*v4; + a_vatom(i,5) += 0.5*v5; + a_vatom(j,0) += 0.5*v0; + a_vatom(j,1) += 0.5*v1; + a_vatom(j,2) += 0.5*v2; + a_vatom(j,3) += 0.5*v3; + a_vatom(j,4) += 0.5*v4; + a_vatom(j,5) += 0.5*v5; } } diff --git a/src/KOKKOS/pair_sw_kokkos.cpp b/src/KOKKOS/pair_sw_kokkos.cpp index 8f4903c76794a4c7a1d38b5bbbf1b53894788bda..5452d2293f269f59abeed800b7bb1ebc6bef4a0d 100644 --- a/src/KOKKOS/pair_sw_kokkos.cpp +++ b/src/KOKKOS/pair_sw_kokkos.cpp @@ -115,6 +115,17 @@ void PairSWKokkos::compute(int eflag_in, int vflag_in) d_numneigh = k_list->d_numneigh; d_neighbors = k_list->d_neighbors; + need_dup = lmp->kokkos->need_dup(); + if (need_dup) { + dup_f = Kokkos::Experimental::create_scatter_view(f); + dup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + dup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } else { + ndup_f = Kokkos::Experimental::create_scatter_view(f); + ndup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + ndup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } + copymode = 1; EV_FLOAT ev; @@ -160,6 +171,9 @@ void PairSWKokkos::compute(int eflag_in, int vflag_in) ev_all += ev; } + if (need_dup) + Kokkos::Experimental::contribute(f, dup_f); + if (eflag_global) eng_vdwl += ev_all.evdwl; if (vflag_global) { virial[0] += ev_all.v[0]; @@ -171,11 +185,15 @@ void PairSWKokkos::compute(int eflag_in, int vflag_in) } if (eflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_eatom, dup_eatom); k_eatom.template modify(); k_eatom.template sync(); } if (vflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_vatom, dup_vatom); k_vatom.template modify(); k_vatom.template sync(); } @@ -183,6 +201,13 @@ void PairSWKokkos::compute(int eflag_in, int vflag_in) if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; + + // free duplicated memory + if (need_dup) { + dup_f = decltype(dup_f)(); + dup_eatom = decltype(dup_eatom)(); + dup_vatom = decltype(dup_vatom)(); + } } @@ -222,9 +247,10 @@ template KOKKOS_INLINE_FUNCTION void PairSWKokkos::operator()(TagPairSWComputeHalf, const int &ii, EV_FLOAT& ev) const { - // The f array is atomic + // The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial - Kokkos::View::value> > a_f = f; + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); F_FLOAT delr1[3],delr2[3],fj[3],fk[3]; F_FLOAT evdwl = 0.0; @@ -777,17 +803,19 @@ void PairSWKokkos::ev_tally(EV_FLOAT &ev, const int &i, const int &j { const int VFLAG = vflag_either; - // The eatom and vatom arrays are atomic for half/thread neighbor list + // The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial - Kokkos::View::value> > v_eatom = k_eatom.view(); - Kokkos::View::value> > v_vatom = k_vatom.view(); + auto v_eatom = ScatterViewHelper::value,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom); + auto a_eatom = v_eatom.template access::value>(); + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); if (eflag_atom) { const E_FLOAT epairhalf = 0.5 * epair; - v_eatom[i] += epairhalf; + a_eatom[i] += epairhalf; if (NEIGHFLAG != FULL) - v_eatom[j] += epairhalf; + a_eatom[j] += epairhalf; } if (VFLAG) { @@ -817,20 +845,20 @@ void PairSWKokkos::ev_tally(EV_FLOAT &ev, const int &i, const int &j } if (vflag_atom) { - v_vatom(i,0) += 0.5*v0; - v_vatom(i,1) += 0.5*v1; - v_vatom(i,2) += 0.5*v2; - v_vatom(i,3) += 0.5*v3; - v_vatom(i,4) += 0.5*v4; - v_vatom(i,5) += 0.5*v5; + a_vatom(i,0) += 0.5*v0; + a_vatom(i,1) += 0.5*v1; + a_vatom(i,2) += 0.5*v2; + a_vatom(i,3) += 0.5*v3; + a_vatom(i,4) += 0.5*v4; + a_vatom(i,5) += 0.5*v5; if (NEIGHFLAG != FULL) { - v_vatom(j,0) += 0.5*v0; - v_vatom(j,1) += 0.5*v1; - v_vatom(j,2) += 0.5*v2; - v_vatom(j,3) += 0.5*v3; - v_vatom(j,4) += 0.5*v4; - v_vatom(j,5) += 0.5*v5; + a_vatom(j,0) += 0.5*v0; + a_vatom(j,1) += 0.5*v1; + a_vatom(j,2) += 0.5*v2; + a_vatom(j,3) += 0.5*v3; + a_vatom(j,4) += 0.5*v4; + a_vatom(j,5) += 0.5*v5; } } } @@ -853,17 +881,20 @@ void PairSWKokkos::ev_tally3(EV_FLOAT &ev, const int &i, const int & const int VFLAG = vflag_either; -// The eatom and vatom arrays are atomic for half/thread neighbor list + // The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_eatom = ScatterViewHelper::value,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom); + auto a_eatom = v_eatom.template access::value>(); - Kokkos::View::value> > v_eatom = k_eatom.view(); - Kokkos::View::value> > v_vatom = k_vatom.view(); + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); if (eflag_atom) { epairthird = THIRD * (evdwl + ecoul); - v_eatom[i] += epairthird; + a_eatom[i] += epairthird; if (NEIGHFLAG != FULL) { - v_eatom[j] += epairthird; - v_eatom[k] += epairthird; + a_eatom[j] += epairthird; + a_eatom[k] += epairthird; } } @@ -885,18 +916,18 @@ void PairSWKokkos::ev_tally3(EV_FLOAT &ev, const int &i, const int & } if (vflag_atom) { - v_vatom(i,0) += THIRD*v[0]; v_vatom(i,1) += THIRD*v[1]; - v_vatom(i,2) += THIRD*v[2]; v_vatom(i,3) += THIRD*v[3]; - v_vatom(i,4) += THIRD*v[4]; v_vatom(i,5) += THIRD*v[5]; + a_vatom(i,0) += THIRD*v[0]; a_vatom(i,1) += THIRD*v[1]; + a_vatom(i,2) += THIRD*v[2]; a_vatom(i,3) += THIRD*v[3]; + a_vatom(i,4) += THIRD*v[4]; a_vatom(i,5) += THIRD*v[5]; if (NEIGHFLAG != FULL) { - v_vatom(j,0) += THIRD*v[0]; v_vatom(j,1) += THIRD*v[1]; - v_vatom(j,2) += THIRD*v[2]; v_vatom(j,3) += THIRD*v[3]; - v_vatom(j,4) += THIRD*v[4]; v_vatom(j,5) += THIRD*v[5]; + a_vatom(j,0) += THIRD*v[0]; a_vatom(j,1) += THIRD*v[1]; + a_vatom(j,2) += THIRD*v[2]; a_vatom(j,3) += THIRD*v[3]; + a_vatom(j,4) += THIRD*v[4]; a_vatom(j,5) += THIRD*v[5]; - v_vatom(k,0) += THIRD*v[0]; v_vatom(k,1) += THIRD*v[1]; - v_vatom(k,2) += THIRD*v[2]; v_vatom(k,3) += THIRD*v[3]; - v_vatom(k,4) += THIRD*v[4]; v_vatom(k,5) += THIRD*v[5]; + a_vatom(k,0) += THIRD*v[0]; a_vatom(k,1) += THIRD*v[1]; + a_vatom(k,2) += THIRD*v[2]; a_vatom(k,3) += THIRD*v[3]; + a_vatom(k,4) += THIRD*v[4]; a_vatom(k,5) += THIRD*v[5]; } } } diff --git a/src/KOKKOS/pair_sw_kokkos.h b/src/KOKKOS/pair_sw_kokkos.h index eb59d5bc3ced9f73a1a9f4f446bd083ab7c532a1..1a3f0b862f860d1c36a3db5df953ece351e620f6 100644 --- a/src/KOKKOS/pair_sw_kokkos.h +++ b/src/KOKKOS/pair_sw_kokkos.h @@ -134,6 +134,14 @@ class PairSWKokkos : public PairSW { typename AT::t_efloat_1d d_eatom; typename AT::t_virial_array d_vatom; + int need_dup; + Kokkos::Experimental::ScatterView dup_f; + Kokkos::Experimental::ScatterView dup_eatom; + Kokkos::Experimental::ScatterView dup_vatom; + Kokkos::Experimental::ScatterView ndup_f; + Kokkos::Experimental::ScatterView ndup_eatom; + Kokkos::Experimental::ScatterView ndup_vatom; + typename AT::t_int_1d_randomread d_type2frho; typename AT::t_int_2d_randomread d_type2rhor; typename AT::t_int_2d_randomread d_type2z2r; diff --git a/src/KOKKOS/pair_table_kokkos.cpp b/src/KOKKOS/pair_table_kokkos.cpp index 7b06f814bb4624874ca16f313f9faeda83cea9db..b72df04c5f626479ad0d8304e36a523d26f60e91 100644 --- a/src/KOKKOS/pair_table_kokkos.cpp +++ b/src/KOKKOS/pair_table_kokkos.cpp @@ -128,21 +128,25 @@ void PairTableKokkos::compute_style(int eflag_in, int vflag_in) ff(this,(NeighListKokkos*) list); if (eflag || vflag) Kokkos::parallel_reduce(list->inum,ff,ev); else Kokkos::parallel_for(list->inum,ff); + ff.contribute(); } else if (neighflag == HALFTHREAD) { PairComputeFunctor,HALFTHREAD,false,S_TableCompute > ff(this,(NeighListKokkos*) list); if (eflag || vflag) Kokkos::parallel_reduce(list->inum,ff,ev); else Kokkos::parallel_for(list->inum,ff); + ff.contribute(); } else if (neighflag == HALF) { PairComputeFunctor,HALF,false,S_TableCompute > f(this,(NeighListKokkos*) list); if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); else Kokkos::parallel_for(list->inum,f); + f.contribute(); } else if (neighflag == N2) { PairComputeFunctor,N2,false,S_TableCompute > f(this,(NeighListKokkos*) list); if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); else Kokkos::parallel_for(list->inum,f); + f.contribute(); } } else { if (neighflag == FULL) { @@ -150,21 +154,25 @@ void PairTableKokkos::compute_style(int eflag_in, int vflag_in) f(this,(NeighListKokkos*) list); if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); else Kokkos::parallel_for(list->inum,f); + f.contribute(); } else if (neighflag == HALFTHREAD) { PairComputeFunctor,HALFTHREAD,true,S_TableCompute > f(this,(NeighListKokkos*) list); if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); else Kokkos::parallel_for(list->inum,f); + f.contribute(); } else if (neighflag == HALF) { PairComputeFunctor,HALF,true,S_TableCompute > f(this,(NeighListKokkos*) list); if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); else Kokkos::parallel_for(list->inum,f); + f.contribute(); } else if (neighflag == N2) { PairComputeFunctor,N2,true,S_TableCompute > f(this,(NeighListKokkos*) list); if (eflag || vflag) Kokkos::parallel_reduce(list->inum,f,ev); else Kokkos::parallel_for(list->inum,f); + f.contribute(); } } diff --git a/src/KOKKOS/pair_tersoff_kokkos.cpp b/src/KOKKOS/pair_tersoff_kokkos.cpp index cb4def2d373b4d3950334997b98ab09ffe0efe14..c3e1494d0b172676e29266817d9434b6c8d601ff 100644 --- a/src/KOKKOS/pair_tersoff_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_kokkos.cpp @@ -200,6 +200,17 @@ void PairTersoffKokkos::compute(int eflag_in, int vflag_in) d_neighbors = k_list->d_neighbors; d_ilist = k_list->d_ilist; + need_dup = lmp->kokkos->need_dup(); + if (need_dup) { + dup_f = Kokkos::Experimental::create_scatter_view(f); + dup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + dup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } else { + ndup_f = Kokkos::Experimental::create_scatter_view(f); + ndup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + ndup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } + copymode = 1; EV_FLOAT ev; @@ -243,6 +254,9 @@ void PairTersoffKokkos::compute(int eflag_in, int vflag_in) ev_all += ev; } + if (need_dup) + Kokkos::Experimental::contribute(f, dup_f); + if (eflag_global) eng_vdwl += ev_all.evdwl; if (vflag_global) { virial[0] += ev_all.v[0]; @@ -254,11 +268,15 @@ void PairTersoffKokkos::compute(int eflag_in, int vflag_in) } if (eflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_eatom, dup_eatom); k_eatom.template modify(); k_eatom.template sync(); } if (vflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_vatom, dup_vatom); k_vatom.template modify(); k_vatom.template sync(); } @@ -266,6 +284,13 @@ void PairTersoffKokkos::compute(int eflag_in, int vflag_in) if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; + + // free duplicated memory + if (need_dup) { + dup_f = decltype(dup_f)(); + dup_eatom = decltype(dup_eatom)(); + dup_vatom = decltype(dup_vatom)(); + } } /* ---------------------------------------------------------------------- */ @@ -304,8 +329,10 @@ template KOKKOS_INLINE_FUNCTION void PairTersoffKokkos::operator()(TagPairTersoffComputeHalf, const int &ii, EV_FLOAT& ev) const { - // The f array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_f = f; + // The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); const int i = d_ilist[ii]; if (i >= nlocal) return; @@ -1117,14 +1144,18 @@ void PairTersoffKokkos::ev_tally(EV_FLOAT &ev, const int &i, const i { const int VFLAG = vflag_either; - // The eatom and vatom arrays are atomic for Half/Thread neighbor style - Kokkos::View::value> > v_eatom = k_eatom.view(); - Kokkos::View::value> > v_vatom = k_vatom.view(); + // The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_eatom = ScatterViewHelper::value,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom); + auto a_eatom = v_eatom.template access::value>(); + + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); if (eflag_atom) { const E_FLOAT epairhalf = 0.5 * epair; - v_eatom[i] += epairhalf; - if (NEIGHFLAG != FULL) v_eatom[j] += epairhalf; + a_eatom[i] += epairhalf; + if (NEIGHFLAG != FULL) a_eatom[j] += epairhalf; } if (VFLAG) { @@ -1154,20 +1185,20 @@ void PairTersoffKokkos::ev_tally(EV_FLOAT &ev, const int &i, const i } if (vflag_atom) { - v_vatom(i,0) += 0.5*v0; - v_vatom(i,1) += 0.5*v1; - v_vatom(i,2) += 0.5*v2; - v_vatom(i,3) += 0.5*v3; - v_vatom(i,4) += 0.5*v4; - v_vatom(i,5) += 0.5*v5; + a_vatom(i,0) += 0.5*v0; + a_vatom(i,1) += 0.5*v1; + a_vatom(i,2) += 0.5*v2; + a_vatom(i,3) += 0.5*v3; + a_vatom(i,4) += 0.5*v4; + a_vatom(i,5) += 0.5*v5; if (NEIGHFLAG != FULL) { - v_vatom(j,0) += 0.5*v0; - v_vatom(j,1) += 0.5*v1; - v_vatom(j,2) += 0.5*v2; - v_vatom(j,3) += 0.5*v3; - v_vatom(j,4) += 0.5*v4; - v_vatom(j,5) += 0.5*v5; + a_vatom(j,0) += 0.5*v0; + a_vatom(j,1) += 0.5*v1; + a_vatom(j,2) += 0.5*v2; + a_vatom(j,3) += 0.5*v3; + a_vatom(j,4) += 0.5*v4; + a_vatom(j,5) += 0.5*v5; } } } @@ -1181,9 +1212,10 @@ KOKKOS_INLINE_FUNCTION void PairTersoffKokkos::v_tally3(EV_FLOAT &ev, const int &i, const int &j, const int &k, F_FLOAT *fj, F_FLOAT *fk, F_FLOAT *drij, F_FLOAT *drik) const { + // The vatom array is duplicated for OpenMP, atomic for CUDA, and neither for Serial - // The eatom and vatom arrays are atomic for Half/Thread neighbor style - Kokkos::View::value> > v_vatom = k_vatom.view(); + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); F_FLOAT v[6]; @@ -1204,13 +1236,13 @@ void PairTersoffKokkos::v_tally3(EV_FLOAT &ev, const int &i, const i } if (vflag_atom) { - v_vatom(i,0) += v[0]; v_vatom(i,1) += v[1]; v_vatom(i,2) += v[2]; - v_vatom(i,3) += v[3]; v_vatom(i,4) += v[4]; v_vatom(i,5) += v[5]; + a_vatom(i,0) += v[0]; a_vatom(i,1) += v[1]; a_vatom(i,2) += v[2]; + a_vatom(i,3) += v[3]; a_vatom(i,4) += v[4]; a_vatom(i,5) += v[5]; if (NEIGHFLAG != FULL) { - v_vatom(j,0) += v[0]; v_vatom(j,1) += v[1]; v_vatom(j,2) += v[2]; - v_vatom(j,3) += v[3]; v_vatom(j,4) += v[4]; v_vatom(j,5) += v[5]; - v_vatom(k,0) += v[0]; v_vatom(k,1) += v[1]; v_vatom(k,2) += v[2]; - v_vatom(k,3) += v[3]; v_vatom(k,4) += v[4]; v_vatom(k,5) += v[5]; + a_vatom(j,0) += v[0]; a_vatom(j,1) += v[1]; a_vatom(j,2) += v[2]; + a_vatom(j,3) += v[3]; a_vatom(j,4) += v[4]; a_vatom(j,5) += v[5]; + a_vatom(k,0) += v[0]; a_vatom(k,1) += v[1]; a_vatom(k,2) += v[2]; + a_vatom(k,3) += v[3]; a_vatom(k,4) += v[4]; a_vatom(k,5) += v[5]; } } diff --git a/src/KOKKOS/pair_tersoff_kokkos.h b/src/KOKKOS/pair_tersoff_kokkos.h index 2dac2c5991fe1ba733b7ae1bedb7c9e640c1b645..f73d4fe2d89e8990466a0a8edafba1cc3d94a9ab 100644 --- a/src/KOKKOS/pair_tersoff_kokkos.h +++ b/src/KOKKOS/pair_tersoff_kokkos.h @@ -202,6 +202,14 @@ class PairTersoffKokkos : public PairTersoff { typename ArrayTypes::t_efloat_1d d_eatom; typename ArrayTypes::t_virial_array d_vatom; + int need_dup; + Kokkos::Experimental::ScatterView dup_f; + Kokkos::Experimental::ScatterView dup_eatom; + Kokkos::Experimental::ScatterView dup_vatom; + Kokkos::Experimental::ScatterView ndup_f; + Kokkos::Experimental::ScatterView ndup_eatom; + Kokkos::Experimental::ScatterView ndup_vatom; + typedef Kokkos::DualView tdual_ffloat_2d_n7; typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread; typedef typename tdual_ffloat_2d_n7::t_host t_host_ffloat_2d_n7; diff --git a/src/KOKKOS/pair_tersoff_mod_kokkos.cpp b/src/KOKKOS/pair_tersoff_mod_kokkos.cpp index 0d150f83e4a084a8d92a24a79f806aecea3e34c3..61493794baa68ee5672b48845262f4d718c1cf59 100644 --- a/src/KOKKOS/pair_tersoff_mod_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_mod_kokkos.cpp @@ -200,6 +200,17 @@ void PairTersoffMODKokkos::compute(int eflag_in, int vflag_in) d_neighbors = k_list->d_neighbors; d_ilist = k_list->d_ilist; + need_dup = lmp->kokkos->need_dup(); + if (need_dup) { + dup_f = Kokkos::Experimental::create_scatter_view(f); + dup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + dup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } else { + ndup_f = Kokkos::Experimental::create_scatter_view(f); + ndup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + ndup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } + copymode = 1; EV_FLOAT ev; @@ -243,6 +254,9 @@ void PairTersoffMODKokkos::compute(int eflag_in, int vflag_in) ev_all += ev; } + if (need_dup) + Kokkos::Experimental::contribute(f, dup_f); + if (eflag_global) eng_vdwl += ev_all.evdwl; if (vflag_global) { virial[0] += ev_all.v[0]; @@ -254,11 +268,15 @@ void PairTersoffMODKokkos::compute(int eflag_in, int vflag_in) } if (eflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_eatom, dup_eatom); k_eatom.template modify(); k_eatom.template sync(); } if (vflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_vatom, dup_vatom); k_vatom.template modify(); k_vatom.template sync(); } @@ -266,6 +284,13 @@ void PairTersoffMODKokkos::compute(int eflag_in, int vflag_in) if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; + + // free duplicated memory + if (need_dup) { + dup_f = decltype(dup_f)(); + dup_eatom = decltype(dup_eatom)(); + dup_vatom = decltype(dup_vatom)(); + } } /* ---------------------------------------------------------------------- */ @@ -304,8 +329,10 @@ template KOKKOS_INLINE_FUNCTION void PairTersoffMODKokkos::operator()(TagPairTersoffMODComputeHalf, const int &ii, EV_FLOAT& ev) const { - // The f array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_f = f; + // The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); const int i = d_ilist[ii]; if (i >= nlocal) return; @@ -1120,14 +1147,18 @@ void PairTersoffMODKokkos::ev_tally(EV_FLOAT &ev, const int &i, cons { const int VFLAG = vflag_either; - // The eatom and vatom arrays are atomic for Half/Thread neighbor style - Kokkos::View::value> > v_eatom = k_eatom.view(); - Kokkos::View::value> > v_vatom = k_vatom.view(); + // The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_eatom = ScatterViewHelper::value,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom); + auto a_eatom = v_eatom.template access::value>(); + + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); if (eflag_atom) { const E_FLOAT epairhalf = 0.5 * epair; - v_eatom[i] += epairhalf; - if (NEIGHFLAG != FULL) v_eatom[j] += epairhalf; + a_eatom[i] += epairhalf; + if (NEIGHFLAG != FULL) a_eatom[j] += epairhalf; } if (VFLAG) { @@ -1157,20 +1188,20 @@ void PairTersoffMODKokkos::ev_tally(EV_FLOAT &ev, const int &i, cons } if (vflag_atom) { - v_vatom(i,0) += 0.5*v0; - v_vatom(i,1) += 0.5*v1; - v_vatom(i,2) += 0.5*v2; - v_vatom(i,3) += 0.5*v3; - v_vatom(i,4) += 0.5*v4; - v_vatom(i,5) += 0.5*v5; + a_vatom(i,0) += 0.5*v0; + a_vatom(i,1) += 0.5*v1; + a_vatom(i,2) += 0.5*v2; + a_vatom(i,3) += 0.5*v3; + a_vatom(i,4) += 0.5*v4; + a_vatom(i,5) += 0.5*v5; if (NEIGHFLAG != FULL) { - v_vatom(j,0) += 0.5*v0; - v_vatom(j,1) += 0.5*v1; - v_vatom(j,2) += 0.5*v2; - v_vatom(j,3) += 0.5*v3; - v_vatom(j,4) += 0.5*v4; - v_vatom(j,5) += 0.5*v5; + a_vatom(j,0) += 0.5*v0; + a_vatom(j,1) += 0.5*v1; + a_vatom(j,2) += 0.5*v2; + a_vatom(j,3) += 0.5*v3; + a_vatom(j,4) += 0.5*v4; + a_vatom(j,5) += 0.5*v5; } } } @@ -1184,9 +1215,10 @@ KOKKOS_INLINE_FUNCTION void PairTersoffMODKokkos::v_tally3(EV_FLOAT &ev, const int &i, const int &j, const int &k, F_FLOAT *fj, F_FLOAT *fk, F_FLOAT *drij, F_FLOAT *drik) const { + // The vatom array is duplicated for OpenMP, atomic for CUDA, and neither for Serial - // The eatom and vatom arrays are atomic for Half/Thread neighbor style - Kokkos::View::value> > v_vatom = k_vatom.view(); + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); F_FLOAT v[6]; @@ -1207,13 +1239,13 @@ void PairTersoffMODKokkos::v_tally3(EV_FLOAT &ev, const int &i, cons } if (vflag_atom) { - v_vatom(i,0) += v[0]; v_vatom(i,1) += v[1]; v_vatom(i,2) += v[2]; - v_vatom(i,3) += v[3]; v_vatom(i,4) += v[4]; v_vatom(i,5) += v[5]; + a_vatom(i,0) += v[0]; a_vatom(i,1) += v[1]; a_vatom(i,2) += v[2]; + a_vatom(i,3) += v[3]; a_vatom(i,4) += v[4]; a_vatom(i,5) += v[5]; if (NEIGHFLAG != FULL) { - v_vatom(j,0) += v[0]; v_vatom(j,1) += v[1]; v_vatom(j,2) += v[2]; - v_vatom(j,3) += v[3]; v_vatom(j,4) += v[4]; v_vatom(j,5) += v[5]; - v_vatom(k,0) += v[0]; v_vatom(k,1) += v[1]; v_vatom(k,2) += v[2]; - v_vatom(k,3) += v[3]; v_vatom(k,4) += v[4]; v_vatom(k,5) += v[5]; + a_vatom(j,0) += v[0]; a_vatom(j,1) += v[1]; a_vatom(j,2) += v[2]; + a_vatom(j,3) += v[3]; a_vatom(j,4) += v[4]; a_vatom(j,5) += v[5]; + a_vatom(k,0) += v[0]; a_vatom(k,1) += v[1]; a_vatom(k,2) += v[2]; + a_vatom(k,3) += v[3]; a_vatom(k,4) += v[4]; a_vatom(k,5) += v[5]; } } diff --git a/src/KOKKOS/pair_tersoff_mod_kokkos.h b/src/KOKKOS/pair_tersoff_mod_kokkos.h index dd5efb50f1da33e7743f6c8c4d51c5e1e9086dee..d7c94ffc93e62c733b8e4e1f7035721a02f3edef 100644 --- a/src/KOKKOS/pair_tersoff_mod_kokkos.h +++ b/src/KOKKOS/pair_tersoff_mod_kokkos.h @@ -202,6 +202,14 @@ class PairTersoffMODKokkos : public PairTersoffMOD { typename ArrayTypes::t_efloat_1d d_eatom; typename ArrayTypes::t_virial_array d_vatom; + int need_dup; + Kokkos::Experimental::ScatterView dup_f; + Kokkos::Experimental::ScatterView dup_eatom; + Kokkos::Experimental::ScatterView dup_vatom; + Kokkos::Experimental::ScatterView ndup_f; + Kokkos::Experimental::ScatterView ndup_eatom; + Kokkos::Experimental::ScatterView ndup_vatom; + typedef Kokkos::DualView tdual_ffloat_2d_n7; typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread; typedef typename tdual_ffloat_2d_n7::t_host t_host_ffloat_2d_n7; diff --git a/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp b/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp index 2fb9675db60efa9b5ebda7e81dee5e1271d021fd..f51da2afde8779e2898ca2cdb1be9a68c94618e3 100644 --- a/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp @@ -214,6 +214,17 @@ void PairTersoffZBLKokkos::compute(int eflag_in, int vflag_in) d_neighbors = k_list->d_neighbors; d_ilist = k_list->d_ilist; + need_dup = lmp->kokkos->need_dup(); + if (need_dup) { + dup_f = Kokkos::Experimental::create_scatter_view(f); + dup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + dup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } else { + ndup_f = Kokkos::Experimental::create_scatter_view(f); + ndup_eatom = Kokkos::Experimental::create_scatter_view(d_eatom); + ndup_vatom = Kokkos::Experimental::create_scatter_view(d_vatom); + } + copymode = 1; EV_FLOAT ev; @@ -257,6 +268,9 @@ void PairTersoffZBLKokkos::compute(int eflag_in, int vflag_in) ev_all += ev; } + if (need_dup) + Kokkos::Experimental::contribute(f, dup_f); + if (eflag_global) eng_vdwl += ev_all.evdwl; if (vflag_global) { virial[0] += ev_all.v[0]; @@ -268,11 +282,15 @@ void PairTersoffZBLKokkos::compute(int eflag_in, int vflag_in) } if (eflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_eatom, dup_eatom); k_eatom.template modify(); k_eatom.template sync(); } if (vflag_atom) { + if (need_dup) + Kokkos::Experimental::contribute(d_vatom, dup_vatom); k_vatom.template modify(); k_vatom.template sync(); } @@ -280,6 +298,13 @@ void PairTersoffZBLKokkos::compute(int eflag_in, int vflag_in) if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; + + // free duplicated memory + if (need_dup) { + dup_f = decltype(dup_f)(); + dup_eatom = decltype(dup_eatom)(); + dup_vatom = decltype(dup_vatom)(); + } } /* ---------------------------------------------------------------------- */ @@ -318,8 +343,10 @@ template KOKKOS_INLINE_FUNCTION void PairTersoffZBLKokkos::operator()(TagPairTersoffZBLComputeHalf, const int &ii, EV_FLOAT& ev) const { - // The f array is atomic for Half/Thread neighbor style - Kokkos::View::value> > a_f = f; + // The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_f = ScatterViewHelper::value,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); + auto a_f = v_f.template access::value>(); const int i = d_ilist[ii]; if (i >= nlocal) return; @@ -1214,14 +1241,18 @@ void PairTersoffZBLKokkos::ev_tally(EV_FLOAT &ev, const int &i, cons { const int VFLAG = vflag_either; - // The eatom and vatom arrays are atomic for Half/Thread neighbor style - Kokkos::View::value> > v_eatom = k_eatom.view(); - Kokkos::View::value> > v_vatom = k_vatom.view(); + // The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial + + auto v_eatom = ScatterViewHelper::value,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom); + auto a_eatom = v_eatom.template access::value>(); + + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); if (eflag_atom) { const E_FLOAT epairhalf = 0.5 * epair; - v_eatom[i] += epairhalf; - if (NEIGHFLAG != FULL) v_eatom[j] += epairhalf; + a_eatom[i] += epairhalf; + if (NEIGHFLAG != FULL) a_eatom[j] += epairhalf; } if (VFLAG) { @@ -1251,20 +1282,20 @@ void PairTersoffZBLKokkos::ev_tally(EV_FLOAT &ev, const int &i, cons } if (vflag_atom) { - v_vatom(i,0) += 0.5*v0; - v_vatom(i,1) += 0.5*v1; - v_vatom(i,2) += 0.5*v2; - v_vatom(i,3) += 0.5*v3; - v_vatom(i,4) += 0.5*v4; - v_vatom(i,5) += 0.5*v5; + a_vatom(i,0) += 0.5*v0; + a_vatom(i,1) += 0.5*v1; + a_vatom(i,2) += 0.5*v2; + a_vatom(i,3) += 0.5*v3; + a_vatom(i,4) += 0.5*v4; + a_vatom(i,5) += 0.5*v5; if (NEIGHFLAG != FULL) { - v_vatom(j,0) += 0.5*v0; - v_vatom(j,1) += 0.5*v1; - v_vatom(j,2) += 0.5*v2; - v_vatom(j,3) += 0.5*v3; - v_vatom(j,4) += 0.5*v4; - v_vatom(j,5) += 0.5*v5; + a_vatom(j,0) += 0.5*v0; + a_vatom(j,1) += 0.5*v1; + a_vatom(j,2) += 0.5*v2; + a_vatom(j,3) += 0.5*v3; + a_vatom(j,4) += 0.5*v4; + a_vatom(j,5) += 0.5*v5; } } } @@ -1278,9 +1309,10 @@ KOKKOS_INLINE_FUNCTION void PairTersoffZBLKokkos::v_tally3(EV_FLOAT &ev, const int &i, const int &j, const int &k, F_FLOAT *fj, F_FLOAT *fk, F_FLOAT *drij, F_FLOAT *drik) const { + // The vatom array is duplicated for OpenMP, atomic for CUDA, and neither for Serial - // The eatom and vatom arrays are atomic for Half/Thread neighbor style - Kokkos::View::value> > v_vatom = k_vatom.view(); + auto v_vatom = ScatterViewHelper::value,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom); + auto a_vatom = v_vatom.template access::value>(); F_FLOAT v[6]; @@ -1301,13 +1333,13 @@ void PairTersoffZBLKokkos::v_tally3(EV_FLOAT &ev, const int &i, cons } if (vflag_atom) { - v_vatom(i,0) += v[0]; v_vatom(i,1) += v[1]; v_vatom(i,2) += v[2]; - v_vatom(i,3) += v[3]; v_vatom(i,4) += v[4]; v_vatom(i,5) += v[5]; + a_vatom(i,0) += v[0]; a_vatom(i,1) += v[1]; a_vatom(i,2) += v[2]; + a_vatom(i,3) += v[3]; a_vatom(i,4) += v[4]; a_vatom(i,5) += v[5]; if (NEIGHFLAG != FULL) { - v_vatom(j,0) += v[0]; v_vatom(j,1) += v[1]; v_vatom(j,2) += v[2]; - v_vatom(j,3) += v[3]; v_vatom(j,4) += v[4]; v_vatom(j,5) += v[5]; - v_vatom(k,0) += v[0]; v_vatom(k,1) += v[1]; v_vatom(k,2) += v[2]; - v_vatom(k,3) += v[3]; v_vatom(k,4) += v[4]; v_vatom(k,5) += v[5]; + a_vatom(j,0) += v[0]; a_vatom(j,1) += v[1]; a_vatom(j,2) += v[2]; + a_vatom(j,3) += v[3]; a_vatom(j,4) += v[4]; a_vatom(j,5) += v[5]; + a_vatom(k,0) += v[0]; a_vatom(k,1) += v[1]; a_vatom(k,2) += v[2]; + a_vatom(k,3) += v[3]; a_vatom(k,4) += v[4]; a_vatom(k,5) += v[5]; } } diff --git a/src/KOKKOS/pair_tersoff_zbl_kokkos.h b/src/KOKKOS/pair_tersoff_zbl_kokkos.h index 45982bd420b5b860291a54e29ecf0f9f79581063..3af4e0d8ebd410c9d18ff717340fd32e767c589c 100644 --- a/src/KOKKOS/pair_tersoff_zbl_kokkos.h +++ b/src/KOKKOS/pair_tersoff_zbl_kokkos.h @@ -207,6 +207,14 @@ class PairTersoffZBLKokkos : public PairTersoffZBL { typename ArrayTypes::t_efloat_1d d_eatom; typename ArrayTypes::t_virial_array d_vatom; + int need_dup; + Kokkos::Experimental::ScatterView dup_f; + Kokkos::Experimental::ScatterView dup_eatom; + Kokkos::Experimental::ScatterView dup_vatom; + Kokkos::Experimental::ScatterView ndup_f; + Kokkos::Experimental::ScatterView ndup_eatom; + Kokkos::Experimental::ScatterView ndup_vatom; + typedef Kokkos::DualView tdual_ffloat_2d_n7; typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread; typedef typename tdual_ffloat_2d_n7::t_host t_host_ffloat_2d_n7; diff --git a/src/KSPACE/msm.cpp b/src/KSPACE/msm.cpp index 9f3221449bb2329923cfa9ed987beb6f26e58e3f..efa2c87296dbd1a78ec7ffba150adb583e39acb2 100644 --- a/src/KSPACE/msm.cpp +++ b/src/KSPACE/msm.cpp @@ -177,7 +177,7 @@ void MSM::init() if (sizeof(FFT_SCALAR) != 8) error->all(FLERR,"Cannot (yet) use single precision with MSM " - "(remove -DFFT_SINGLE from Makefile and recompile)"); + "(remove -DFFT_SINGLE from Makefile and re-compile)"); // extract short-range Coulombic cutoff from pair style @@ -419,7 +419,7 @@ void MSM::setup() boxlo = domain->boxlo_lamda; // ghost grid points depend on direct sum interaction limits, - // so need to recompute local grid + // so need to re-compute local grid set_grid_local(); diff --git a/src/KSPACE/pair_coul_long.cpp b/src/KSPACE/pair_coul_long.cpp index 4b10782ee646c23268fb5603cacb3f730336f1ba..8db5979b39378db0d66053651f5a08f8af875241 100644 --- a/src/KSPACE/pair_coul_long.cpp +++ b/src/KSPACE/pair_coul_long.cpp @@ -338,9 +338,9 @@ void PairCoulLong::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairCoulLong::single(int i, int j, int itype, int jtype, +double PairCoulLong::single(int i, int j, int /*itype*/, int /*jtype*/, double rsq, - double factor_coul, double factor_lj, + double factor_coul, double /*factor_lj*/, double &fforce) { double r2inv,r,grij,expm2,t,erfc,prefactor; diff --git a/src/KSPACE/pair_coul_msm.cpp b/src/KSPACE/pair_coul_msm.cpp index f5cd9a04452a2a6c16a03e15527c47c331d11913..ab59dfa4c1bb69f551b5aa0672dd20e485e913c0 100644 --- a/src/KSPACE/pair_coul_msm.cpp +++ b/src/KSPACE/pair_coul_msm.cpp @@ -169,9 +169,9 @@ void PairCoulMSM::compute(int eflag, int vflag) /* ---------------------------------------------------------------------- */ -double PairCoulMSM::single(int i, int j, int itype, int jtype, +double PairCoulMSM::single(int i, int j, int /*itype*/, int /*jtype*/, double rsq, - double factor_coul, double factor_lj, + double factor_coul, double /*factor_lj*/, double &fforce) { double r2inv,r,egamma,fgamma,prefactor; diff --git a/src/KSPACE/pppm_disp.cpp b/src/KSPACE/pppm_disp.cpp index aea57da326e7f75b15a23ad3945a552f3eb56be9..b8cd52c5fef758eb398b9204cd7befa7a2c5dd1c 100644 --- a/src/KSPACE/pppm_disp.cpp +++ b/src/KSPACE/pppm_disp.cpp @@ -8052,7 +8052,7 @@ void PPPMDisp::compute_rho_coeff(FFT_SCALAR **coeff , FFT_SCALAR **dcoeff, extended to non-neutral systems (J. Chem. Phys. 131, 094107). ------------------------------------------------------------------------- */ -void PPPMDisp::slabcorr(int eflag) +void PPPMDisp::slabcorr(int /*eflag*/) { // compute local contribution to global dipole moment diff --git a/src/KSPACE/remap.cpp b/src/KSPACE/remap.cpp index 81dd692f4f91a44cebfdf68ab2ca79d8d37f0973..26541f121e0f735e1b094d2e19edbdd5a68764b9 100644 --- a/src/KSPACE/remap.cpp +++ b/src/KSPACE/remap.cpp @@ -234,7 +234,7 @@ struct remap_plan_3d *remap_3d_create_plan( int in_klo, int in_khi, int out_ilo, int out_ihi, int out_jlo, int out_jhi, int out_klo, int out_khi, - int nqty, int permute, int memory, int precision, int usecollective) + int nqty, int permute, int memory, int /*precision*/, int usecollective) { diff --git a/src/LATTE/fix_latte.cpp b/src/LATTE/fix_latte.cpp index 18502dd0138d56fc6ebe73fa1f37461e5357c848..a89be57beda1419af68bad20e494bfa6d26a3bf9 100644 --- a/src/LATTE/fix_latte.cpp +++ b/src/LATTE/fix_latte.cpp @@ -189,7 +189,7 @@ void FixLatte::init() /* ---------------------------------------------------------------------- */ -void FixLatte::init_list(int id, NeighList *ptr) +void FixLatte::init_list(int /*id*/, NeighList * /*ptr*/) { // list = ptr; } @@ -223,13 +223,13 @@ void FixLatte::setup_pre_reverse(int eflag, int vflag) integrate electronic degrees of freedom ------------------------------------------------------------------------- */ -void FixLatte::initial_integrate(int vflag) {} +void FixLatte::initial_integrate(int /*vflag*/) {} /* ---------------------------------------------------------------------- store eflag, so can use it in post_force to tally per-atom energies ------------------------------------------------------------------------- */ -void FixLatte::pre_reverse(int eflag, int vflag) +void FixLatte::pre_reverse(int eflag, int /*vflag*/) { eflag_caller = eflag; } diff --git a/src/MANYBODY/fix_qeq_comb.cpp b/src/MANYBODY/fix_qeq_comb.cpp index b8d9c7e6dfb7b0c739f5195e538f7c4c399625db..7146ee9d65e2d597ae6da9c77b7b3dd89a7cf4ce 100644 --- a/src/MANYBODY/fix_qeq_comb.cpp +++ b/src/MANYBODY/fix_qeq_comb.cpp @@ -67,7 +67,7 @@ FixQEQComb::FixQEQComb(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), fp = fopen(arg[iarg+1],"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix qeq/comb file %s",arg[iarg+1]); + snprintf(str,128,"Cannot open fix qeq/comb file %s",arg[iarg+1]); error->one(FLERR,str); } } @@ -159,7 +159,7 @@ void FixQEQComb::min_post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixQEQComb::post_force(int vflag) +void FixQEQComb::post_force(int /*vflag*/) { int i,ii,iloop,loopmax,inum,*ilist; double heatpq,qmass,dtq,dtq2; @@ -276,7 +276,7 @@ void FixQEQComb::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixQEQComb::post_force_respa(int vflag, int ilevel, int iloop) +void FixQEQComb::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } @@ -293,7 +293,7 @@ double FixQEQComb::memory_usage() /* ---------------------------------------------------------------------- */ int FixQEQComb::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/MANYBODY/pair_adp.cpp b/src/MANYBODY/pair_adp.cpp index d0b4d197583d260ccf42592dbb7b5921b0384d9d..7b48522e84931349e3bc2985f67a81bc246f2fbe 100644 --- a/src/MANYBODY/pair_adp.cpp +++ b/src/MANYBODY/pair_adp.cpp @@ -424,7 +424,7 @@ void PairADP::allocate() global settings ------------------------------------------------------------------------- */ -void PairADP::settings(int narg, char **arg) +void PairADP::settings(int narg, char **/*arg*/) { if (narg > 0) error->all(FLERR,"Illegal pair_style command"); } @@ -521,7 +521,7 @@ void PairADP::init_style() init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairADP::init_one(int i, int j) +double PairADP::init_one(int /*i*/, int /*j*/) { // single global cutoff = max of cut from all files read in // for funcfl could be multiple files @@ -551,7 +551,7 @@ void PairADP::read_file(char *filename) fp = force->open_potential(filename); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open ADP potential file %s",filename); + snprintf(str,128,"Cannot open ADP potential file %s",filename); error->one(FLERR,str); } } @@ -935,7 +935,7 @@ void PairADP::grab(FILE *fp, int n, double *list) /* ---------------------------------------------------------------------- */ int PairADP::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/MANYBODY/pair_airebo.cpp b/src/MANYBODY/pair_airebo.cpp index 3be27354c15c46929e4700e8f453f2f1cce45c5e..067eb1634fe34d59bd0764aae9b3437e426ca5fb 100644 --- a/src/MANYBODY/pair_airebo.cpp +++ b/src/MANYBODY/pair_airebo.cpp @@ -425,7 +425,7 @@ void PairAIREBO::REBO_neigh() REBO forces and energy ------------------------------------------------------------------------- */ -void PairAIREBO::FREBO(int eflag, int vflag) +void PairAIREBO::FREBO(int eflag, int /*vflag*/) { int i,j,k,m,ii,inum,itype,jtype; tagint itag,jtag; @@ -524,7 +524,7 @@ void PairAIREBO::FREBO(int eflag, int vflag) find 3- and 4-step paths between atoms I,J via REBO neighbor lists ------------------------------------------------------------------------- */ -void PairAIREBO::FLJ(int eflag, int vflag) +void PairAIREBO::FLJ(int eflag, int /*vflag*/) { int i,j,k,m,ii,jj,kk,mm,inum,jnum,itype,jtype,ktype,mtype; int atomi,atomj,atomk,atomm; @@ -893,7 +893,7 @@ void PairAIREBO::FLJ(int eflag, int vflag) torsional forces and energy ------------------------------------------------------------------------- */ -void PairAIREBO::TORSION(int eflag, int vflag) +void PairAIREBO::TORSION(int eflag, int /*vflag*/) { int i,j,k,l,ii,inum; tagint itag,jtag; @@ -2116,7 +2116,7 @@ but of the vector r_ij. */ -double PairAIREBO::bondorderLJ(int i, int j, double rij_mod[3], double rijmag_mod, +double PairAIREBO::bondorderLJ(int i, int j, double /*rij_mod*/[3], double rijmag_mod, double VA, double rij[3], double rijmag, double **f, int vflag_atom) { @@ -3373,9 +3373,9 @@ void PairAIREBO::read_file(char *filename) if (fp == NULL) { char str[128]; if (morseflag) - sprintf(str,"Cannot open AIREBO-M potential file %s",filename); + snprintf(str,128,"Cannot open AIREBO-M potential file %s",filename); else - sprintf(str,"Cannot open AIREBO potential file %s",filename); + snprintf(str,128,"Cannot open AIREBO potential file %s",filename); error->one(FLERR,str); } diff --git a/src/MANYBODY/pair_atm.cpp b/src/MANYBODY/pair_atm.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a6e52faeba2428c41681d4ee060aa4dd0d4ea088 --- /dev/null +++ b/src/MANYBODY/pair_atm.cpp @@ -0,0 +1,374 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Sergey Lishchuk +------------------------------------------------------------------------- */ + +#include +#include "pair_atm.h" +#include "atom.h" +#include "citeme.h" +#include "comm.h" +#include "error.h" +#include "force.h" +#include "memory.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" + +using namespace LAMMPS_NS; + +static const char cite_atm_package[] = + "ATM package:\n\n" + "@Article{Lishchuk:2012:164501,\n" + " author = {S. V. Lishchuk},\n" + " title = {Role of three-body interactions in formation of bulk viscosity in liquid argon},\n" + " journal = {J.~Chem.~Phys.},\n" + " year = 2012,\n" + " volume = 136,\n" + " pages = {164501}\n" + "}\n\n"; + +/* ---------------------------------------------------------------------- */ + +PairATM::PairATM(LAMMPS *lmp) : Pair(lmp) +{ + if (lmp->citeme) lmp->citeme->add(cite_atm_package); + + single_enable = 0; + restartinfo = 1; + one_coeff = 0; + manybody_flag = 1; +} + +/* ---------------------------------------------------------------------- + check if allocated, since class can be destructed when incomplete +------------------------------------------------------------------------- */ + +PairATM::~PairATM() +{ + if (copymode) return; + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + + memory->destroy(nu); + } +} + +/* ---------------------------------------------------------------------- + workhorse routine that computes pairwise interactions +------------------------------------------------------------------------- */ + +void PairATM::compute(int eflag, int vflag) +{ + int i,j,k,ii,jj,kk,inum,jnum,jnumm1; + double xi,yi,zi,evdwl; + double rij2,rik2,rjk2; + double rij[3],rik[3],rjk[3],fj[3],fk[3]; + double nu_local; + int *ilist,*jlist,*numneigh,**firstneigh; + + evdwl = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + int *type = atom->type; + + double cutoff_squared = cut_global*cut_global; + double triple = cut_triple*cut_triple*cut_triple; + double cutoff_triple_sixth = triple*triple; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // triple loop over local atoms and neighbors twice + // must compute each IJK triplet interaction exactly once + // by proc that owns the triplet atom with smallest x coord + // special logic to break ties if multiple atoms have same x or y coords + // inner two loops for jj=1,Jnum and kk=jj+1,Jnum insure + // the pair of other 2 non-minimum-x atoms is only considered once + // triplet geometry criteria for calculation: + // each pair distance <= cutoff + // produce of 3 pair distances <= cutoff_triple^3 + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xi = x[i][0]; + yi = x[i][1]; + zi = x[i][2]; + + jlist = firstneigh[i]; + jnum = numneigh[i]; + jnumm1 = jnum - 1; + + for (jj = 0; jj < jnumm1; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + + rij[0] = x[j][0] - xi; + if (rij[0] < 0.0) continue; + rij[1] = x[j][1] - yi; + if (rij[0] == 0.0 and rij[1] < 0.0) continue; + rij[2] = x[j][2] - zi; + if (rij[0] == 0.0 and rij[1] == 0.0 and rij[2] < 0.0) continue; + rij2 = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + if (rij2 > cutoff_squared) continue; + + for (kk = jj+1; kk < jnum; kk++) { + k = jlist[kk]; + k &= NEIGHMASK; + + rik[0] = x[k][0] - xi; + if (rik[0] < 0.0) continue; + rik[1] = x[k][1] - yi; + if (rik[0] == 0.0 and rik[1] < 0.0) continue; + rik[2] = x[k][2] - zi; + if (rik[0] == 0.0 and rik[1] == 0.0 and rik[2] < 0.0) continue; + rik2 = rik[0]*rik[0] + rik[1]*rik[1] + rik[2]*rik[2]; + if (rik2 > cutoff_squared) continue; + + rjk[0] = x[k][0] - x[j][0]; + rjk[1] = x[k][1] - x[j][1]; + rjk[2] = x[k][2] - x[j][2]; + rjk2 = rjk[0]*rjk[0] + rjk[1]*rjk[1] + rjk[2]*rjk[2]; + if (rjk2 > cutoff_squared) continue; + + double r6 = rij2*rjk2*rik2; + if (r6 > cutoff_triple_sixth) continue; + + nu_local = nu[type[i]][type[j]][type[k]]; + if (nu_local == 0.0) continue; + + interaction_ddd(nu_local, + r6,rij2,rik2,rjk2,rij,rik,rjk,fj,fk,eflag,evdwl); + + f[i][0] -= fj[0] + fk[0]; + f[i][1] -= fj[1] + fk[1]; + f[i][2] -= fj[2] + fk[2]; + f[j][0] += fj[0]; + f[j][1] += fj[1]; + f[j][2] += fj[2]; + f[k][0] += fk[0]; + f[k][1] += fk[1]; + f[k][2] += fk[2]; + + if (evflag) ev_tally3(i,j,k,evdwl,0.0,fj,fk,rij,rik); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- */ + +void PairATM::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + + memory->create(nu,n+1,n+1,n+1,"pair:nu"); + + // initialize all nu values to 0.0 + + for (int i = 1; i <= n; i++) + for (int j = 1; j <= n; j++) + for (int k = 1; k <= n; k++) + nu[i][j][k] = 0.0; +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairATM::settings(int narg, char **arg) +{ + if (narg != 2) error->all(FLERR,"Illegal pair_style command"); + + cut_global = force->numeric(FLERR,arg[0]); + cut_triple = force->numeric(FLERR,arg[1]); +} + +/* ---------------------------------------------------------------------- + set coefficients for one I,J,K type triplet +------------------------------------------------------------------------- */ + +void PairATM::coeff(int narg, char **arg) +{ + if (narg != 4) error->all(FLERR,"Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi,klo,khi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + force->bounds(FLERR,arg[2],atom->ntypes,klo,khi); + + double nu_one = force->numeric(FLERR,arg[3]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j<=jhi; j++) { + for (int k = MAX(klo,j); k<=khi; k++) { + nu[i][j][k] = nu_one; + count++; + } + setflag[i][j] = 1; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairATM::init_style() +{ + if (force->newton_pair == 0) + error->all(FLERR,"Pair style ATM requires newton pair on"); + + // need a full neighbor list + + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; +} + +/* ---------------------------------------------------------------------- + init for one i,j type pair and corresponding j,i + also for all k type permutations +------------------------------------------------------------------------- */ + +double PairATM::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + + // set all 6 symmetric permutations of I,J,K types to same nu value + + int ntypes = atom->ntypes; + for (int k = j; k <= ntypes; k++) + nu[i][k][j] = nu[j][i][k] = nu[j][k][i] = nu[k][i][j] = nu[k][j][i] = + nu[i][j][k]; + + return cut_global; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairATM::write_restart(FILE *fp) +{ + write_restart_settings(fp); + + int i,j,k; + for (i = 1; i <= atom->ntypes; i++) { + for (j = i; j <= atom->ntypes; j++) { + fwrite(&setflag[i][j],sizeof(int),1,fp); + if (setflag[i][j]) + for (k = j; k <= atom->ntypes; k++) + fwrite(&nu[i][j][k],sizeof(double),1,fp); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairATM::read_restart(FILE *fp) +{ + read_restart_settings(fp); + allocate(); + + int i,j,k; + int me = comm->me; + for (i = 1; i <= atom->ntypes; i++) { + for (j = i; j <= atom->ntypes; j++) { + if (me == 0) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) for (k = j; k <= atom->ntypes; k++) { + if (me == 0) fread(&nu[i][j][k],sizeof(double),1,fp); + MPI_Bcast(&nu[i][j][k],1,MPI_DOUBLE,0,world); + } + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairATM::write_restart_settings(FILE *fp) +{ + fwrite(&cut_global,sizeof(double),1,fp); + fwrite(&cut_triple,sizeof(double),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairATM::read_restart_settings(FILE *fp) +{ + int me = comm->me; + if (me == 0) { + fread(&cut_global,sizeof(double),1,fp); + fread(&cut_triple,sizeof(double),1,fp); + } + MPI_Bcast(&cut_global,1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut_triple,1,MPI_DOUBLE,0,world); +} + +/* ---------------------------------------------------------------------- + Axilrod-Teller-Muto (dipole-dipole-dipole) potential +------------------------------------------------------------------------- */ + +void PairATM::interaction_ddd(double nu, double r6, + double rij2, double rik2, double rjk2, + double *rij, double *rik, double *rjk, + double *fj, double *fk, int eflag, double &eng) +{ + double r5inv,rri,rrj,rrk,rrr; + r5inv = nu / (r6*r6*sqrt(r6)); + rri = rik[0]*rij[0] + rik[1]*rij[1] + rik[2]*rij[2]; + rrj = rij[0]*rjk[0] + rij[1]*rjk[1] + rij[2]*rjk[2]; + rrk = rjk[0]*rik[0] + rjk[1]*rik[1] + rjk[2]*rik[2]; + rrr = 5.0*rri*rrj*rrk; + for (int i = 0; i < 3; i++) { + fj[i] = rrj*(rrk - rri)*rik[i] - + (rrk*rri - rjk2*rik2 + rrr/rij2) * rij[i] + + (rrk*rri - rik2*rij2 + rrr/rjk2) * rjk[i]; + fj[i] *= 3.0*r5inv; + fk[i] = rrk*(rri + rrj)*rij[i] + + (rri*rrj + rik2*rij2 - rrr/rjk2) * rjk[i] + + (rri*rrj + rij2*rjk2 - rrr/rik2) * rik[i]; + fk[i] *= 3.0*r5inv; + } + if (eflag) eng = (r6 - 0.6*rrr)*r5inv; +} diff --git a/src/MANYBODY/pair_atm.h b/src/MANYBODY/pair_atm.h new file mode 100644 index 0000000000000000000000000000000000000000..70883a81c76fa62fd05ae6aa4d1d1df9572da845 --- /dev/null +++ b/src/MANYBODY/pair_atm.h @@ -0,0 +1,77 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS + +PairStyle(atm,PairATM) + +#else + +#ifndef LMP_PAIR_ATM_H +#define LMP_PAIR_ATM_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairATM : public Pair { + public: + PairATM(class LAMMPS *); + virtual ~PairATM(); + virtual void compute(int, int); + void settings(int, char **); + virtual void coeff(int, char **); + virtual void init_style(); + virtual double init_one(int, int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_restart_settings(FILE *); + void read_restart_settings(FILE *); + + protected: + double cut_global,cut_triple; + double ***nu; + + void allocate(); + void interaction_ddd(double, double, double, double, double, double *, + double *, double *, double *, double *, int, double &); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal pair_style command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair style ATM requires newton pair on + +See the newton command. This is a restriction to use the ATM +potential. + +E: All pair coeffs are not set + +All pair coefficients must be set in the data file or by the +pair_coeff command before running a simulation. + +*/ diff --git a/src/MANYBODY/pair_bop.cpp b/src/MANYBODY/pair_bop.cpp index 87a23dff99c4c16bd88fd68101f0b0103f08ab39..ca0f229068ef1bbb9bf9a3c5cfbee0842585e62b 100644 --- a/src/MANYBODY/pair_bop.cpp +++ b/src/MANYBODY/pair_bop.cpp @@ -4976,7 +4976,7 @@ void PairBOP::read_table(char *filename) FILE *fp = force->open_potential(filename); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open BOP potential file %s",filename); + snprintf(str,128,"Cannot open BOP potential file %s",filename); error->one(FLERR,str); } fgets(s,MAXLINE,fp); // skip first comment line @@ -5079,7 +5079,7 @@ void PairBOP::read_table(char *filename) FILE *fp = force->open_potential(filename); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open BOP potential file %s",filename); + snprintf(str,128,"Cannot open BOP potential file %s",filename); error->one(FLERR,str); } fgets(s,MAXLINE,fp); // skip first comment line diff --git a/src/MANYBODY/pair_comb.cpp b/src/MANYBODY/pair_comb.cpp index de686d4bcf5e68ebf9dedaf9aacc72dd3a3e8c65..85ea4812bfea4399179bb5bb918ce24281badc5c 100644 --- a/src/MANYBODY/pair_comb.cpp +++ b/src/MANYBODY/pair_comb.cpp @@ -432,7 +432,7 @@ void PairComb::allocate() global settings ------------------------------------------------------------------------- */ -void PairComb::settings(int narg, char **arg) +void PairComb::settings(int narg, char **/*arg*/) { if (narg > 0) error->all(FLERR,"Illegal pair_style command"); } @@ -597,7 +597,7 @@ void PairComb::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open COMB potential file %s",file); + snprintf(str,128,"Cannot open COMB potential file %s",file); error->one(FLERR,str); } } @@ -1542,7 +1542,7 @@ void PairComb::potal_calc(double &calc1, double &calc2, double &calc3) void PairComb::tri_point(double rsq, int &mr1, int &mr2, int &mr3, double &sr1, double &sr2, - double &sr3, int &itype) + double &sr3, int &/*itype*/) { double r, rin, dr, dd, rr1, rridr, rridr2; @@ -1572,7 +1572,7 @@ void PairComb::tri_point(double rsq, int &mr1, int &mr2, void PairComb::direct(int inty, int mr1, int mr2, int mr3, double rsq, double sr1, double sr2, double sr3, double iq, double jq, - double potal, double fac11, double fac11e, + double /*potal*/, double fac11, double fac11e, double &pot_tmp, double &pot_d) { double r,erfcc,fafbn1,potij,sme2,esucon; @@ -2002,7 +2002,7 @@ void PairComb::Over_cor(Param *param, double rsq1, int NCoi, /* ---------------------------------------------------------------------- */ int PairComb::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/MANYBODY/pair_comb3.cpp b/src/MANYBODY/pair_comb3.cpp index b4f9c02206f926d39307b19317bd7e00b9cd16eb..106b83eebae9af0987af3457532c4e6a74cd942a 100644 --- a/src/MANYBODY/pair_comb3.cpp +++ b/src/MANYBODY/pair_comb3.cpp @@ -320,11 +320,7 @@ void PairComb3::read_lib() if (comm->me == 0) { FILE *fp = force->open_potential("lib.comb3"); - if (fp == NULL) { - char str[128]; - sprintf(str,"Cannot open COMB3 lib.comb3 file"); - error->one(FLERR,str); - } + if (fp == NULL) error->one(FLERR,"Cannot open COMB3 lib.comb3 file"); // read and store at the same time fgets(s,MAXLIB,fp); @@ -607,7 +603,7 @@ void PairComb3::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open COMB3 potential file %s",file); + snprintf(str,128,"Cannot open COMB3 potential file %s",file); error->one(FLERR,str); } } @@ -1569,7 +1565,7 @@ void PairComb3::compute(int eflag, int vflag) /* ---------------------------------------------------------------------- */ void PairComb3::repulsive(Param *parami, Param *paramj, double rsq, - double &fforce,int eflag, double &eng, double iq, double jq) + double &fforce,int /*eflag*/, double &eng, double iq, double jq) { double r,tmp_fc,tmp_fc_d,Di,Dj; double caj,vrcs,fvrcs; @@ -1614,7 +1610,7 @@ void PairComb3::repulsive(Param *parami, Param *paramj, double rsq, /* ---------------------------------------------------------------------- */ double PairComb3::zeta(Param *parami, Param *paramj, double rsqij, - double rsqik, double *delrij, double *delrik, int i, double xcn) + double rsqik, double *delrij, double *delrik, int /*i*/, double xcn) { double rij,rik,costheta,arg,ex_delr,rlm3; @@ -1661,7 +1657,7 @@ void PairComb3::selfp6p(Param *parami, Param *paramj, double rsq, /* ---------------------------------------------------------------------- */ double PairComb3::ep6p(Param *paramj, Param *paramk, double rsqij, double rsqik, - double *delrij, double *delrik , double &zet_add) + double *delrij, double *delrik , double &/*zet_add*/) { double comtt; double pplp0 = paramj->p6p0; @@ -2109,7 +2105,7 @@ void PairComb3::coord(Param *param, double r, int i, void PairComb3::cntri_int(int tri_flag, double xval, double yval, double zval, int ixmin, int iymin, int izmin, double &vval, - double &dvalx, double &dvaly, double &dvalz, Param *param) + double &dvalx, double &dvaly, double &dvalz, Param * /*param*/) { double x; vval = 0.0; dvalx = 0.0; dvaly = 0.0; dvalz = 0.0; @@ -2254,7 +2250,7 @@ void PairComb3::comb_gijk_d(double costheta, Param *param, double nco_tmp, void PairComb3::attractive(Param *parami, Param *paramj , Param *paramk, double prefac_ij1, double prefac_ij2, double prefac_ij3, double prefac_ij4, double prefac_ij5, double rsqij, double rsqik, double *delrij, - double *delrik, double *fi, double *fj,double *fk, int i, double xcn) + double *delrik, double *fi, double *fj,double *fk, int /*i*/, double xcn) { double rij_hat[3],rik_hat[3]; double rij,rijinv,rik,rikinv; @@ -2867,7 +2863,7 @@ void PairComb3::field(Param *parami, Param *paramj, double rsq, double iq, /* ---------------------------------------------------------------------- */ -double PairComb3::rad_init(double rsq2,Param *param,int i, +double PairComb3::rad_init(double rsq2,Param *param,int /*i*/, double &radtot, double cnconj) { double r, fc1k, radcut; @@ -2882,7 +2878,7 @@ double PairComb3::rad_init(double rsq2,Param *param,int i, /* ---------------------------------------------------------------------- */ void PairComb3::rad_calc(double r, Param *parami, Param *paramj, - double kconjug, double lconjug, int i, int j, double xcn, double ycn) + double kconjug, double lconjug, int /*i*/, int /*j*/, double xcn, double ycn) { int ixmin, iymin, izmin; int radindx; @@ -3061,7 +3057,7 @@ double PairComb3::bbtor1(int torindx, Param *paramk, Param *paraml, /* ---------------------------------------------------------------------- */ void PairComb3::tor_calc(double r, Param *parami, Param *paramj, - double kconjug, double lconjug, int i, int j, double xcn, double ycn) + double kconjug, double lconjug, int /*i*/, int /*j*/, double xcn, double ycn) { int ixmin, iymin, izmin; double vtor, dtorx, dtory, dtorz; @@ -3589,7 +3585,7 @@ void PairComb3::qfo_dipole(double fac11, int mr1, int mr2, int mr3, void PairComb3::qfo_short(Param *parami, Param *paramj, double rsq, double iq, double jq, double &fqij, double &fqji, - int i, int j, int nj) + int i, int /*j*/, int nj) { double r, tmp_fc; double Di, Dj, dDi, dDj, Bsi, Bsj, dBsi, dBsj; @@ -3863,7 +3859,7 @@ double PairComb3::switching_d(double rr) /* ---------------------------------------------------------------------- */ int PairComb3::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/MANYBODY/pair_eam.cpp b/src/MANYBODY/pair_eam.cpp index 9e70b19eea753ee8174808c5e063390123f6ba47..f4b4901075b02855452ace12a1ba45ec5d2f3e6f 100644 --- a/src/MANYBODY/pair_eam.cpp +++ b/src/MANYBODY/pair_eam.cpp @@ -347,7 +347,7 @@ void PairEAM::allocate() global settings ------------------------------------------------------------------------- */ -void PairEAM::settings(int narg, char **arg) +void PairEAM::settings(int narg, char **/*arg*/) { if (narg > 0) error->all(FLERR,"Illegal pair_style command"); } @@ -460,7 +460,7 @@ void PairEAM::read_file(char *filename) fptr = force->open_potential(filename); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); + snprintf(str,128,"Cannot open EAM potential file %s",filename); error->one(FLERR,str); } } @@ -795,7 +795,7 @@ void PairEAM::grab(FILE *fptr, int n, double *list) /* ---------------------------------------------------------------------- */ double PairEAM::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, + double rsq, double /*factor_coul*/, double /*factor_lj*/, double &fforce) { int m; @@ -829,7 +829,7 @@ double PairEAM::single(int i, int j, int itype, int jtype, /* ---------------------------------------------------------------------- */ int PairEAM::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/MANYBODY/pair_eam_alloy.cpp b/src/MANYBODY/pair_eam_alloy.cpp index eed38f79e9f75c9a258dec18edff32307dbdfaf9..c004030240a2925733abba3a1d6b7e8a98e4e82c 100644 --- a/src/MANYBODY/pair_eam_alloy.cpp +++ b/src/MANYBODY/pair_eam_alloy.cpp @@ -127,7 +127,7 @@ void PairEAMAlloy::read_file(char *filename) fptr = force->open_potential(filename); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); + snprintf(str,128,"Cannot open EAM potential file %s",filename); error->one(FLERR,str); } } diff --git a/src/MANYBODY/pair_eam_cd.cpp b/src/MANYBODY/pair_eam_cd.cpp index 66ebad6244a9d16b939bfb61c63862742e709cc8..8db1b6dd9a5a64cb83b51eed6085f98597f35065 100644 --- a/src/MANYBODY/pair_eam_cd.cpp +++ b/src/MANYBODY/pair_eam_cd.cpp @@ -504,7 +504,7 @@ void PairEAMCD::read_h_coeff(char *filename) fptr = force->open_potential(filename); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EAM potential file %s", filename); + snprintf(str,128,"Cannot open EAM potential file %s", filename); error->one(FLERR,str); } @@ -539,7 +539,7 @@ void PairEAMCD::read_h_coeff(char *filename) /* ---------------------------------------------------------------------- */ int PairEAMCD::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/MANYBODY/pair_eam_fs.cpp b/src/MANYBODY/pair_eam_fs.cpp index 2b5d530d3a962e2c15b3e8dbc3d05ba2d59ac3f4..bbda84fdf1ac6305159e4272dc29f22c974f1aa6 100644 --- a/src/MANYBODY/pair_eam_fs.cpp +++ b/src/MANYBODY/pair_eam_fs.cpp @@ -127,7 +127,7 @@ void PairEAMFS::read_file(char *filename) fptr = force->open_potential(filename); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); + snprintf(str,128,"Cannot open EAM potential file %s",filename); error->one(FLERR,str); } } diff --git a/src/MANYBODY/pair_eim.cpp b/src/MANYBODY/pair_eim.cpp index b810d444fc6483cde6a87733b9376557efce7739..b0fa1b1eeff664a0447096e7e5e9569ca03d0fd7 100644 --- a/src/MANYBODY/pair_eim.cpp +++ b/src/MANYBODY/pair_eim.cpp @@ -342,7 +342,7 @@ void PairEIM::allocate() global settings ------------------------------------------------------------------------- */ -void PairEIM::settings(int narg, char **arg) +void PairEIM::settings(int narg, char **/*arg*/) { if (narg > 0) error->all(FLERR,"Illegal pair_style command"); } @@ -461,7 +461,7 @@ void PairEIM::read_file(char *filename) fptr = force->open_potential(filename); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EIM potential file %s",filename); + snprintf(str,128,"Cannot open EIM potential file %s",filename); error->one(FLERR,str); } } @@ -850,7 +850,7 @@ void PairEIM::array2spline() /* ---------------------------------------------------------------------- */ void PairEIM::interpolate(int n, double delta, double *f, - double **spline, double origin) + double **spline, double /*origin*/) { for (int m = 1; m <= n; m++) spline[m][6] = f[m]; @@ -1087,7 +1087,7 @@ double PairEIM::funccoul(int i, int j, double r) /* ---------------------------------------------------------------------- */ int PairEIM::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/MANYBODY/pair_gw.cpp b/src/MANYBODY/pair_gw.cpp index 35f092b580e4693e45db8bbda6b0a12d20a094ac..f2d3b67eb055e20701104afc645211d068912e0f 100644 --- a/src/MANYBODY/pair_gw.cpp +++ b/src/MANYBODY/pair_gw.cpp @@ -257,7 +257,7 @@ void PairGW::allocate() global settings ------------------------------------------------------------------------- */ -void PairGW::settings(int narg, char **arg) +void PairGW::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -381,7 +381,7 @@ void PairGW::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open GW potential file %s",file); + snprintf(str,128,"Cannot open GW potential file %s",file); error->one(FLERR,str); } } diff --git a/src/MANYBODY/pair_gw_zbl.cpp b/src/MANYBODY/pair_gw_zbl.cpp index 81d4866e84f6a654dd057b9ea892ae9f6ce12505..f3dd1bc04b5dddc2c2e505ec2423f5290f0ec81b 100644 --- a/src/MANYBODY/pair_gw_zbl.cpp +++ b/src/MANYBODY/pair_gw_zbl.cpp @@ -77,7 +77,7 @@ void PairGWZBL::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open GW potential file %s",file); + snprintf(str,128,"Cannot open GW potential file %s",file); error->one(FLERR,str); } } diff --git a/src/MANYBODY/pair_lcbop.cpp b/src/MANYBODY/pair_lcbop.cpp index d334defcc607447a357b6a2da1d215d6dcd6cba5..88477e48f3edf73e681c1b8cc5635549407dd9c5 100644 --- a/src/MANYBODY/pair_lcbop.cpp +++ b/src/MANYBODY/pair_lcbop.cpp @@ -121,7 +121,7 @@ void PairLCBOP::allocate() global settings ------------------------------------------------------------------------- */ -void PairLCBOP::settings(int narg, char **arg) { +void PairLCBOP::settings(int narg, char **/*arg*/) { if( narg != 0 ) error->all(FLERR,"Illegal pair_style command"); } @@ -353,7 +353,7 @@ void PairLCBOP::SR_neigh() Short range forces and energy ------------------------------------------------------------------------- */ -void PairLCBOP::FSR(int eflag, int vflag) +void PairLCBOP::FSR(int eflag, int /*vflag*/) { int i,j,jj,ii,inum; tagint itag,jtag; @@ -449,7 +449,7 @@ void PairLCBOP::FSR(int eflag, int vflag) compute long range forces and energy ------------------------------------------------------------------------- */ -void PairLCBOP::FLR(int eflag, int vflag) +void PairLCBOP::FLR(int eflag, int /*vflag*/) { int i,j,jj,ii; tagint itag,jtag; @@ -978,7 +978,7 @@ void PairLCBOP::read_file(char *filename) FILE *fp = force->open_potential(filename); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open LCBOP potential file %s",filename); + snprintf(str,128,"Cannot open LCBOP potential file %s",filename); error->one(FLERR,str); } diff --git a/src/MANYBODY/pair_nb3b_harmonic.cpp b/src/MANYBODY/pair_nb3b_harmonic.cpp index 36be9c2b90758b075a7566f6c469d038049c2f5d..ce449e48909948962e2e69ae3751d9091c955f2e 100644 --- a/src/MANYBODY/pair_nb3b_harmonic.cpp +++ b/src/MANYBODY/pair_nb3b_harmonic.cpp @@ -174,7 +174,7 @@ void PairNb3bHarmonic::allocate() global settings ------------------------------------------------------------------------- */ -void PairNb3bHarmonic::settings(int narg, char **arg) +void PairNb3bHarmonic::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -299,7 +299,7 @@ void PairNb3bHarmonic::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open nb3b/harmonic potential file %s",file); + snprintf(str,128,"Cannot open nb3b/harmonic potential file %s",file); error->one(FLERR,str); } } @@ -454,7 +454,7 @@ void PairNb3bHarmonic::setup_params() /* ---------------------------------------------------------------------- */ -void PairNb3bHarmonic::threebody(Param *paramij, Param *paramik, +void PairNb3bHarmonic::threebody(Param * /*paramij*/, Param * /*paramik*/, Param *paramijk, double rsq1, double rsq2, double *delr1, double *delr2, diff --git a/src/MANYBODY/pair_polymorphic.cpp b/src/MANYBODY/pair_polymorphic.cpp index 2afb08b7a1e6e56059a44c3e862d047bb95566be..41c5892d4e84aafc1df9ec977ab496ed071ffe45 100644 --- a/src/MANYBODY/pair_polymorphic.cpp +++ b/src/MANYBODY/pair_polymorphic.cpp @@ -450,7 +450,7 @@ void PairPolymorphic::allocate() global settings ------------------------------------------------------------------------- */ -void PairPolymorphic::settings(int narg, char **arg) +void PairPolymorphic::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -573,7 +573,7 @@ void PairPolymorphic::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open polymorphic potential file %s",file); + snprintf(str,128,"Cannot open polymorphic potential file %s",file); error->one(FLERR,str); } // move past comments to first data line diff --git a/src/MANYBODY/pair_rebo.cpp b/src/MANYBODY/pair_rebo.cpp index 37948f3038757ae1d22504a794fb9dc614b567e5..1f31c0b0cd67478b38c7f5d0ff67a0eb93b3e045 100644 --- a/src/MANYBODY/pair_rebo.cpp +++ b/src/MANYBODY/pair_rebo.cpp @@ -24,7 +24,7 @@ PairREBO::PairREBO(LAMMPS *lmp) : PairAIREBO(lmp) {} global settings ------------------------------------------------------------------------- */ -void PairREBO::settings(int narg, char **arg) +void PairREBO::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); diff --git a/src/MANYBODY/pair_sw.cpp b/src/MANYBODY/pair_sw.cpp index 6fbc00204c3ba8e046262799357281d8730e4d22..91e11b3d26030c570c1b1a326e8336ddee7972f9 100644 --- a/src/MANYBODY/pair_sw.cpp +++ b/src/MANYBODY/pair_sw.cpp @@ -239,7 +239,7 @@ void PairSW::allocate() global settings ------------------------------------------------------------------------- */ -void PairSW::settings(int narg, char **arg) +void PairSW::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -363,7 +363,7 @@ void PairSW::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open Stillinger-Weber potential file %s",file); + snprintf(str,128,"Cannot open Stillinger-Weber potential file %s",file); error->one(FLERR,str); } } diff --git a/src/MANYBODY/pair_tersoff.cpp b/src/MANYBODY/pair_tersoff.cpp index 507b07e29a21fc1031b1c25269f35da942d19715..54101aef9e4c3c0b391313f2d4eb2dd525460683 100644 --- a/src/MANYBODY/pair_tersoff.cpp +++ b/src/MANYBODY/pair_tersoff.cpp @@ -280,7 +280,7 @@ void PairTersoff::allocate() global settings ------------------------------------------------------------------------- */ -void PairTersoff::settings(int narg, char **arg) +void PairTersoff::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -404,7 +404,7 @@ void PairTersoff::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open Tersoff potential file %s",file); + snprintf(str,128,"Cannot open Tersoff potential file %s",file); error->one(FLERR,str); } } diff --git a/src/MANYBODY/pair_tersoff_mod.cpp b/src/MANYBODY/pair_tersoff_mod.cpp index 73297fb53451640d9cf105de3367d49b5cb78c82..e8fdecfe019ff9b8668990808bae776054d9910d 100644 --- a/src/MANYBODY/pair_tersoff_mod.cpp +++ b/src/MANYBODY/pair_tersoff_mod.cpp @@ -60,7 +60,7 @@ void PairTersoffMOD::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open Tersoff potential file %s",file); + snprintf(str,128,"Cannot open Tersoff potential file %s",file); error->one(FLERR,str); } } diff --git a/src/MANYBODY/pair_tersoff_mod_c.cpp b/src/MANYBODY/pair_tersoff_mod_c.cpp index 0d0016664a1dd93c1a981ae95af29958ef012c1f..4a5904c106a91b67e0f27a87e72af52c4a060ccf 100644 --- a/src/MANYBODY/pair_tersoff_mod_c.cpp +++ b/src/MANYBODY/pair_tersoff_mod_c.cpp @@ -55,7 +55,7 @@ void PairTersoffMODC::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open Tersoff potential file %s",file); + snprintf(str,128,"Cannot open Tersoff potential file %s",file); error->one(FLERR,str); } } diff --git a/src/MANYBODY/pair_tersoff_zbl.cpp b/src/MANYBODY/pair_tersoff_zbl.cpp index 1692c88a5087b1f970a63a3b4dce00705a5358f6..353e3d22645bd04d4628dc125944b6cef48a6997 100644 --- a/src/MANYBODY/pair_tersoff_zbl.cpp +++ b/src/MANYBODY/pair_tersoff_zbl.cpp @@ -77,7 +77,7 @@ void PairTersoffZBL::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open Tersoff potential file %s",file); + snprintf(str,128,"Cannot open Tersoff potential file %s",file); error->one(FLERR,str); } } diff --git a/src/MANYBODY/pair_vashishta.cpp b/src/MANYBODY/pair_vashishta.cpp index 8506c9a69fd79f35f362f5f24f65854cf34e5537..b4c3086ca891decb8c501c4f501cfe535c95aa56 100644 --- a/src/MANYBODY/pair_vashishta.cpp +++ b/src/MANYBODY/pair_vashishta.cpp @@ -245,7 +245,7 @@ void PairVashishta::allocate() global settings ------------------------------------------------------------------------- */ -void PairVashishta::settings(int narg, char **arg) +void PairVashishta::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -369,7 +369,7 @@ void PairVashishta::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open Vashishta potential file %s",file); + snprintf(str,128,"Cannot open Vashishta potential file %s",file); error->one(FLERR,str); } } diff --git a/src/MC/fix_atom_swap.cpp b/src/MC/fix_atom_swap.cpp index 4d9377022b265fe1488bf241e4ac69f3c1185252..12b5d65f4ad821530b6000c06c4b057e0211d11f 100644 --- a/src/MC/fix_atom_swap.cpp +++ b/src/MC/fix_atom_swap.cpp @@ -377,7 +377,7 @@ int FixAtomSwap::attempt_semi_grand() int success = 0; if (i >= 0) if (random_unequal->uniform() < - exp(-beta*(energy_after - energy_before + exp(beta*(energy_before - energy_after + mu[jtype] - mu[itype]))) success = 1; int success_all = 0; @@ -695,7 +695,7 @@ void FixAtomSwap::update_swap_atoms_list() /* ---------------------------------------------------------------------- */ -int FixAtomSwap::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +int FixAtomSwap::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/MC/fix_bond_break.cpp b/src/MC/fix_bond_break.cpp index 9a5b59b60188b89d2cf671a1a3fbf1db1e265daa..a1c9bb3ab00a61fae6cf9c3ba9c680633673508b 100644 --- a/src/MC/fix_bond_break.cpp +++ b/src/MC/fix_bond_break.cpp @@ -693,7 +693,7 @@ int FixBondBreak::dedup(int nstart, int nstop, tagint *copy) /* ---------------------------------------------------------------------- */ -void FixBondBreak::post_integrate_respa(int ilevel, int iloop) +void FixBondBreak::post_integrate_respa(int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_integrate(); } @@ -701,7 +701,7 @@ void FixBondBreak::post_integrate_respa(int ilevel, int iloop) /* ---------------------------------------------------------------------- */ int FixBondBreak::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,k,m,ns; diff --git a/src/MC/fix_bond_create.cpp b/src/MC/fix_bond_create.cpp index 8e9db6a18b130819adbbf280fdbdae9ce2c9fea4..e1dd18cb5bebe868d21991498b304ce9a0246d80 100644 --- a/src/MC/fix_bond_create.cpp +++ b/src/MC/fix_bond_create.cpp @@ -258,14 +258,14 @@ void FixBondCreate::init() /* ---------------------------------------------------------------------- */ -void FixBondCreate::init_list(int id, NeighList *ptr) +void FixBondCreate::init_list(int /*id*/, NeighList *ptr) { list = ptr; } /* ---------------------------------------------------------------------- */ -void FixBondCreate::setup(int vflag) +void FixBondCreate::setup(int /*vflag*/) { int i,j,m; @@ -1206,7 +1206,7 @@ int FixBondCreate::dedup(int nstart, int nstop, tagint *copy) /* ---------------------------------------------------------------------- */ -void FixBondCreate::post_integrate_respa(int ilevel, int iloop) +void FixBondCreate::post_integrate_respa(int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_integrate(); } @@ -1214,7 +1214,7 @@ void FixBondCreate::post_integrate_respa(int ilevel, int iloop) /* ---------------------------------------------------------------------- */ int FixBondCreate::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,k,m,ns; @@ -1347,7 +1347,7 @@ void FixBondCreate::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixBondCreate::copy_arrays(int i, int j, int delflag) +void FixBondCreate::copy_arrays(int i, int j, int /*delflag*/) { bondcount[j] = bondcount[i]; } diff --git a/src/MC/fix_bond_swap.cpp b/src/MC/fix_bond_swap.cpp index d6df4d9a960343520e610280e5941600584b6050..9a726679077c22846740281bf2af1f2272bfb795 100644 --- a/src/MC/fix_bond_swap.cpp +++ b/src/MC/fix_bond_swap.cpp @@ -182,7 +182,7 @@ void FixBondSwap::init() /* ---------------------------------------------------------------------- */ -void FixBondSwap::init_list(int id, NeighList *ptr) +void FixBondSwap::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/MC/fix_tfmc.cpp b/src/MC/fix_tfmc.cpp index b8217103535a2e08826fffa134c831e3856bdffe..46c5e592ae9e54b8e8dce22f4e70060c638295e8 100644 --- a/src/MC/fix_tfmc.cpp +++ b/src/MC/fix_tfmc.cpp @@ -158,7 +158,7 @@ void FixTFMC::init() /* ---------------------------------------------------------------------- */ -void FixTFMC::initial_integrate(int vflag) +void FixTFMC::initial_integrate(int /*vflag*/) { double boltz = force->boltz; double **x = atom->x; diff --git a/src/MC/pair_dsmc.cpp b/src/MC/pair_dsmc.cpp index 02f9754c2a2fdd1a78565931d607010ca66e1a49..c71eaa2295bd0460c16edb27aee9d5ff915ae955 100644 --- a/src/MC/pair_dsmc.cpp +++ b/src/MC/pair_dsmc.cpp @@ -65,7 +65,7 @@ PairDSMC::~PairDSMC() /* ---------------------------------------------------------------------- */ -void PairDSMC::compute(int eflag, int vflag) +void PairDSMC::compute(int /*eflag*/, int /*vflag*/) { double **x = atom->x; double *mass = atom->mass; @@ -405,7 +405,7 @@ void PairDSMC::read_restart_settings(FILE *fp) the next nrezero timesteps -------------------------------------------------------------------------*/ -void PairDSMC::recompute_V_sigma_max(int icell) +void PairDSMC::recompute_V_sigma_max(int /*icell*/) { int i,j,k; double Vsigma_max = 0; @@ -459,7 +459,7 @@ double PairDSMC::V_sigma(int i, int j) generate new velocities for collided particles -------------------------------------------------------------------------*/ -void PairDSMC::scatter_random(int i, int j, int icell) +void PairDSMC::scatter_random(int i, int j, int /*icell*/) { double mag_delv,cos_phi,cos_squared,r,theta; double delv[3],vcm[3]; diff --git a/src/MEAM/pair_meam.cpp b/src/MEAM/pair_meam.cpp index 687055aa6a6735fceb1749c4124ae73797dc8d9f..38e8e97810790ac81ab20b7555fb97d94a59f6e4 100644 --- a/src/MEAM/pair_meam.cpp +++ b/src/MEAM/pair_meam.cpp @@ -48,8 +48,8 @@ static const char *keywords[] = { PairMEAM::PairMEAM(LAMMPS *lmp) : Pair(lmp) { if (comm->me == 0) - error->warning(FLERR,"The pair_style meam command is unsupported. " - "Please use pair_style meam/c instead"); + error->warning(FLERR,"THE pair_style meam COMMAND IS OBSOLETE AND " + "WILL BE REMOVED VERY SOON. PLEASE USE meam/c"); single_enable = 0; restartinfo = 0; @@ -325,7 +325,7 @@ void PairMEAM::allocate() global settings ------------------------------------------------------------------------- */ -void PairMEAM::settings(int narg, char **arg) +void PairMEAM::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -448,7 +448,7 @@ void PairMEAM::init_list(int id, NeighList *ptr) init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairMEAM::init_one(int i, int j) +double PairMEAM::init_one(int /*i*/, int /*j*/) { return cutmax; } @@ -464,7 +464,7 @@ void PairMEAM::read_files(char *globalfile, char *userfile) fp = force->open_potential(globalfile); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open MEAM potential file %s",globalfile); + snprintf(str,128,"Cannot open MEAM potential file %s",globalfile); error->one(FLERR,str); } } @@ -645,7 +645,7 @@ void PairMEAM::read_files(char *globalfile, char *userfile) fp = force->open_potential(userfile); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open MEAM potential file %s",userfile); + snprintf(str,128,"Cannot open MEAM potential file %s",userfile); error->one(FLERR,str); } } @@ -694,8 +694,8 @@ void PairMEAM::read_files(char *globalfile, char *userfile) if (strcmp(params[0],keywords[which]) == 0) break; if (which == nkeywords) { char str[128]; - sprintf(str,"Keyword %s in MEAM parameter file not recognized", - params[0]); + snprintf(str,128,"Keyword %s in MEAM parameter file not recognized", + params[0]); error->all(FLERR,str); } nindex = nparams - 2; @@ -734,7 +734,7 @@ void PairMEAM::read_files(char *globalfile, char *userfile) /* ---------------------------------------------------------------------- */ int PairMEAM::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,k,m; diff --git a/src/MESSAGE/Install.sh b/src/MESSAGE/Install.sh new file mode 100644 index 0000000000000000000000000000000000000000..853dbddcddab6a5eceaea467276834139a53ce12 --- /dev/null +++ b/src/MESSAGE/Install.sh @@ -0,0 +1,67 @@ +# Install/unInstall package files in LAMMPS +# mode = 0/1/2 for uninstall/install/update + +mode=$1 + +# arg1 = file, arg2 = file it depends on + +# enforce using portable C locale +LC_ALL=C +export LC_ALL + +action () { + if (test $mode = 0) then + rm -f ../$1 + elif (! cmp -s $1 ../$1) then + if (test -z "$2" || test -e ../$2) then + cp $1 .. + if (test $mode = 2) then + echo " updating src/$1" + fi + fi + elif (test -n "$2") then + if (test ! -e ../$2) then + rm -f ../$1 + fi + fi +} + +# all package files with no dependencies + +for file in *.cpp *.h; do + test -f ${file} && action $file +done + +# edit 2 Makefile.package files to include/exclude package info + +if (test $1 = 1) then + + if (test -e ../Makefile.package) then + sed -i -e 's/[^ \t]*message[^ \t]* //' ../Makefile.package + sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/message/cslib/src |' ../Makefile.package + sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/message/cslib/src |' ../Makefile.package + sed -i -e 's|^PKG_LIB =[ \t]*|&-lmessage |' ../Makefile.package + sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(message_SYSINC) |' ../Makefile.package + sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(message_SYSLIB) |' ../Makefile.package + sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(message_SYSPATH) |' ../Makefile.package + fi + + if (test -e ../Makefile.package.settings) then + sed -i -e '/^include.*message.*$/d' ../Makefile.package.settings + # multiline form needed for BSD sed on Macs + sed -i -e '4 i \ +include ..\/..\/lib\/message\/Makefile.lammps +' ../Makefile.package.settings + fi + +elif (test $1 = 0) then + + if (test -e ../Makefile.package) then + sed -i -e 's/[^ \t]*message[^ \t]* //' ../Makefile.package + fi + + if (test -e ../Makefile.package.settings) then + sed -i -e '/^include.*message.*$/d' ../Makefile.package.settings + fi + +fi diff --git a/src/MESSAGE/fix_client_md.cpp b/src/MESSAGE/fix_client_md.cpp new file mode 100644 index 0000000000000000000000000000000000000000..aca5cd41f9184c947e102c6dc21b33d9e5e2d135 --- /dev/null +++ b/src/MESSAGE/fix_client_md.cpp @@ -0,0 +1,325 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include +#include "fix_client_md.h" +#include "update.h" +#include "atom.h" +#include "comm.h" +#include "domain.h" +#include "force.h" +#include "memory.h" +#include "error.h" + +// CSlib interface + +#include "cslib.h" + +using namespace LAMMPS_NS; +using namespace CSLIB_NS; +using namespace FixConst; + +enum{OTHER,REAL,METAL}; +enum{SETUP=1,STEP}; +enum{DIM=1,PERIODICITY,ORIGIN,BOX,NATOMS,NTYPES,TYPES,COORDS,UNITS,CHARGE}; +enum{FORCES=1,ENERGY,PRESSURE,ERROR}; + +/* ---------------------------------------------------------------------- */ + +FixClientMD::FixClientMD(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) +{ + if (lmp->clientserver != 1) + error->all(FLERR,"Fix client/md requires LAMMPS be running as a client"); + if (!atom->map_style) error->all(FLERR,"Fix client/md requires atom map"); + + if (sizeof(tagint) != 4) + error->all(FLERR,"Fix client/md requires 4-byte atom IDs"); + + if (strcmp(update->unit_style,"real") == 0) units = REAL; + else if (strcmp(update->unit_style,"metal") == 0) units = METAL; + else units = OTHER; + + scalar_flag = 1; + global_freq = 1; + extscalar = 1; + virial_flag = 1; + thermo_virial = 1; + + inv_nprocs = 1.0 / comm->nprocs; + if (domain->dimension == 2) + box[0][2] = box[1][2] = box[2][0] = box[2][1] = box[2][2] = 0.0; + + maxatom = 0; + xpbc = NULL; + + // unit conversion factors for REAL + // otherwise not needed + // message received in METAL units, convert to local REAL units + + fconvert = econvert = pconvert = 1.0; + if (units == REAL) { + fconvert = econvert = 23.06035; // eV -> Kcal/mole + pconvert = 0.986923; // bars -> atmospheres + } +} + +/* ---------------------------------------------------------------------- */ + +FixClientMD::~FixClientMD() +{ + memory->destroy(xpbc); + + CSlib *cs = (CSlib *) lmp->cslib; + + // all-done message to server + + cs->send(-1,0); + + int nfield; + int *fieldID,*fieldtype,*fieldlen; + int msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + + // clean-up + + delete cs; + lmp->cslib = NULL; +} + +/* ---------------------------------------------------------------------- */ + +int FixClientMD::setmask() +{ + int mask = 0; + mask |= POST_FORCE; + mask |= MIN_POST_FORCE; + mask |= THERMO_ENERGY; + return mask; +} + +/* ---------------------------------------------------------------------- */ + +void FixClientMD::init() +{ + if (3*atom->natoms > INT_MAX) + error->all(FLERR,"Fix client/md max atoms is 1/3 of 2^31"); +} + +/* ---------------------------------------------------------------------- */ + +void FixClientMD::setup(int vflag) +{ + CSlib *cs = (CSlib *) lmp->cslib; + + // SETUP send at beginning of each run + // required fields: DIM, PERIODICTY, ORIGIN, BOX, NATOMS, NTYPES, TYPES, COORDS + // optional fields: others in enum above + + int nfields = 8; + if (units == OTHER) nfields++; + if (atom->q_flag) nfields++; + + cs->send(SETUP,nfields); + + cs->pack_int(DIM,domain->dimension); + cs->pack(PERIODICITY,1,3,domain->periodicity); + + pack_box(); + cs->pack(ORIGIN,4,3,domain->boxlo); + cs->pack(BOX,4,9,&box[0][0]); + + cs->pack_int(NATOMS,atom->natoms); + cs->pack_int(NTYPES,atom->ntypes); + + cs->pack_parallel(TYPES,1,atom->nlocal,atom->tag,1,atom->type); + pack_coords(); + cs->pack_parallel(COORDS,4,atom->nlocal,atom->tag,3,xpbc); + + if (units == OTHER) cs->pack_string(UNITS,update->unit_style); + + if (atom->q_flag) + cs->pack_parallel(CHARGE,4,atom->nlocal,atom->tag,1,atom->q); + + // receive initial forces, energy, virial + + receive_fev(vflag); + + if (server_error) { + char str[64]; + sprintf(str,"Fix client/md received server error %d\n",server_error); + error->all(FLERR,str); + } +} + +/* ---------------------------------------------------------------------- */ + +void FixClientMD::min_setup(int vflag) +{ + setup(vflag); +} + +/* ---------------------------------------------------------------------- */ + +void FixClientMD::post_force(int vflag) +{ + int i,j,m; + + // energy and virial setup + + if (vflag) v_setup(vflag); + else evflag = 0; + + // STEP send every step + // required fields: COORDS + // optional fields: ORIGIN, BOX + + // send coords + + CSlib *cs = (CSlib *) lmp->cslib; + + int nfields = 1; + if (domain->box_change) nfields += 2; + + cs->send(STEP,nfields); + + pack_coords(); + cs->pack_parallel(COORDS,4,atom->nlocal,atom->tag,3,xpbc); + + if (domain->box_change) { + pack_box(); + cs->pack(ORIGIN,4,3,domain->boxlo); + cs->pack(BOX,4,9,&box[0][0]); + } + + // receive forces, energy, virial + + receive_fev(vflag); + + if (server_error) { + char str[64]; + sprintf(str,"Fix client/md received server error %d\n",server_error); + error->all(FLERR,str); + } +} + +/* ---------------------------------------------------------------------- */ + +void FixClientMD::min_post_force(int vflag) +{ + post_force(vflag); +} + +/* ---------------------------------------------------------------------- + potential energy from server +------------------------------------------------------------------------- */ + +double FixClientMD::compute_scalar() +{ + return eng; +} + +/* ---------------------------------------------------------------------- + pack local coords into xpbc, enforcing PBC +------------------------------------------------------------------------- */ + +void FixClientMD::pack_coords() +{ + double **x = atom->x; + int nlocal = atom->nlocal; + + if (nlocal > maxatom) { + memory->destroy(xpbc); + maxatom = atom->nmax; + memory->create(xpbc,3*maxatom,"message:xpbc"); + } + + memcpy(xpbc,&x[0][0],3*nlocal*sizeof(double)); + + int j = 0; + for (int i = 0; i < nlocal; i++) { + domain->remap(&xpbc[j]); + j += 3; + } +} + +/* ---------------------------------------------------------------------- + pack box info into box = 3 edge vectors of simulation box +------------------------------------------------------------------------- */ + +void FixClientMD::pack_box() +{ + double *boxlo = domain->boxlo; + double *boxhi = domain->boxhi; + + box[0][0] = boxhi[0] - boxlo[0]; + box[0][1] = 0.0; + box[0][2] = 0.0; + box[1][0] = domain->xy; + box[1][1] = boxhi[1] - boxlo[1]; + box[1][2] = 0.0; + box[2][0] = domain->xz; + box[2][1] = domain->yz; + box[2][2] = boxhi[2] - boxlo[2]; +} + +/* ---------------------------------------------------------------------- + receive message from server + required fields: FORCES, ENERGY, PRESSURE + optional field: ERROR +------------------------------------------------------------------------- */ + +void FixClientMD::receive_fev(int vflag) +{ + CSlib *cs = (CSlib *) lmp->cslib; + + int nfield; + int *fieldID,*fieldtype,*fieldlen; + + int msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + + double *forces = (double *) cs->unpack(FORCES); + double **f = atom->f; + int nlocal = atom->nlocal; + bigint natoms = atom->natoms; + int m; + + int j = 0; + for (tagint id = 1; id <= natoms; id++) { + m = atom->map(id); + if (m < 0 || m >= nlocal) j += 3; + else { + f[m][0] += fconvert * forces[j++]; + f[m][1] += fconvert * forces[j++]; + f[m][2] += fconvert * forces[j++]; + } + } + + eng = econvert * cs->unpack_double(ENERGY); + + if (vflag) { + double *v = (double *) cs->unpack(PRESSURE); + + double nktv2p = force->nktv2p; + double volume = domain->xprd * domain->yprd * domain->zprd; + double factor = inv_nprocs * pconvert * volume / nktv2p; + + for (int i = 0; i < 6; i++) + virial[i] = factor * v[i]; + } + + // error return + + server_error = 0; + if (nfield == 4) server_error = cs->unpack_int(ERROR); +} diff --git a/src/MESSAGE/fix_client_md.h b/src/MESSAGE/fix_client_md.h new file mode 100644 index 0000000000000000000000000000000000000000..1c874c7278e6b7474e52d1929b4767e9afea2606 --- /dev/null +++ b/src/MESSAGE/fix_client_md.h @@ -0,0 +1,65 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(client/md,FixClientMD) + +#else + +#ifndef LMP_FIX_CLIENT_MD_H +#define LMP_FIX_CLIENT_MD_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixClientMD : public Fix { + public: + FixClientMD(class LAMMPS *, int, char **); + ~FixClientMD(); + int setmask(); + void init(); + void setup(int); + void min_setup(int); + void post_force(int); + void min_post_force(int); + double compute_scalar(); + + private: + int maxatom,units,server_error; + double eng; + double inv_nprocs; + double fconvert,econvert,pconvert; + double box[3][3]; + double *xpbc; + + void pack_coords(); + void pack_box(); + void receive_fev(int); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/MESSAGE/message.cpp b/src/MESSAGE/message.cpp new file mode 100644 index 0000000000000000000000000000000000000000..329ce1fbd9e46fec5e0fd5665659f794431d0065 --- /dev/null +++ b/src/MESSAGE/message.cpp @@ -0,0 +1,90 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include "message.h" +#include "error.h" + +// CSlib interface + +#include "cslib.h" + +using namespace LAMMPS_NS; +using namespace CSLIB_NS; + +// customize by adding a new server protocol enum + +enum{MD,MC}; + +/* ---------------------------------------------------------------------- */ + +void Message::command(int narg, char **arg) +{ + if (narg < 3) error->all(FLERR,"Illegal message command"); + + int clientserver; + if (strcmp(arg[0],"client") == 0) clientserver = 1; + else if (strcmp(arg[0],"server") == 0) clientserver = 2; + else error->all(FLERR,"Illegal message command"); + lmp->clientserver = clientserver; + + // customize by adding a new server protocol + + int protocol; + if (strcmp(arg[1],"md") == 0) protocol = MD; + else if (strcmp(arg[1],"mc") == 0) protocol = MC; + else error->all(FLERR,"Unknown message protocol"); + + // instantiate CSlib with chosen communication mode + + if (strcmp(arg[2],"file") == 0 || strcmp(arg[2],"zmq") == 0 || + strcmp(arg[2],"mpi/two") == 0) { + if (narg != 4) error->all(FLERR,"Illegal message command"); + lmp->cslib = new CSlib(clientserver-1,arg[2],arg[3],&world); + + } else if (strcmp(arg[2],"mpi/one") == 0) { + if (narg != 3) error->all(FLERR,"Illegal message command"); + if (!lmp->cscomm) + error->all(FLERR,"Message mpi/one mode, but -mpi cmdline arg not used"); + lmp->cslib = new CSlib(clientserver-1,arg[2],&lmp->cscomm,&world); + + } else error->all(FLERR,"Illegal message command"); + + // perform initial handshake between client and server + // other code being coupled to must perform similar operation + // client sends protocol with msgID = 0 + // server matches it and replies + + CSlib *cs = (CSlib *) lmp->cslib; + + if (clientserver == 1) { + cs->send(0,1); + cs->pack_string(1,arg[1]); + + int nfield; + int *fieldID,*fieldtype,*fieldlen; + int msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + if (msgID != 0) error->one(FLERR,"Bad initial client/server handshake"); + + } else { + int nfield; + int *fieldID,*fieldtype,*fieldlen; + int msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + if (msgID != 0) error->one(FLERR,"Bad initial client/server handshake"); + char *pstr = cs->unpack_string(1); + if (strcmp(pstr,arg[1]) != 0) + error->one(FLERR,"Mismatch in client/server protocol"); + + cs->send(0,0); + } +} diff --git a/src/MESSAGE/message.h b/src/MESSAGE/message.h new file mode 100644 index 0000000000000000000000000000000000000000..c384a5a7b7f4c5a8206a6f6d004f576e6157e946 --- /dev/null +++ b/src/MESSAGE/message.h @@ -0,0 +1,40 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef COMMAND_CLASS + +CommandStyle(message,Message) + +#else + +#ifndef LMP_MESSAGE_H +#define LMP_MESSAGE_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class Message : protected Pointers { + public: + Message(class LAMMPS *lmp) : Pointers(lmp) {}; + void command(int, char **); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +*/ diff --git a/src/MESSAGE/server.cpp b/src/MESSAGE/server.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f587fb76dfd6e488a56483edee9db6d56d74ff0e --- /dev/null +++ b/src/MESSAGE/server.cpp @@ -0,0 +1,50 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include "server.h" +#include "error.h" + +// customize by adding a new server protocol include and enum + +#include "server_md.h" +#include "server_mc.h" + +using namespace LAMMPS_NS; + +enum{MD,MC}; + +/* ---------------------------------------------------------------------- */ + +void Server::command(int narg, char **arg) +{ + if (narg != 1) error->all(FLERR,"Illegal server command"); + + if (lmp->clientserver != 2) + error->all(FLERR,"Message command not used to setup LAMMPS as a server"); + + // customize by adding a new server protocol + + int protocol; + if (strcmp(arg[0],"md") == 0) protocol = MD; + else if (strcmp(arg[0],"mc") == 0) protocol = MC; + else error->all(FLERR,"Unknown message protocol"); + + if (protocol == MD) { + ServerMD *server = new ServerMD(lmp); + server->loop(); + } else if (protocol == MC) { + ServerMC *server = new ServerMC(lmp); + server->loop(); + } +} diff --git a/src/MESSAGE/server.h b/src/MESSAGE/server.h new file mode 100644 index 0000000000000000000000000000000000000000..579f6ab6f12603ae516d39ec4b88f62fe58b341f --- /dev/null +++ b/src/MESSAGE/server.h @@ -0,0 +1,40 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef COMMAND_CLASS + +CommandStyle(server,Server) + +#else + +#ifndef LMP_SERVER_H +#define LMP_SERVER_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class Server : protected Pointers { + public: + Server(class LAMMPS *lmp) : Pointers(lmp) {}; + void command(int, char **); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +*/ diff --git a/src/MESSAGE/server_mc.cpp b/src/MESSAGE/server_mc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8a7344e86b6930483c5079e413372b578dff994c --- /dev/null +++ b/src/MESSAGE/server_mc.cpp @@ -0,0 +1,148 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "server_mc.h" +#include "atom.h" +#include "update.h" +#include "integrate.h" +#include "input.h" +#include "output.h" +#include "thermo.h" +#include "error.h" + +// CSlib interface + +#include "cslib.h" + +using namespace LAMMPS_NS; +using namespace CSLIB_NS; + +enum{NATOMS=1,EINIT,DISPLACE,ACCEPT,RUN}; + +/* ---------------------------------------------------------------------- */ + +ServerMC::ServerMC(LAMMPS *lmp) : Pointers(lmp) {} + +/* ---------------------------------------------------------------------- */ + +void ServerMC::loop() +{ + int i,j,m; + double xold[3],xnew[3]; + tagint atomid; + + CSlib *cs = (CSlib *) lmp->cslib; + + // require atom map + + if (!atom->map_style) error->all(FLERR,"Server mode requires atom map"); + + // initialize LAMMPS for dynamics + + input->one("run 0"); + + //update->whichflag = 1; + //lmp->init(); + + // loop on messages + // receive a message, process it, send return message if necessary + + int msgID,nfield; + int *fieldID,*fieldtype,*fieldlen; + + while (1) { + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + if (msgID < 0) break; + + if (msgID == NATOMS) { + + cs->send(msgID,1); + cs->pack_int(1,atom->natoms); + + } else if (msgID == EINIT) { + + double dval; + output->thermo->evaluate_keyword((char *) "pe",&dval); + + cs->send(msgID,2); + cs->pack_double(1,dval); + double *coords = NULL; + if (atom->nlocal) coords = &atom->x[0][0]; + cs->pack_parallel(2,4,atom->nlocal,atom->tag,3,coords); + + } else if (msgID == DISPLACE) { + + atomid = cs->unpack_int(1); + double *xnew = (double *) cs->unpack(2); + double **x = atom->x; + + m = atom->map(atomid); + if (m >= 0 && m < atom->nlocal) { + xold[0] = x[m][0]; + xold[1] = x[m][1]; + xold[2] = x[m][2]; + x[m][0] = xnew[0]; + x[m][1] = xnew[1]; + x[m][2] = xnew[2]; + } + + input->one("run 0"); + double dval; + output->thermo->evaluate_keyword((char *) "pe",&dval); + + cs->send(msgID,1); + cs->pack_double(1,dval); + + } else if (msgID == ACCEPT) { + + int accept = cs->unpack_int(1); + double **x = atom->x; + + if (!accept) { + m = atom->map(atomid); + if (m >= 0 && m < atom->nlocal) { + x[m][0] = xold[0]; + x[m][1] = xold[1]; + x[m][2] = xold[2]; + } + } + + cs->send(msgID,0); + + } else if (msgID == RUN) { + + int nsteps = cs->unpack_int(1); + + //input->one("run 100"); + + update->nsteps = nsteps; + update->firststep = update->ntimestep; + update->laststep = update->ntimestep + nsteps; + + update->integrate->setup(1); + update->integrate->run(nsteps); + + cs->send(msgID,0); + + } else error->all(FLERR,"Server received unrecognized message"); + } + + // final reply to client + + cs->send(0,0); + + // clean up + + delete cs; + lmp->cslib = NULL; +} diff --git a/src/MESSAGE/server_mc.h b/src/MESSAGE/server_mc.h new file mode 100644 index 0000000000000000000000000000000000000000..d0fb48942929934bdf57580070c00e61118ec959 --- /dev/null +++ b/src/MESSAGE/server_mc.h @@ -0,0 +1,29 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef LMP_SERVER_MC_H +#define LMP_SERVER_MC_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class ServerMC : protected Pointers { + public: + ServerMC(class LAMMPS *); + void loop(); +}; + +} + +#endif diff --git a/src/MESSAGE/server_md.cpp b/src/MESSAGE/server_md.cpp new file mode 100644 index 0000000000000000000000000000000000000000..aa771b7d4654b05469dd62b5d42e486532455323 --- /dev/null +++ b/src/MESSAGE/server_md.cpp @@ -0,0 +1,389 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include +#include "server_md.h" +#include "atom.h" +#include "atom_vec.h" +#include "update.h" +#include "integrate.h" +#include "kspace.h" +#include "force.h" +#include "pair.h" +#include "neighbor.h" +#include "comm.h" +#include "domain.h" +#include "memory.h" +#include "error.h" + +// CSlib interface + +#include "cslib.h" + +using namespace LAMMPS_NS; +using namespace CSLIB_NS; + +enum{OTHER,REAL,METAL}; +enum{SETUP=1,STEP}; +enum{DIM=1,PERIODICITY,ORIGIN,BOX,NATOMS,NTYPES,TYPES,COORDS,UNITS,CHARGE}; +enum{FORCES=1,ENERGY,PRESSURE,ERROR}; + +/* ---------------------------------------------------------------------- */ + +ServerMD::ServerMD(LAMMPS *lmp) : Pointers(lmp) +{ + if (domain->box_exist == 0) + error->all(FLERR,"Server command before simulation box is defined"); + + if (!atom->map_style) error->all(FLERR,"Server md requires atom map"); + if (atom->tag_enable == 0) error->all(FLERR,"Server md requires atom IDs"); + if (sizeof(tagint) != 4) error->all(FLERR,"Server md requires 4-byte atom IDs"); + + if (strcmp(update->unit_style,"real") == 0) units = REAL; + else if (strcmp(update->unit_style,"metal") == 0) units = METAL; + else units = OTHER; + + // unit conversion factors for REAL + // otherwise not needed + // local computation in REAL units, send message in METAL units + + fconvert = econvert = pconvert = 1.0; + if (units == REAL) { + fconvert = econvert = 1.0 / 23.06035; // Kcal/mole -> eV + pconvert = 1.0 / 0.986923; // atmospheres -> bars + } + + fcopy = NULL; +} + +/* ---------------------------------------------------------------------- */ + +ServerMD::~ServerMD() +{ + memory->destroy(fcopy); +} + +/* ---------------------------------------------------------------------- */ + +void ServerMD::loop() +{ + int i,j,m; + + // cs = instance of CSlib + + CSlib *cs = (CSlib *) lmp->cslib; + + // counters + + int forcecalls = 0; + int neighcalls = 0; + + // loop on messages + // receive a message, process it, send return message + + int msgID,nfield; + int *fieldID,*fieldtype,*fieldlen; + + while (1) { + msgID = cs->recv(nfield,fieldID,fieldtype,fieldlen); + if (msgID < 0) break; + + // SETUP receive at beginning of each run + // required fields: DIM, PERIODICTY, ORIGIN, BOX, + // NATOMS, NTYPES, TYPES, COORDS + // optional fields: others in enum above + + if (msgID == SETUP) { + + int dim = 0; + int *periodicity = NULL; + int natoms = -1; + int ntypes = -1; + double *origin = NULL; + double *box = NULL; + int *types = NULL; + double *coords = NULL; + char *unit_style = NULL; + double *charge = NULL; + + for (int ifield = 0; ifield < nfield; ifield++) { + if (fieldID[ifield] == DIM) { + dim = cs->unpack_int(DIM); + if (dim != domain->dimension) + error->all(FLERR,"Server md dimension mis-match with client"); + } else if (fieldID[ifield] == PERIODICITY) { + periodicity = (int *) cs->unpack(PERIODICITY); + if (periodicity[0] != domain->periodicity[0] || + periodicity[1] != domain->periodicity[1] || + periodicity[2] != domain->periodicity[2]) + error->all(FLERR,"Server md periodicity mis-match with client"); + } else if (fieldID[ifield] == ORIGIN) { + origin = (double *) cs->unpack(ORIGIN); + } else if (fieldID[ifield] == BOX) { + box = (double *) cs->unpack(BOX); + } else if (fieldID[ifield] == NATOMS) { + natoms = cs->unpack_int(NATOMS); + if (3*natoms > INT_MAX) + error->all(FLERR,"Server md max atoms is 1/3 of 2^31"); + } else if (fieldID[ifield] == NTYPES) { + ntypes = cs->unpack_int(NTYPES); + if (ntypes != atom->ntypes) + error->all(FLERR,"Server md ntypes mis-match with client"); + } else if (fieldID[ifield] == TYPES) { + types = (int *) cs->unpack(TYPES); + } else if (fieldID[ifield] == COORDS) { + coords = (double *) cs->unpack(COORDS); + + } else if (fieldID[ifield] == UNITS) { + unit_style = (char *) cs->unpack(UNITS); + } else if (fieldID[ifield] == CHARGE) { + charge = (double *) cs->unpack(CHARGE); + } else error->all(FLERR,"Server md setup field unknown"); + } + + if (dim == 0 || !periodicity || !origin || !box || + natoms < 0 || ntypes < 0 || !types || !coords) + error->all(FLERR,"Required server md setup field not received"); + + if (unit_style && strcmp(unit_style,update->unit_style) != 0) + error->all(FLERR,"Server md does not match client units"); + + if (charge && atom->q_flag == 0) + error->all(FLERR,"Server md does not define atom attribute q"); + + // reset box, global and local + // reset proc decomposition + + if ((box[3] != 0.0 || box[6] != 0.0 || box[7] != 0.0) && + domain->triclinic == 0) + error->all(FLERR,"Server md is not initialized for a triclinic box"); + + box_change(origin,box); + + domain->set_initial_box(); + domain->set_global_box(); + comm->set_proc_grid(); + domain->set_local_box(); + + // clear all atoms + + atom->nlocal = 0; + atom->nghost = 0; + + // add atoms that are in my sub-box + + int nlocal = 0; + for (int i = 0; i < natoms; i++) { + if (!domain->ownatom(i+1,&coords[3*i],NULL,0)) continue; + atom->avec->create_atom(types[i],&coords[3*i]); + atom->tag[nlocal] = i+1; + if (charge) atom->q[nlocal] = charge[i]; + nlocal++; + } + + int ntotal; + MPI_Allreduce(&atom->nlocal,&ntotal,1,MPI_INT,MPI_SUM,world); + if (ntotal != natoms) + error->all(FLERR,"Server md atom count does not match client"); + + atom->map_init(); + atom->map_set(); + atom->natoms = natoms; + + // allocate fcopy if needed + + if (units == REAL) { + memory->destroy(fcopy); + memory->create(fcopy,atom->nlocal,3,"server/md:fcopy"); + } + + // perform system setup() for dynamics + // also OK for minimization, since client runs minimizer + // return forces, energy, virial to client + + update->whichflag = 1; + lmp->init(); + update->integrate->setup_minimal(1); + neighcalls++; + forcecalls++; + + send_fev(msgID); + + // STEP receive at each timestep of run or minimization + // required fields: COORDS + // optional fields: ORIGIN, BOX + + } else if (msgID == STEP) { + + double *coords = NULL; + double *origin = NULL; + double *box = NULL; + + for (int ifield = 0; ifield < nfield; ifield++) { + if (fieldID[ifield] == COORDS) { + coords = (double *) cs->unpack(COORDS); + } else if (fieldID[ifield] == ORIGIN) { + origin = (double *) cs->unpack(ORIGIN); + } else if (fieldID[ifield] == BOX) { + box = (double *) cs->unpack(BOX); + } else error->all(FLERR,"Server md step field unknown"); + } + + if (!coords) + error->all(FLERR,"Required server md step field not received"); + + // change box size/shape, only if origin and box received + // reset global/local box like FixDeform at end_of_step() + + if (origin && box) { + if ((box[3] != 0.0 || box[6] != 0.0 || box[7] != 0.0) && + domain->triclinic == 0) + error->all(FLERR,"Server md is not initialized for a triclinic box"); + box_change(origin,box); + domain->set_global_box(); + domain->set_local_box(); + } + + // assign received coords to owned atoms + // closest_image() insures xyz matches current server PBC + + double **x = atom->x; + int nlocal = atom->nlocal; + int nall = atom->natoms; + + j = 0; + for (tagint id = 1; id <= nall; id++) { + m = atom->map(id); + if (m < 0 || m >= nlocal) j += 3; + else { + domain->closest_image(x[m],&coords[j],x[m]); + j += 3; + } + } + + // if no need to reneighbor: + // ghost comm + // setup_minimal(0) which just computes forces + // else: + // setup_minimal(1) for pbc, reset_box, reneigh, forces + + int nflag = neighbor->decide(); + if (nflag == 0) { + comm->forward_comm(); + update->integrate->setup_minimal(0); + } else { + update->integrate->setup_minimal(1); + neighcalls++; + } + + forcecalls++; + + send_fev(msgID); + + } else error->all(FLERR,"Server MD received unrecognized message"); + } + + // final reply to client + + cs->send(0,0); + + // stats + + if (comm->me == 0) { + if (screen) { + fprintf(screen,"Server MD calls = %d\n",forcecalls); + fprintf(screen,"Server MD reneighborings = %d\n",neighcalls); + } + if (logfile) { + fprintf(logfile,"Server MD calls = %d\n",forcecalls); + fprintf(logfile,"Server MD reneighborings %d\n",neighcalls); + } + } + + // clean up + + delete cs; + lmp->cslib = NULL; +} + +/* ---------------------------------------------------------------------- + box change due to received message +------------------------------------------------------------------------- */ + +void ServerMD::box_change(double *origin, double *box) +{ + domain->boxlo[0] = origin[0]; + domain->boxlo[1] = origin[1]; + domain->boxlo[2] = origin[2]; + + domain->boxhi[0] = origin[0] + box[0]; + domain->boxhi[1] = origin[1] + box[4]; + domain->boxhi[2] = origin[2] + box[8]; + + domain->xy = box[3]; + domain->xz = box[6]; + domain->yz = box[7]; +} + +/* ---------------------------------------------------------------------- + return message with forces, energy, pressure tensor + pressure tensor should be just pair and KSpace contributions + required fields: FORCES, ENERGY, PRESSURE + optional field: ERROR (not ever sending) +------------------------------------------------------------------------- */ + +void ServerMD::send_fev(int msgID) +{ + CSlib *cs = (CSlib *) lmp->cslib; + + cs->send(msgID,3); + + double *forces = NULL; + if (atom->nlocal) { + if (units != REAL) forces = &atom->f[0][0]; + else { + double **f = atom->f; + int nlocal = atom->nlocal; + for (int i = 0; i < nlocal; i++) { + fcopy[i][0] = fconvert*f[i][0]; + fcopy[i][1] = fconvert*f[i][1]; + fcopy[i][2] = fconvert*f[i][2]; + } + forces = &fcopy[0][0]; + } + } + cs->pack_parallel(FORCES,4,atom->nlocal,atom->tag,3,forces); + + double eng = force->pair->eng_vdwl + force->pair->eng_coul; + double engall; + MPI_Allreduce(&eng,&engall,1,MPI_DOUBLE,MPI_SUM,world); + engall *= econvert; + cs->pack_double(ENERGY,engall); + + double v[6],vall[6]; + for (int i = 0; i < 6; i++) + v[i] = force->pair->virial[i]; + MPI_Allreduce(&v,&vall,6,MPI_DOUBLE,MPI_SUM,world); + + if (force->kspace) + for (int i = 0; i < 6; i++) + vall[i] += force->kspace->virial[i]; + + double nktv2p = force->nktv2p; + double volume = domain->xprd * domain->yprd * domain->zprd; + double factor = pconvert / volume * nktv2p; + for (int i = 0; i < 6; i++) vall[i] *= factor; + + cs->pack(PRESSURE,4,6,vall); +} diff --git a/src/MESSAGE/server_md.h b/src/MESSAGE/server_md.h new file mode 100644 index 0000000000000000000000000000000000000000..289d70bdd8a087f7f252ec9ac7e8f78155c2f4e7 --- /dev/null +++ b/src/MESSAGE/server_md.h @@ -0,0 +1,38 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef LMP_SERVER_MD_H +#define LMP_SERVER_MD_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class ServerMD : protected Pointers { + public: + ServerMD(class LAMMPS *); + ~ServerMD(); + void loop(); + + private: + int units; + double fconvert,econvert,pconvert; + double **fcopy; + + void box_change(double *, double *); + void send_fev(int); +}; + +} + +#endif diff --git a/src/MISC/fix_efield.cpp b/src/MISC/fix_efield.cpp index 1fa141e2bf3c9ea821436fc46a105dbbf034dd6b..004c8ad7bc4ac254c884a44f32cdef7aa03c010a 100644 --- a/src/MISC/fix_efield.cpp +++ b/src/MISC/fix_efield.cpp @@ -412,7 +412,7 @@ void FixEfield::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixEfield::post_force_respa(int vflag, int ilevel, int iloop) +void FixEfield::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/MISC/fix_gld.cpp b/src/MISC/fix_gld.cpp index 370730133ee1cc77eaa9dde98bb91ebb5e8bc01c..2bf02889a522a3639b7fd79bbe2c2661b169aea3 100644 --- a/src/MISC/fix_gld.cpp +++ b/src/MISC/fix_gld.cpp @@ -217,7 +217,7 @@ void FixGLD::init() First half of a timestep (V^{n} -> V^{n+1/2}; X^{n} -> X^{n+1}) ------------------------------------------------------------------------- */ -void FixGLD::initial_integrate(int vflag) +void FixGLD::initial_integrate(int /*vflag*/) { double dtfm; double ftm2v = force->ftm2v; @@ -444,7 +444,7 @@ void FixGLD::final_integrate() /* ---------------------------------------------------------------------- */ -void FixGLD::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixGLD::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) { dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel] * (force->ftm2v); @@ -458,7 +458,7 @@ void FixGLD::initial_integrate_respa(int vflag, int ilevel, int iloop) /* ---------------------------------------------------------------------- */ -void FixGLD::final_integrate_respa(int ilevel, int iloop) +void FixGLD::final_integrate_respa(int ilevel, int /*iloop*/) { dtf = 0.5 * step_respa[ilevel] * (force->ftm2v); final_integrate(); @@ -507,7 +507,7 @@ void FixGLD::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixGLD::copy_arrays(int i, int j, int delflag) +void FixGLD::copy_arrays(int i, int j, int /*delflag*/) { for (int k = 0; k < 3*prony_terms; k++) { s_gld[j][k] = s_gld[i][k]; @@ -588,7 +588,7 @@ void FixGLD::unpack_restart(int nlocal, int nth) fixes on a given processor. ------------------------------------------------------------------------- */ -int FixGLD::size_restart(int nlocal) +int FixGLD::size_restart(int /*nlocal*/) { return 3*prony_terms+1; } diff --git a/src/MISC/fix_orient_bcc.cpp b/src/MISC/fix_orient_bcc.cpp index c5ba6514a90c566688e530f85d65415039586b22..c61457793324f7ea14afd629a0044d7bfb251052 100644 --- a/src/MISC/fix_orient_bcc.cpp +++ b/src/MISC/fix_orient_bcc.cpp @@ -230,7 +230,7 @@ void FixOrientBCC::init() /* ---------------------------------------------------------------------- */ -void FixOrientBCC::init_list(int id, NeighList *ptr) +void FixOrientBCC::init_list(int /*id*/, NeighList *ptr) { list = ptr; } @@ -250,7 +250,7 @@ void FixOrientBCC::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixOrientBCC::post_force(int vflag) +void FixOrientBCC::post_force(int /*vflag*/) { int i,j,k,ii,jj,inum,jnum,m,n,nn,nsort; tagint id_self; @@ -471,7 +471,7 @@ void FixOrientBCC::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixOrientBCC::post_force_respa(int vflag, int ilevel, int iloop) +void FixOrientBCC::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } @@ -488,7 +488,7 @@ double FixOrientBCC::compute_scalar() /* ---------------------------------------------------------------------- */ int FixOrientBCC::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,k,num; tagint id; diff --git a/src/MISC/fix_orient_fcc.cpp b/src/MISC/fix_orient_fcc.cpp index 5786571a89e9a9ccb8445ee2bc4c5582af8c22f6..5b394adde70fdbe0dc3a18e9ff2439c9a71ecbec 100644 --- a/src/MISC/fix_orient_fcc.cpp +++ b/src/MISC/fix_orient_fcc.cpp @@ -228,7 +228,7 @@ void FixOrientFCC::init() /* ---------------------------------------------------------------------- */ -void FixOrientFCC::init_list(int id, NeighList *ptr) +void FixOrientFCC::init_list(int /*id*/, NeighList *ptr) { list = ptr; } @@ -248,7 +248,7 @@ void FixOrientFCC::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixOrientFCC::post_force(int vflag) +void FixOrientFCC::post_force(int /*vflag*/) { int i,j,k,ii,jj,inum,jnum,m,n,nn,nsort; tagint id_self; @@ -469,7 +469,7 @@ void FixOrientFCC::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixOrientFCC::post_force_respa(int vflag, int ilevel, int iloop) +void FixOrientFCC::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } @@ -486,7 +486,7 @@ double FixOrientFCC::compute_scalar() /* ---------------------------------------------------------------------- */ int FixOrientFCC::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,k,num; tagint id; diff --git a/src/MISC/fix_ttm.cpp b/src/MISC/fix_ttm.cpp index 7ffd979e5089ca391990427693276bc30c74b5a4..4e155813778c7f165575b5150501a6d8f86e5fdf 100644 --- a/src/MISC/fix_ttm.cpp +++ b/src/MISC/fix_ttm.cpp @@ -71,7 +71,7 @@ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) : fpr = fopen(arg[13],"r"); if (fpr == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",arg[13]); + snprintf(str,128,"Cannot open file %s",arg[13]); error->one(FLERR,str); } @@ -84,7 +84,7 @@ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) : fp = fopen(arg[15],"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix ttm file %s",arg[15]); + snprintf(str,128,"Cannot open fix ttm file %s",arg[15]); error->one(FLERR,str); } } @@ -235,7 +235,7 @@ void FixTTM::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixTTM::post_force(int vflag) +void FixTTM::post_force(int /*vflag*/) { double **x = atom->x; double **v = atom->v; @@ -287,7 +287,7 @@ void FixTTM::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixTTM::post_force_setup(int vflag) +void FixTTM::post_force_setup(int /*vflag*/) { double **f = atom->f; int *mask = atom->mask; @@ -306,14 +306,14 @@ void FixTTM::post_force_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixTTM::post_force_respa(int vflag, int ilevel, int iloop) +void FixTTM::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_force(vflag); } /* ---------------------------------------------------------------------- */ -void FixTTM::post_force_respa_setup(int vflag, int ilevel, int iloop) +void FixTTM::post_force_respa_setup(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_force_setup(vflag); } @@ -685,7 +685,7 @@ int FixTTM::maxsize_restart() size of atom nlocal's restart data ------------------------------------------------------------------------- */ -int FixTTM::size_restart(int nlocal) +int FixTTM::size_restart(int /*nlocal*/) { return 4; } diff --git a/src/MISC/pair_nm_cut.cpp b/src/MISC/pair_nm_cut.cpp index a778d7a5b6c839f4bce0dcf1f08af09be831e56e..ce077a7a045f6de8d31eb51d720638357018286d 100644 --- a/src/MISC/pair_nm_cut.cpp +++ b/src/MISC/pair_nm_cut.cpp @@ -401,8 +401,8 @@ void PairNMCut::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairNMCut::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, +double PairNMCut::single(int /*i*/, int /*j*/, int itype, int jtype, + double rsq, double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r,forcenm,phinm; diff --git a/src/MISC/xdr_compat.cpp b/src/MISC/xdr_compat.cpp index 3987aa02fc2e0252cdd1eff3ceaf0b2113cd72c1..0f4d73cdd9a3c35329c2cedd650747cad165bed0 100644 --- a/src/MISC/xdr_compat.cpp +++ b/src/MISC/xdr_compat.cpp @@ -650,7 +650,7 @@ xdrstdio_setpos (XDR *xdrs, unsigned int pos) } static xdr_int32_t * -xdrstdio_inline (XDR *xdrs, int len) +xdrstdio_inline (XDR * /*xdrs*/, int /*len*/) { /* * Must do some work to implement this: must insure diff --git a/src/MOLECULE/angle_cosine.cpp b/src/MOLECULE/angle_cosine.cpp index e3472dfd7a6b3050a0ab2690764efb8ffaece032..7fb7ce4c277f3d54f4f9aec22f0a7b8f160816f2 100644 --- a/src/MOLECULE/angle_cosine.cpp +++ b/src/MOLECULE/angle_cosine.cpp @@ -172,7 +172,7 @@ void AngleCosine::coeff(int narg, char **arg) /* ---------------------------------------------------------------------- */ -double AngleCosine::equilibrium_angle(int i) +double AngleCosine::equilibrium_angle(int /*i*/) { return MY_PI; } diff --git a/src/MOLECULE/angle_cosine_periodic.cpp b/src/MOLECULE/angle_cosine_periodic.cpp index 4e620b436e4f0a3a505d683e792e1ea8fc5cc3a0..e8dd970b3b30ec92df5b6219e3d350a3a7f4dba7 100644 --- a/src/MOLECULE/angle_cosine_periodic.cpp +++ b/src/MOLECULE/angle_cosine_periodic.cpp @@ -222,7 +222,7 @@ void AngleCosinePeriodic::coeff(int narg, char **arg) /* ---------------------------------------------------------------------- */ -double AngleCosinePeriodic::equilibrium_angle(int i) +double AngleCosinePeriodic::equilibrium_angle(int /*i*/) { return MY_PI; } diff --git a/src/MOLECULE/angle_table.cpp b/src/MOLECULE/angle_table.cpp index 235e9b4d5b379c480026b052e0fb63d7a175810a..2867865497582f60857ad44033d2392c634e2e95 100644 --- a/src/MOLECULE/angle_table.cpp +++ b/src/MOLECULE/angle_table.cpp @@ -369,7 +369,7 @@ void AngleTable::read_table(Table *tb, char *file, char *keyword) FILE *fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",file); + snprintf(str,128,"Cannot open file %s",file); error->one(FLERR,str); } diff --git a/src/MOLECULE/bond_fene.cpp b/src/MOLECULE/bond_fene.cpp index b6da72bfaf6b6968609ed1670a14149b66cd5be3..671290b0add318040bcb94fd8026c3294f28aede 100644 --- a/src/MOLECULE/bond_fene.cpp +++ b/src/MOLECULE/bond_fene.cpp @@ -242,7 +242,7 @@ void BondFENE::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -double BondFENE::single(int type, double rsq, int i, int j, +double BondFENE::single(int type, double rsq, int /*i*/, int /*j*/, double &fforce) { double r0sq = r0[type] * r0[type]; diff --git a/src/MOLECULE/bond_fene_expand.cpp b/src/MOLECULE/bond_fene_expand.cpp index 26b699d7bfdcca6cdd8d1ecb2d87e0d610c4ac38..3e191683fb8354240ad588fb4b6a764162918a0d 100644 --- a/src/MOLECULE/bond_fene_expand.cpp +++ b/src/MOLECULE/bond_fene_expand.cpp @@ -253,7 +253,7 @@ void BondFENEExpand::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -double BondFENEExpand::single(int type, double rsq, int i, int j, +double BondFENEExpand::single(int type, double rsq, int /*i*/, int /*j*/, double &fforce) { double r = sqrt(rsq); diff --git a/src/MOLECULE/bond_gromos.cpp b/src/MOLECULE/bond_gromos.cpp index 8e989259afa750eabdf5f44ac2ef91ab8f943b58..279f4fb2d40c0a714416014b94c3bae2c1da9629 100644 --- a/src/MOLECULE/bond_gromos.cpp +++ b/src/MOLECULE/bond_gromos.cpp @@ -190,7 +190,7 @@ void BondGromos::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -double BondGromos::single(int type, double rsq, int i, int j, +double BondGromos::single(int type, double rsq, int /*i*/, int /*j*/, double &fforce) { double dr = rsq - r0[type]*r0[type]; diff --git a/src/MOLECULE/bond_harmonic.cpp b/src/MOLECULE/bond_harmonic.cpp index e7f510d2de9c59607351eba0b80ac51ce19a7831..f795610b37efb435f728e1be8a6df6ac7ff32a33 100644 --- a/src/MOLECULE/bond_harmonic.cpp +++ b/src/MOLECULE/bond_harmonic.cpp @@ -190,7 +190,7 @@ void BondHarmonic::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -double BondHarmonic::single(int type, double rsq, int i, int j, +double BondHarmonic::single(int type, double rsq, int /*i*/, int /*j*/, double &fforce) { double r = sqrt(rsq); diff --git a/src/MOLECULE/bond_morse.cpp b/src/MOLECULE/bond_morse.cpp index 35be50e8df9b6eebd071933953b1298c9d6e8ad3..06af28f2b0c1f780b86288c502ffcabd1457c03b 100644 --- a/src/MOLECULE/bond_morse.cpp +++ b/src/MOLECULE/bond_morse.cpp @@ -196,7 +196,7 @@ void BondMorse::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -double BondMorse::single(int type, double rsq, int i, int j, +double BondMorse::single(int type, double rsq, int /*i*/, int /*j*/, double &fforce) { double r = sqrt(rsq); diff --git a/src/MOLECULE/bond_nonlinear.cpp b/src/MOLECULE/bond_nonlinear.cpp index 3926c3494b3666e0a30af5b5c51bd00bc92476ca..645b08177919a444f512d32eb090358fcc609f03 100644 --- a/src/MOLECULE/bond_nonlinear.cpp +++ b/src/MOLECULE/bond_nonlinear.cpp @@ -191,7 +191,7 @@ void BondNonlinear::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -double BondNonlinear::single(int type, double rsq, int i, int j, +double BondNonlinear::single(int type, double rsq, int /*i*/, int /*j*/, double &fforce) { double r = sqrt(rsq); diff --git a/src/MOLECULE/bond_quartic.cpp b/src/MOLECULE/bond_quartic.cpp index f581c7f33155e6d0059d0925e6be5524680e2574..f200030d6cccae7df156da3389d8f14715059a3a 100644 --- a/src/MOLECULE/bond_quartic.cpp +++ b/src/MOLECULE/bond_quartic.cpp @@ -251,7 +251,7 @@ void BondQuartic::init_style() return an equilbrium bond length ------------------------------------------------------------------------- */ -double BondQuartic::equilibrium_distance(int i) +double BondQuartic::equilibrium_distance(int /*i*/) { return 0.97; } diff --git a/src/MOLECULE/bond_table.cpp b/src/MOLECULE/bond_table.cpp index 7515f713df7db4d3e07fe0019f4fec10e93303a0..392904149d248936d239f7589ce3043fde8890a9 100644 --- a/src/MOLECULE/bond_table.cpp +++ b/src/MOLECULE/bond_table.cpp @@ -244,7 +244,7 @@ void BondTable::read_restart(FILE *fp) /* ---------------------------------------------------------------------- */ -double BondTable::single(int type, double rsq, int i, int j, +double BondTable::single(int type, double rsq, int /*i*/, int /*j*/, double &fforce) { double r = sqrt(rsq); @@ -298,7 +298,7 @@ void BondTable::read_table(Table *tb, char *file, char *keyword) FILE *fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",file); + snprintf(str,128,"Cannot open file %s",file); error->one(FLERR,str); } diff --git a/src/MOLECULE/fix_cmap.cpp b/src/MOLECULE/fix_cmap.cpp index 5ef2e662abfb6cc618cb8c377fef940385410b38..a889a8d0db71e7eff23f457d4e4ea06be5108770 100644 --- a/src/MOLECULE/fix_cmap.cpp +++ b/src/MOLECULE/fix_cmap.cpp @@ -295,7 +295,7 @@ void FixCMAP::pre_neighbor() store eflag, so can use it in post_force to tally per-atom energies ------------------------------------------------------------------------- */ -void FixCMAP::pre_reverse(int eflag, int vflag) +void FixCMAP::pre_reverse(int eflag, int /*vflag*/) { eflag_caller = eflag; } @@ -604,7 +604,7 @@ void FixCMAP::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixCMAP::post_force_respa(int vflag, int ilevel, int iloop) +void FixCMAP::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_force(vflag); } @@ -644,7 +644,7 @@ void FixCMAP::read_grid_map(char *cmapfile) fp = force->open_potential(cmapfile); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix cmap file %s",cmapfile); + snprintf(str,128,"Cannot open fix cmap file %s",cmapfile); error->one(FLERR,str); } } @@ -1076,7 +1076,7 @@ void FixCMAP::read_data_section(char *keyword, int n, char *buf, if (nwords != 7) { char str[128]; - sprintf(str,"Incorrect %s format in data file",keyword); + snprintf(str,128,"Incorrect %s format in data file",keyword); error->all(FLERR,str); } @@ -1163,7 +1163,7 @@ void FixCMAP::read_data_section(char *keyword, int n, char *buf, /* ---------------------------------------------------------------------- */ -bigint FixCMAP::read_data_skip_lines(char *keyword) +bigint FixCMAP::read_data_skip_lines(char * /*keyword*/) { return ncmap; } @@ -1173,7 +1173,7 @@ bigint FixCMAP::read_data_skip_lines(char *keyword) only called by proc 0 ------------------------------------------------------------------------- */ -void FixCMAP::write_data_header(FILE *fp, int mth) +void FixCMAP::write_data_header(FILE *fp, int /*mth*/) { fprintf(fp,BIGINT_FORMAT " cmap crossterms\n",ncmap); } @@ -1186,7 +1186,7 @@ void FixCMAP::write_data_header(FILE *fp, int mth) ny = columns = type + 5 atom IDs ------------------------------------------------------------------------- */ -void FixCMAP::write_data_section_size(int mth, int &nx, int &ny) +void FixCMAP::write_data_section_size(int /*mth*/, int &nx, int &ny) { int i,m; @@ -1206,7 +1206,7 @@ void FixCMAP::write_data_section_size(int mth, int &nx, int &ny) buf allocated by caller as owned crossterms by 6 ------------------------------------------------------------------------- */ -void FixCMAP::write_data_section_pack(int mth, double **buf) +void FixCMAP::write_data_section_pack(int /*mth*/, double **buf) { int i,m; @@ -1237,7 +1237,7 @@ void FixCMAP::write_data_section_pack(int mth, double **buf) only called by proc 0 ------------------------------------------------------------------------- */ -void FixCMAP::write_data_section_keyword(int mth, FILE *fp) +void FixCMAP::write_data_section_keyword(int /*mth*/, FILE *fp) { fprintf(fp,"\nCMAP\n\n"); } @@ -1249,7 +1249,7 @@ void FixCMAP::write_data_section_keyword(int mth, FILE *fp) only called by proc 0 ------------------------------------------------------------------------- */ -void FixCMAP::write_data_section(int mth, FILE *fp, +void FixCMAP::write_data_section(int /*mth*/, FILE *fp, int n, double **buf, int index) { for (int i = 0; i < n; i++) @@ -1383,7 +1383,7 @@ void FixCMAP::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixCMAP::copy_arrays(int i, int j, int delflag) +void FixCMAP::copy_arrays(int i, int j, int /*delflag*/) { num_crossterm[j] = num_crossterm[i]; diff --git a/src/MOLECULE/pair_hbond_dreiding_lj.cpp b/src/MOLECULE/pair_hbond_dreiding_lj.cpp index 26ff499dec6cd0dd2b6b8bb6ad15c95fb97032ca..c0c885d4d4ccd3cb144cc7d6958c384f5cc58d2b 100644 --- a/src/MOLECULE/pair_hbond_dreiding_lj.cpp +++ b/src/MOLECULE/pair_hbond_dreiding_lj.cpp @@ -468,7 +468,7 @@ double PairHbondDreidingLJ::init_one(int i, int j) double PairHbondDreidingLJ::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double /*factor_lj*/, double &fforce) { int k,kk,ktype,knum,m; diff --git a/src/MOLECULE/pair_hbond_dreiding_morse.cpp b/src/MOLECULE/pair_hbond_dreiding_morse.cpp index 749053164cf5746602ac31e933ac533659e51609..f464d2c621f38183ce57eb72e14525b8a23c7e9e 100644 --- a/src/MOLECULE/pair_hbond_dreiding_morse.cpp +++ b/src/MOLECULE/pair_hbond_dreiding_morse.cpp @@ -371,7 +371,7 @@ void PairHbondDreidingMorse::init_style() double PairHbondDreidingMorse::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double /*factor_lj*/, double &fforce) { int k,kk,ktype,knum,m; diff --git a/src/MOLECULE/pair_tip4p_cut.cpp b/src/MOLECULE/pair_tip4p_cut.cpp index e9f52b87246c3ef076818253b160893d019c44b6..79dd79b18013094187985c8a72d66f6e72fa1eaf 100644 --- a/src/MOLECULE/pair_tip4p_cut.cpp +++ b/src/MOLECULE/pair_tip4p_cut.cpp @@ -443,7 +443,7 @@ void PairTIP4PCut::init_style() init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairTIP4PCut::init_one(int i, int j) +double PairTIP4PCut::init_one(int /*i*/, int /*j*/) { // include TIP4P qdist in full cutoff, qdist = 0.0 if not TIP4P diff --git a/src/Makefile b/src/Makefile index 948d203cfe078a51e70ca617375e0b90b44a3257..eefc64b274b1e9226f27456da78976f4e126ce4b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -53,7 +53,7 @@ endif # PACKEXT = subset that require an external (downloaded) library PACKAGE = asphere body class2 colloid compress coreshell dipole gpu \ - granular kim kokkos kspace latte manybody mc meam misc \ + granular kim kokkos kspace latte manybody mc meam message misc \ molecule mpiio mscg opt peri poems \ python qeq reax replica rigid shock snap spin srd voronoi @@ -61,18 +61,18 @@ PACKUSER = user-atc user-awpmd user-bocs user-cgdna user-cgsdk user-colvars \ user-diffraction user-dpd user-drude user-eff user-fep user-h5md \ user-intel user-lb user-manifold user-meamc user-meso \ user-mgpt user-misc user-mofff user-molfile \ - user-netcdf user-omp user-phonon user-qmmm user-qtb \ - user-quip user-reaxc user-smd user-smtbq user-sph user-tally \ - user-uef user-vtk + user-netcdf user-omp user-phonon user-ptm user-qmmm user-qtb \ + user-quip user-reaxc user-scafacos user-smd user-smtbq \ + user-sph user-tally user-uef user-vtk -PACKLIB = compress gpu kim kokkos latte meam mpiio mscg poems \ +PACKLIB = compress gpu kim kokkos latte meam message mpiio mscg poems \ python reax voronoi \ user-atc user-awpmd user-colvars user-h5md user-lb user-molfile \ - user-netcdf user-qmmm user-quip user-smd user-vtk + user-netcdf user-qmmm user-quip user-scafacos user-smd user-vtk PACKSYS = compress mpiio python user-lb -PACKINT = gpu kokkos meam poems reax user-atc user-awpmd user-colvars +PACKINT = gpu kokkos meam message poems reax user-atc user-awpmd user-colvars PACKEXT = kim mscg voronoi \ user-h5md user-molfile user-netcdf user-qmmm user-quip \ diff --git a/src/PERI/fix_peri_neigh.cpp b/src/PERI/fix_peri_neigh.cpp index 42d86e14b2b4eec17c78d95457c48647af0f7b86..66137e6a01445c5168f4a6a6cb3484f989954157 100644 --- a/src/PERI/fix_peri_neigh.cpp +++ b/src/PERI/fix_peri_neigh.cpp @@ -140,7 +140,7 @@ void FixPeriNeigh::init() /* ---------------------------------------------------------------------- */ -void FixPeriNeigh::init_list(int id, NeighList *ptr) +void FixPeriNeigh::init_list(int /*id*/, NeighList *ptr) { list = ptr; } @@ -159,7 +159,7 @@ void FixPeriNeigh::min_setup(int vflag) must be done in setup (not init) since fix init comes before neigh init ------------------------------------------------------------------------- */ -void FixPeriNeigh::setup(int vflag) +void FixPeriNeigh::setup(int /*vflag*/) { int i,j,ii,jj,itype,jtype,inum,jnum; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; @@ -441,7 +441,7 @@ void FixPeriNeigh::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixPeriNeigh::copy_arrays(int i, int j, int delflag) +void FixPeriNeigh::copy_arrays(int i, int j, int /*delflag*/) { npartner[j] = npartner[i]; for (int m = 0; m < npartner[j]; m++) { @@ -514,7 +514,7 @@ int FixPeriNeigh::unpack_exchange(int nlocal, double *buf) /* ---------------------------------------------------------------------- */ int FixPeriNeigh::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/PERI/pair_peri_eps.cpp b/src/PERI/pair_peri_eps.cpp index 9950c36f41446ca28adbeb0162dd188adf0eb6e6..76267426c64f6627b723d8268693f65267e60cbb 100644 --- a/src/PERI/pair_peri_eps.cpp +++ b/src/PERI/pair_peri_eps.cpp @@ -434,7 +434,7 @@ void PairPeriEPS::allocate() global settings ------------------------------------------------------------------------- */ -void PairPeriEPS::settings(int narg, char **arg) +void PairPeriEPS::settings(int narg, char **/*arg*/) { if (narg) error->all(FLERR,"Illegal pair_style command"); } @@ -799,7 +799,7 @@ double PairPeriEPS::compute_DeviatoricForceStateNorm(int i) ---------------------------------------------------------------------- */ int PairPeriEPS::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/PERI/pair_peri_lps.cpp b/src/PERI/pair_peri_lps.cpp index 4c48223b0749e9ebc7b4cbe4e4d1345854da21b9..383b91c6f554e62ae1e8c00497bcc69350f29830 100644 --- a/src/PERI/pair_peri_lps.cpp +++ b/src/PERI/pair_peri_lps.cpp @@ -364,7 +364,7 @@ void PairPeriLPS::allocate() global settings ------------------------------------------------------------------------- */ -void PairPeriLPS::settings(int narg, char **arg) +void PairPeriLPS::settings(int narg, char **/*arg*/) { if (narg) error->all(FLERR,"Illegal pair_style command"); } @@ -631,7 +631,7 @@ void PairPeriLPS::compute_dilatation() ---------------------------------------------------------------------- */ int PairPeriLPS::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/PERI/pair_peri_pmb.cpp b/src/PERI/pair_peri_pmb.cpp index 81461f0b83f0c7c12df432046036a6003199397f..772e47f2d64b60839af00f6d5a98f9e104bdf958 100644 --- a/src/PERI/pair_peri_pmb.cpp +++ b/src/PERI/pair_peri_pmb.cpp @@ -297,7 +297,7 @@ void PairPeriPMB::allocate() global settings ------------------------------------------------------------------------- */ -void PairPeriPMB::settings(int narg, char **arg) +void PairPeriPMB::settings(int narg, char **/*arg*/) { if (narg) error->all(FLERR,"Illegal pair_style command"); } @@ -441,7 +441,7 @@ void PairPeriPMB::read_restart(FILE *fp) /* ---------------------------------------------------------------------- */ double PairPeriPMB::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double /*factor_lj*/, double &fforce) { double delx0,dely0,delz0,rsq0; diff --git a/src/PERI/pair_peri_ves.cpp b/src/PERI/pair_peri_ves.cpp index a9f620ef4b7bcbc4b92b7881a6ebaf8e8ea0e8fc..7590077f0e3f55c89057f70b746cbcec989838dc 100644 --- a/src/PERI/pair_peri_ves.cpp +++ b/src/PERI/pair_peri_ves.cpp @@ -411,7 +411,7 @@ void PairPeriVES::allocate() global settings ------------------------------------------------------------------------- */ -void PairPeriVES::settings(int narg, char **arg) +void PairPeriVES::settings(int narg, char **/*arg*/) { if (narg) error->all(FLERR,"Illegal pair_style command"); } @@ -697,7 +697,7 @@ void PairPeriVES::compute_dilatation() ---------------------------------------------------------------------- */ int PairPeriVES::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/POEMS/fix_poems.cpp b/src/POEMS/fix_poems.cpp index 2c2fefb250b14252fa31e88e489ea9f307e918a5..f345d52aabfd12e68be37c0e4b115120e7884764 100644 --- a/src/POEMS/fix_poems.cpp +++ b/src/POEMS/fix_poems.cpp @@ -369,7 +369,7 @@ void FixPOEMS::init() if (pflag && (modify->fmask[i] & POST_FORCE) && !modify->fix[i]->rigid_flag) { char str[128]; - sprintf(str,"Fix %s alters forces after fix poems",modify->fix[i]->id); + snprintf(str,128,"Fix %s alters forces after fix poems",modify->fix[i]->id); error->warning(FLERR,str); } } @@ -961,7 +961,7 @@ void FixPOEMS::readfile(char *file) fp = fopen(file,"r"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix poems file %s",file); + snprintf(str,128,"Cannot open fix poems file %s",file); error->one(FLERR,str); } } diff --git a/src/PYTHON/fix_python_invoke.h b/src/PYTHON/fix_python_invoke.h index c277e295a10a372d320c1679df3bf209d7e29535..89310eededcc096a00a9a5c988d1b58639f646e5 100644 --- a/src/PYTHON/fix_python_invoke.h +++ b/src/PYTHON/fix_python_invoke.h @@ -13,8 +13,8 @@ #ifdef FIX_CLASS -FixStyle(python,FixPythonInvoke) FixStyle(python/invoke,FixPythonInvoke) +FixStyle(python,FixPythonInvoke) #else diff --git a/src/Purge.list b/src/Purge.list index cb98636b1c17860fab98343824d10bf5f2063bbf..6cfc580c25634d658809847a01560018759e22fa 100644 --- a/src/Purge.list +++ b/src/Purge.list @@ -24,6 +24,12 @@ style_nstencil.h style_ntopo.h # other auto-generated files lmpinstalledpkgs.h +# renamed on 25 September 2018 +compute_smd_triangle_mesh_vertices.h +compute_smd_triangle_mesh_vertices.cpp +# renamed on 6 September 2018 +pair_cdeam_omp.h +pair_cdeam_omp.cpp # renamed on 31 July 2018 pair_cdeam.h pair_cdeam.cpp diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index 8acf4498f5c6f67db6a1640d4872ff34efe2b746..49e0a6d423654a7e7a2f5daff07f4b1a734f6290 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -274,7 +274,7 @@ void FixQEq::reallocate_matrix() /* ---------------------------------------------------------------------- */ -void FixQEq::init_list(int id, NeighList *ptr) +void FixQEq::init_list(int /*id*/, NeighList *ptr) { list = ptr; } @@ -329,7 +329,7 @@ void FixQEq::init_storage() /* ---------------------------------------------------------------------- */ -void FixQEq::pre_force_respa(int vflag, int ilevel, int iloop) +void FixQEq::pre_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) pre_force(vflag); } @@ -471,7 +471,7 @@ void FixQEq::calculate_Q() /* ---------------------------------------------------------------------- */ int FixQEq::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int m; @@ -552,7 +552,7 @@ void FixQEq::grow_arrays(int nmax) copy values within fictitious charge arrays ------------------------------------------------------------------------- */ -void FixQEq::copy_arrays(int i, int j, int delflag) +void FixQEq::copy_arrays(int i, int j, int /*delflag*/) { for (int m = 0; m < nprev; m++) { s_hist[j][m] = s_hist[i][m]; @@ -715,7 +715,7 @@ void FixQEq::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix qeq parameter file %s",file); + snprintf(str,128,"Cannot open fix qeq parameter file %s",file); error->one(FLERR,str); } } diff --git a/src/QEQ/fix_qeq_dynamic.cpp b/src/QEQ/fix_qeq_dynamic.cpp index aeb8dd2c59043d1c1852e8cd678074d19e51785c..f496c7e6c0c28c58b2466f17bbb15a07b1dc9d4a 100644 --- a/src/QEQ/fix_qeq_dynamic.cpp +++ b/src/QEQ/fix_qeq_dynamic.cpp @@ -88,7 +88,7 @@ void FixQEqDynamic::init() /* ---------------------------------------------------------------------- */ -void FixQEqDynamic::pre_force(int vflag) +void FixQEqDynamic::pre_force(int /*vflag*/) { int i,ii,iloop,inum,*ilist; double qmass,dtq2; @@ -247,7 +247,7 @@ double FixQEqDynamic::compute_eneg() /* ---------------------------------------------------------------------- */ int FixQEqDynamic::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int m=0; diff --git a/src/QEQ/fix_qeq_fire.cpp b/src/QEQ/fix_qeq_fire.cpp index db63bec2063f98de16b963be899e72b920d06023..83c9907f1b6e29c2cd3530a14d10720a682d3fe2 100644 --- a/src/QEQ/fix_qeq_fire.cpp +++ b/src/QEQ/fix_qeq_fire.cpp @@ -104,7 +104,7 @@ void FixQEqFire::init() /* ---------------------------------------------------------------------- */ -void FixQEqFire::pre_force(int vflag) +void FixQEqFire::pre_force(int /*vflag*/) { int inum, *ilist; int i,ii,iloop; @@ -311,7 +311,7 @@ double FixQEqFire::compute_eneg() /* ---------------------------------------------------------------------- */ int FixQEqFire::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int m = 0; diff --git a/src/QEQ/fix_qeq_point.cpp b/src/QEQ/fix_qeq_point.cpp index bf7130c1d6704b334f05c227245082e61f107fd9..db2d800c06b40f5a6405f6fcc376562fe60259de 100644 --- a/src/QEQ/fix_qeq_point.cpp +++ b/src/QEQ/fix_qeq_point.cpp @@ -67,7 +67,7 @@ void FixQEqPoint::init() /* ---------------------------------------------------------------------- */ -void FixQEqPoint::pre_force(int vflag) +void FixQEqPoint::pre_force(int /*vflag*/) { if (update->ntimestep % nevery) return; diff --git a/src/QEQ/fix_qeq_shielded.cpp b/src/QEQ/fix_qeq_shielded.cpp index 70898fd96c68908ca4c74203a72c577883710ff0..88cd1ab3ad22509109df62714846fa2614c68b4e 100644 --- a/src/QEQ/fix_qeq_shielded.cpp +++ b/src/QEQ/fix_qeq_shielded.cpp @@ -111,7 +111,7 @@ void FixQEqShielded::init_shielding() /* ---------------------------------------------------------------------- */ -void FixQEqShielded::pre_force(int vflag) +void FixQEqShielded::pre_force(int /*vflag*/) { if (update->ntimestep % nevery) return; diff --git a/src/QEQ/fix_qeq_slater.cpp b/src/QEQ/fix_qeq_slater.cpp index 4ddcf06357b3e5c42e010a47c16f1fd8177a0a16..81fdc73241d4f171f155692952d2fd57bbb9f71f 100644 --- a/src/QEQ/fix_qeq_slater.cpp +++ b/src/QEQ/fix_qeq_slater.cpp @@ -107,7 +107,7 @@ void FixQEqSlater::extract_streitz() /* ---------------------------------------------------------------------- */ -void FixQEqSlater::pre_force(int vflag) +void FixQEqSlater::pre_force(int /*vflag*/) { if (update->ntimestep % nevery) return; diff --git a/src/REAX/fix_reax_bonds.cpp b/src/REAX/fix_reax_bonds.cpp index 84e4a66e6cede6db5d347281df036486cc2efec9..c6c1d309ee1e3a9e8099f51ccd35a735e72dbf73 100644 --- a/src/REAX/fix_reax_bonds.cpp +++ b/src/REAX/fix_reax_bonds.cpp @@ -53,7 +53,7 @@ FixReaxBonds::FixReaxBonds(LAMMPS *lmp, int narg, char **arg) : if (suffix && strcmp(suffix,".gz") == 0) { #ifdef LAMMPS_GZIP char gzip[128]; - sprintf(gzip,"gzip -6 > %s",arg[4]); + snprintf(gzip,128,"gzip -6 > %s",arg[4]); #ifdef _WIN32 fp = _popen(gzip,"wb"); #else @@ -66,7 +66,7 @@ FixReaxBonds::FixReaxBonds(LAMMPS *lmp, int narg, char **arg) : if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix reax/bonds file %s",arg[4]); + snprintf(str,128,"Cannot open fix reax/bonds file %s",arg[4]); error->one(FLERR,str); } } @@ -222,11 +222,8 @@ void FixReaxBonds::OutputReaxBonds(bigint ntimestep, FILE *fp) numbonds = nint(buf[j+2]); fprintf(fp," %d %d %d",nint(buf[j]),nint(buf[j+1]),numbonds); j += 3; - if (numbonds > nsbmax_most) { - char str[128]; - sprintf(str,"Fix reax/bonds numbonds > nsbmax_most"); - error->one(FLERR,str); - } + if (numbonds > nsbmax_most) + error->one(FLERR,"Fix reax/bonds numbonds > nsbmax_most"); // print connection table diff --git a/src/REAX/pair_reax.cpp b/src/REAX/pair_reax.cpp index 24083a288ab6ec3b5b66a771ca3a48a6b86d9cc2..a430380711605f9d8fd068c66986d56bf232d720 100644 --- a/src/REAX/pair_reax.cpp +++ b/src/REAX/pair_reax.cpp @@ -46,8 +46,8 @@ using namespace LAMMPS_NS; PairREAX::PairREAX(LAMMPS *lmp) : Pair(lmp) { if (comm->me == 0) - error->warning(FLERR,"The pair_style reax command is unsupported. " - "Please switch to pair_style reax/c instead"); + error->warning(FLERR,"THE pair_style reax COMMAND IS OBSOLETE AND " + "WILL BE REMOVED VERY SOON. PLEASE USE reax/c"); single_enable = 0; restartinfo = 0; diff --git a/src/REPLICA/fix_event.cpp b/src/REPLICA/fix_event.cpp index 3b9b49ac57a24977766a144388a99b52cf3d8103..8fc5de6b1600edf0fec80b3b71b3b83f0408461a 100644 --- a/src/REPLICA/fix_event.cpp +++ b/src/REPLICA/fix_event.cpp @@ -241,7 +241,7 @@ void FixEvent::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixEvent::copy_arrays(int i, int j, int delflag) +void FixEvent::copy_arrays(int i, int j, int /*delflag*/) { xevent[j][0] = xevent[i][0]; xevent[j][1] = xevent[i][1]; diff --git a/src/REPLICA/fix_neb.cpp b/src/REPLICA/fix_neb.cpp index e5d24da392649fe1f8cecbd9bc20fea0e17194b9..dc86c709564822e20929e5fcd0c3315ce37a7dcb 100644 --- a/src/REPLICA/fix_neb.cpp +++ b/src/REPLICA/fix_neb.cpp @@ -270,7 +270,7 @@ void FixNEB::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixNEB::min_post_force(int vflag) +void FixNEB::min_post_force(int /*vflag*/) { double vprev,vnext; double delxp,delyp,delzp,delxn,delyn,delzn; diff --git a/src/REPLICA/neb.cpp b/src/REPLICA/neb.cpp index c9aedf74018409a5913ed1055d554775e4704746..3963379356c08902dabc6d6c0adec0d2f314e248 100644 --- a/src/REPLICA/neb.cpp +++ b/src/REPLICA/neb.cpp @@ -549,7 +549,7 @@ void NEB::open(char *file) else { #ifdef LAMMPS_GZIP char gunzip[128]; - sprintf(gunzip,"gzip -c -d %s",file); + snprintf(gunzip,128,"gzip -c -d %s",file); #ifdef _WIN32 fp = _popen(gunzip,"rb"); @@ -564,7 +564,7 @@ void NEB::open(char *file) if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",file); + snprintf(str,128,"Cannot open file %s",file); error->one(FLERR,str); } } diff --git a/src/REPLICA/tad.cpp b/src/REPLICA/tad.cpp index 46073952fc6fe341f797364507b6d83fa392b59e..da42ba6faef97f44d513092b663434f4106f71f0 100644 --- a/src/REPLICA/tad.cpp +++ b/src/REPLICA/tad.cpp @@ -712,10 +712,7 @@ void TAD::perform_neb(int ievent) args[0] = (char *) "neb"; args[1] = (char *) "all"; args[2] = (char *) "neb"; - char str[128]; - args[3] = str; - double kspring = 1.0; - sprintf(args[3],"%f",kspring); + args[3] = (char *) "1.0"; modify->add_fix(narg2,args); fix_neb = (Fix *) modify->fix[modify->nfix-1]; delete [] args; diff --git a/src/RIGID/fix_rattle.cpp b/src/RIGID/fix_rattle.cpp index 7ade8d6848f176e64456dd875c53768a69fe2fab..403f3091c62d6a1941519f93b984cfe6637b8c76 100644 --- a/src/RIGID/fix_rattle.cpp +++ b/src/RIGID/fix_rattle.cpp @@ -185,7 +185,7 @@ void FixRattle::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixRattle::post_force_respa(int vflag, int ilevel, int iloop) +void FixRattle::post_force_respa(int vflag, int ilevel, int /*iloop*/) { // remember vflag for the coordinate correction in this->final_integrate @@ -625,7 +625,7 @@ void FixRattle::update_v_half_nocons() /* ---------------------------------------------------------------------- */ -void FixRattle::update_v_half_nocons_respa(int ilevel) +void FixRattle::update_v_half_nocons_respa(int /*ilevel*/) { // carry out unconstrained velocity update diff --git a/src/RIGID/fix_rigid.cpp b/src/RIGID/fix_rigid.cpp index 7104d3084994d2c7d9c4b4ff5d89d8aa387d6c00..39c49ca1c4bfc32c78b6a1edce01bb1284d9a870 100644 --- a/src/RIGID/fix_rigid.cpp +++ b/src/RIGID/fix_rigid.cpp @@ -730,7 +730,7 @@ void FixRigid::init() if (rflag && (modify->fmask[i] & POST_FORCE) && !modify->fix[i]->rigid_flag) { char str[128]; - sprintf(str,"Fix %s alters forces after fix rigid",modify->fix[i]->id); + snprintf(str,128,"Fix %s alters forces after fix rigid",modify->fix[i]->id); error->warning(FLERR,str); } } @@ -1030,7 +1030,6 @@ void FixRigid::enforce2d() void FixRigid::compute_forces_and_torques() { int i,ibody; - double dtfm; // sum over atoms to get force and torque on rigid body @@ -1096,7 +1095,7 @@ void FixRigid::compute_forces_and_torques() /* ---------------------------------------------------------------------- */ -void FixRigid::post_force(int vflag) +void FixRigid::post_force(int /*vflag*/) { if (langflag) apply_langevin_thermostat(); if (earlyflag) compute_forces_and_torques(); @@ -1141,7 +1140,7 @@ void FixRigid::final_integrate() /* ---------------------------------------------------------------------- */ -void FixRigid::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixRigid::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) { dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel] * force->ftm2v; @@ -1153,7 +1152,7 @@ void FixRigid::initial_integrate_respa(int vflag, int ilevel, int iloop) /* ---------------------------------------------------------------------- */ -void FixRigid::final_integrate_respa(int ilevel, int iloop) +void FixRigid::final_integrate_respa(int ilevel, int /*iloop*/) { dtf = 0.5 * step_respa[ilevel] * force->ftm2v; final_integrate(); @@ -2272,7 +2271,7 @@ void FixRigid::readfile(int which, double *vec, fp = fopen(infile,"r"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix rigid infile %s",infile); + snprintf(str,128,"Cannot open fix rigid infile %s",infile); error->one(FLERR,str); } @@ -2381,11 +2380,11 @@ void FixRigid::write_restart_file(char *file) if (me) return; char outfile[128]; - sprintf(outfile,"%s.rigid",file); + snprintf(outfile,128,"%s.rigid",file); FILE *fp = fopen(outfile,"w"); if (fp == NULL) { char str[192]; - sprintf(str,"Cannot open fix rigid restart file %s",outfile); + snprintf(str,192,"Cannot open fix rigid restart file %s",outfile); error->one(FLERR,str); } @@ -2478,7 +2477,7 @@ void FixRigid::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixRigid::copy_arrays(int i, int j, int delflag) +void FixRigid::copy_arrays(int i, int j, int /*delflag*/) { body[j] = body[i]; xcmimage[j] = xcmimage[i]; diff --git a/src/RIGID/fix_rigid_nh.cpp b/src/RIGID/fix_rigid_nh.cpp index 96c44d15b5b0e1861803203e4d20e0d0e052e891..4dceb1b8b4c214aab95999db1ff901df53341062 100644 --- a/src/RIGID/fix_rigid_nh.cpp +++ b/src/RIGID/fix_rigid_nh.cpp @@ -591,9 +591,9 @@ void FixRigidNH::initial_integrate(int vflag) void FixRigidNH::final_integrate() { - int i,ibody; + int ibody; double tmp,scale_t[3],scale_r; - double dtfm,xy,xz,yz; + double dtfm; double mbody[3],tbody[3],fquat[4]; double dtf2 = dtf * 2.0; diff --git a/src/RIGID/fix_rigid_nh_small.cpp b/src/RIGID/fix_rigid_nh_small.cpp index 135a1fb4bdb0e8ee37b8e958bb31e5b6117a1a33..5016d3f1685eed9d809172de4d24344a056c5f75 100644 --- a/src/RIGID/fix_rigid_nh_small.cpp +++ b/src/RIGID/fix_rigid_nh_small.cpp @@ -618,7 +618,7 @@ void FixRigidNHSmall::initial_integrate(int vflag) void FixRigidNHSmall::final_integrate() { - int i,ibody; + int ibody; double tmp,scale_t[3],scale_r; double dtfm; double mbody[3],tbody[3],fquat[4]; diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index c1de89efc70da5221fd8c0ee6c75a0ec5312d450..44e1870e0a97a2b14201a83bc72bd1939027413c 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -569,7 +569,7 @@ void FixRigidSmall::init() if (rflag && (modify->fmask[i] & POST_FORCE) && !modify->fix[i]->rigid_flag) { char str[128]; - sprintf(str,"Fix %s alters forces after fix rigid",modify->fix[i]->id); + snprintf(str,128,"Fix %s alters forces after fix rigid",modify->fix[i]->id); error->warning(FLERR,str); } } @@ -867,7 +867,7 @@ void FixRigidSmall::enforce2d() /* ---------------------------------------------------------------------- */ -void FixRigidSmall::post_force(int vflag) +void FixRigidSmall::post_force(int /*vflag*/) { if (langflag) apply_langevin_thermostat(); if (earlyflag) compute_forces_and_torques(); @@ -1004,7 +1004,7 @@ void FixRigidSmall::final_integrate() /* ---------------------------------------------------------------------- */ -void FixRigidSmall::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixRigidSmall::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) { dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel] * force->ftm2v; @@ -1016,7 +1016,7 @@ void FixRigidSmall::initial_integrate_respa(int vflag, int ilevel, int iloop) /* ---------------------------------------------------------------------- */ -void FixRigidSmall::final_integrate_respa(int ilevel, int iloop) +void FixRigidSmall::final_integrate_respa(int ilevel, int /*iloop*/) { dtf = 0.5 * step_respa[ilevel] * force->ftm2v; final_integrate(); @@ -2482,7 +2482,7 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) fp = fopen(infile,"r"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix rigid/small infile %s",infile); + snprintf(str,128,"Cannot open fix rigid/small infile %s",infile); error->one(FLERR,str); } @@ -2597,11 +2597,11 @@ void FixRigidSmall::write_restart_file(char *file) if (me == 0) { char outfile[128]; - sprintf(outfile,"%s.rigid",file); + snprintf(outfile,128,"%s.rigid",file); fp = fopen(outfile,"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix rigid restart file %s",outfile); + snprintf(str,128,"Cannot open fix rigid restart file %s",outfile); error->one(FLERR,str); } @@ -2999,7 +2999,7 @@ int FixRigidSmall::unpack_exchange(int nlocal, double *buf) ------------------------------------------------------------------------- */ int FixRigidSmall::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j; double *xcm,*vcm,*quat,*omega,*ex_space,*ey_space,*ez_space,*conjqm; diff --git a/src/RIGID/fix_shake.cpp b/src/RIGID/fix_shake.cpp index 0beef3bfa24cec383ba2a5d29304aff1bb596366..e0d1bf132b49f6c14029bc052e23fc4cb6d0fa9e 100644 --- a/src/RIGID/fix_shake.cpp +++ b/src/RIGID/fix_shake.cpp @@ -2451,7 +2451,7 @@ void FixShake::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixShake::copy_arrays(int i, int j, int delflag) +void FixShake::copy_arrays(int i, int j, int /*delflag*/) { int flag = shake_flag[j] = shake_flag[i]; if (flag == 1) { @@ -2528,7 +2528,7 @@ void FixShake::update_arrays(int i, int atom_offset) ------------------------------------------------------------------------- */ void FixShake::set_molecule(int nlocalprev, tagint tagprev, int imol, - double *xgeom, double *vcm, double *quat) + double * /*xgeom*/, double * /*vcm*/, double * /*quat*/) { int m,flag; diff --git a/src/SHOCK/fix_append_atoms.cpp b/src/SHOCK/fix_append_atoms.cpp index d898d2a790d62a03c8451eaf9c564fe52334f3f1..2e515839c5ecb5d5100697e436eb17e493a7950a 100644 --- a/src/SHOCK/fix_append_atoms.cpp +++ b/src/SHOCK/fix_append_atoms.cpp @@ -231,7 +231,7 @@ int FixAppendAtoms::setmask() /* ---------------------------------------------------------------------- */ -void FixAppendAtoms::initial_integrate(int vflag) +void FixAppendAtoms::initial_integrate(int /*vflag*/) { if (update->ntimestep % freq == 0) next_reneighbor = update->ntimestep; } @@ -331,7 +331,7 @@ int FixAppendAtoms::get_spatial() /* ---------------------------------------------------------------------- */ -void FixAppendAtoms::post_force(int vflag) +void FixAppendAtoms::post_force(int /*vflag*/) { double **f = atom->f; double **v = atom->v; diff --git a/src/SHOCK/fix_msst.cpp b/src/SHOCK/fix_msst.cpp index a7890c3afa4ab8825c585c06faae9cd4ef5135de..c800e8a85da63b21eb245158986010e222dd442e 100644 --- a/src/SHOCK/fix_msst.cpp +++ b/src/SHOCK/fix_msst.cpp @@ -357,7 +357,7 @@ void FixMSST::init() compute T,P before integrator starts ------------------------------------------------------------------------- */ -void FixMSST::setup(int vflag) +void FixMSST::setup(int /*vflag*/) { lagrangian_position = 0.0; @@ -442,7 +442,7 @@ void FixMSST::setup(int vflag) 1st half of Verlet update ------------------------------------------------------------------------- */ -void FixMSST::initial_integrate(int vflag) +void FixMSST::initial_integrate(int /*vflag*/) { int i,k; double p_msst; // MSST driving pressure diff --git a/src/SHOCK/fix_wall_piston.cpp b/src/SHOCK/fix_wall_piston.cpp index 7146b46c1e12f4a021a71b9d4c1f0dd963975cd3..eb89e19517d5b02ed2db08dbb4824c52615cf037 100644 --- a/src/SHOCK/fix_wall_piston.cpp +++ b/src/SHOCK/fix_wall_piston.cpp @@ -171,7 +171,7 @@ int FixWallPiston::setmask() /* ---------------------------------------------------------------------- */ -void FixWallPiston::initial_integrate(int vflag) +void FixWallPiston::initial_integrate(int /*vflag*/) { next_reneighbor = update->ntimestep; } diff --git a/src/SNAP/compute_sna_atom.cpp b/src/SNAP/compute_sna_atom.cpp index 0d8b0bae14c3f82ccac058b88c9e37757c8f1e12..5ca63a7e850b27ed9420ee86985273475638d54e 100644 --- a/src/SNAP/compute_sna_atom.cpp +++ b/src/SNAP/compute_sna_atom.cpp @@ -115,7 +115,8 @@ ComputeSNAAtom::ComputeSNAAtom(LAMMPS *lmp, int narg, char **arg) : } else error->all(FLERR,"Illegal compute sna/atom command"); } - snaptr = new SNA*[comm->nthreads]; + nthreads = comm->nthreads; + snaptr = new SNA*[nthreads]; #if defined(_OPENMP) #pragma omp parallel default(none) shared(lmp,rfac0,twojmax,rmin0,switchflag,bzeroflag) #endif @@ -146,6 +147,8 @@ ComputeSNAAtom::~ComputeSNAAtom() memory->destroy(radelem); memory->destroy(wjelem); memory->destroy(cutsq); + for (int tid = 0; tiddestroy(radelem); memory->destroy(wjelem); memory->destroy(cutsq); + for (int tid = 0; tiddestroy(radelem); memory->destroy(wjelem); memory->destroy(cutsq); + + for (int tid = 0; tidopen_potential(coefffilename); if (fpcoeff == NULL) { char str[128]; - sprintf(str,"Cannot open SNAP coefficient file %s",coefffilename); + snprintf(str,128,"Cannot open SNAP coefficient file %s",coefffilename); error->one(FLERR,str); } } @@ -1757,7 +1757,7 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) fpparam = force->open_potential(paramfilename); if (fpparam == NULL) { char str[128]; - sprintf(str,"Cannot open SNAP parameter file %s",paramfilename); + snprintf(str,128,"Cannot open SNAP parameter file %s",paramfilename); error->one(FLERR,str); } } diff --git a/src/SNAP/sna.cpp b/src/SNAP/sna.cpp index 31505730433a4b00b2956c10afb5a272e94a0f55..7ed1bc1e23e25aa12db502152fd5d37b9fac9494 100644 --- a/src/SNAP/sna.cpp +++ b/src/SNAP/sna.cpp @@ -1231,7 +1231,7 @@ void SNA::compute_uarray(double x, double y, double z, } void SNA::compute_uarray_omp(double x, double y, double z, - double z0, double r, int sub_threads) + double z0, double r, int /*sub_threads*/) { double r0inv; double a_r, b_r, a_i, b_i; diff --git a/src/SPIN/atom_vec_spin.cpp b/src/SPIN/atom_vec_spin.cpp index 6460a6185fb72d0635b623dbd7e8a2e7a2d27ba6..24c4480e049e9ac9fe0de19f7095776d4c04fc42 100644 --- a/src/SPIN/atom_vec_spin.cpp +++ b/src/SPIN/atom_vec_spin.cpp @@ -943,7 +943,7 @@ bigint AtomVecSpin::memory_usage() return bytes; } -void AtomVecSpin::force_clear(int n, size_t nbytes) +void AtomVecSpin::force_clear(int /*n*/, size_t nbytes) { memset(&atom->f[0][0],0,3*nbytes); memset(&atom->fm[0][0],0,3*nbytes); diff --git a/src/SPIN/compute_spin.h b/src/SPIN/compute_spin.h index 59f0ce2876d3e718d08c88bece84475a74dc04ef..c5d55b84cb17ba69bc4902111a88c188a0123fe4 100644 --- a/src/SPIN/compute_spin.h +++ b/src/SPIN/compute_spin.h @@ -13,7 +13,7 @@ #ifdef COMPUTE_CLASS -ComputeStyle(compute/spin,ComputeSpin) +ComputeStyle(spin,ComputeSpin) #else @@ -33,7 +33,6 @@ class ComputeSpin : public Compute { private: double kb,hbar; - int usecenter; void allocate(); }; diff --git a/src/SPIN/fix_langevin_spin.cpp b/src/SPIN/fix_langevin_spin.cpp index cb344654826883c41b7d6fcf8802d5ebacdccd0d..55b4d8dfec51f091bec6139a86815c251006535a 100644 --- a/src/SPIN/fix_langevin_spin.cpp +++ b/src/SPIN/fix_langevin_spin.cpp @@ -192,7 +192,7 @@ void FixLangevinSpin::add_temperature(double fmi[3]) /* ---------------------------------------------------------------------- */ -void FixLangevinSpin::post_force_respa(int vflag, int ilevel, int iloop) +void FixLangevinSpin::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_force(vflag); } diff --git a/src/SPIN/fix_nve_spin.cpp b/src/SPIN/fix_nve_spin.cpp index b75f03212a143e0e5ebab08afd6d026834a6f210..898eb953960590f3840b82c22c7133b11e5541ed 100644 --- a/src/SPIN/fix_nve_spin.cpp +++ b/src/SPIN/fix_nve_spin.cpp @@ -258,7 +258,7 @@ void FixNVESpin::init() /* ---------------------------------------------------------------------- */ -void FixNVESpin::initial_integrate(int vflag) +void FixNVESpin::initial_integrate(int /*vflag*/) { double dtfm; diff --git a/src/SPIN/fix_precession_spin.cpp b/src/SPIN/fix_precession_spin.cpp index b908478952941416546c4b083833f59dd9729a1c..d3edb3ae8a4eaaa56faf63ef8f418858239c49e3 100644 --- a/src/SPIN/fix_precession_spin.cpp +++ b/src/SPIN/fix_precession_spin.cpp @@ -169,7 +169,7 @@ void FixPrecessionSpin::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixPrecessionSpin::post_force(int vflag) +void FixPrecessionSpin::post_force(int /*vflag*/) { // update mag field with time (potential improvement) @@ -245,7 +245,7 @@ void FixPrecessionSpin::compute_anisotropy(double spi[3], double fmi[3]) /* ---------------------------------------------------------------------- */ -void FixPrecessionSpin::post_force_respa(int vflag, int ilevel, int iloop) +void FixPrecessionSpin::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/SPIN/pair_spin.cpp b/src/SPIN/pair_spin.cpp index 398206b26ee3233b42707585d4bb2dd7dac0c4c6..929b79bef3feccd319649caf54cbb014c2084899 100644 --- a/src/SPIN/pair_spin.cpp +++ b/src/SPIN/pair_spin.cpp @@ -63,7 +63,7 @@ PairSpin::~PairSpin() {} global settings ------------------------------------------------------------------------- */ -void PairSpin::settings(int narg, char **arg) +void PairSpin::settings(int narg, char **/*arg*/) { if (narg < 1 || narg > 2) error->all(FLERR,"Incorrect number of args in pair_style pair/spin command"); diff --git a/src/SPIN/pair_spin.h b/src/SPIN/pair_spin.h index 100eec17325ce94f187a1bbec2ff3f664bc0fa63..1be8550c653a379edc8e393516975c6c74ed8112 100644 --- a/src/SPIN/pair_spin.h +++ b/src/SPIN/pair_spin.h @@ -11,12 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#ifdef PAIR_CLASS - -PairStyle(pair/spin,PairSpin) - -#else - #ifndef LMP_PAIR_SPIN_H #define LMP_PAIR_SPIN_H @@ -46,7 +40,6 @@ friend class FixNVESpin; } -#endif #endif /* ERROR/WARNING messages: diff --git a/src/SPIN/pair_spin_dmi.cpp b/src/SPIN/pair_spin_dmi.cpp index 08e2c63e7f6ba147c6062da17f92a68b2a5d090a..6f8114042e83370ad8fe66dddee1f82c74226fc0 100644 --- a/src/SPIN/pair_spin_dmi.cpp +++ b/src/SPIN/pair_spin_dmi.cpp @@ -414,7 +414,7 @@ void PairSpinDmi::compute_dmi(int i, int j, double eij[3], double fmi[3], double compute the mechanical force due to the dmi interaction between atom i and atom j ------------------------------------------------------------------------- */ -void PairSpinDmi::compute_dmi_mech(int i, int j, double rsq, double eij[3], +void PairSpinDmi::compute_dmi_mech(int i, int j, double rsq, double /*eij*/[3], double fi[3], double spi[3], double spj[3]) { int *type = atom->type; diff --git a/src/SPIN/pair_spin_magelec.cpp b/src/SPIN/pair_spin_magelec.cpp index 6bc1f71947333ac405e29d6342696165b47379ab..570c995754bad829711c8f5caf747273c0ab4ba6 100644 --- a/src/SPIN/pair_spin_magelec.cpp +++ b/src/SPIN/pair_spin_magelec.cpp @@ -380,7 +380,7 @@ void PairSpinMagelec::compute_single_pair(int ii, double fmi[3]) /* ---------------------------------------------------------------------- */ -void PairSpinMagelec::compute_magelec(int i, int j, double rsq, double eij[3], double fmi[3], double spj[3]) +void PairSpinMagelec::compute_magelec(int i, int j, double /*rsq*/, double eij[3], double fmi[3], double spj[3]) { int *type = atom->type; int itype, jtype; diff --git a/src/SRD/fix_srd.cpp b/src/SRD/fix_srd.cpp index 564c1e98d7362a5947bc281a8b766ad5b6f4e479..186f51e06a5ba44bb668157d9ae9a4a668d72511 100644 --- a/src/SRD/fix_srd.cpp +++ b/src/SRD/fix_srd.cpp @@ -440,7 +440,7 @@ void FixSRD::init() /* ---------------------------------------------------------------------- */ -void FixSRD::setup(int vflag) +void FixSRD::setup(int /*vflag*/) { setup_bounds(); @@ -703,7 +703,7 @@ void FixSRD::pre_neighbor() when collision occurs, change x,v of SRD, force,torque of BIG particle ------------------------------------------------------------------------- */ -void FixSRD::post_force(int vflag) +void FixSRD::post_force(int /*vflag*/) { int i,m,ix,iy,iz; @@ -2168,8 +2168,8 @@ void FixSRD::collision_ellipsoid_inexact(double *xs, double *xb, norm = surface normal of collision pt at time of collision ------------------------------------------------------------------------- */ -double FixSRD::collision_line_exact(double *xs, double *xb, - double *vs, double *vb, Big *big, +double FixSRD::collision_line_exact(double * /*xs*/, double * /*xb*/, + double * /*vs*/, double * /*vb*/, Big * /*big*/, double dt_step, double *xscoll, double *xbcoll, double *norm) @@ -2197,8 +2197,8 @@ double FixSRD::collision_line_exact(double *xs, double *xb, norm = surface normal of collision pt at time of collision ------------------------------------------------------------------------- */ -double FixSRD::collision_tri_exact(double *xs, double *xb, - double *vs, double *vb, Big *big, +double FixSRD::collision_tri_exact(double * /*xs*/, double * /*xb*/, + double * /*vs*/, double * /*vb*/, Big * /*big*/, double dt_step, double *xscoll, double *xbcoll, double *norm) diff --git a/src/USER-BOCS/fix_bocs.cpp b/src/USER-BOCS/fix_bocs.cpp index 7fb8a27110ba2528bf81e53f4e6e9c78de23ee54..bf11b1d6ba545533f8441881a3ff528cae3eaa2b 100644 --- a/src/USER-BOCS/fix_bocs.cpp +++ b/src/USER-BOCS/fix_bocs.cpp @@ -207,12 +207,11 @@ FixBocs::FixBocs(LAMMPS *lmp, int narg, char **arg) : p_basis_type = 2; spline_length = read_F_table( arg[iarg+1], p_basis_type ); iarg += 2; - } else - { - char * errmsg = (char *) calloc(150,sizeof(char)); - sprintf(errmsg,"CG basis type %s is not recognized\nSupported " - "basis types: analytic linear_spline cubic_spline",arg[iarg]); - error->all(FLERR,errmsg); + } else { + char errmsg[256]; + snprintf(errmsg,256,"CG basis type %s is not recognized\nSupported " + "basis types: analytic linear_spline cubic_spline",arg[iarg]); + error->all(FLERR,errmsg); } // END NJD MRD } else if (strcmp(arg[iarg],"tchain") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix bocs command"); @@ -243,9 +242,9 @@ FixBocs::FixBocs(LAMMPS *lmp, int narg, char **arg) : if (nc_pchain < 0) error->all(FLERR,"Illegal fix bocs command"); iarg += 2; } else { - char * errmsg = (char *) calloc(80,sizeof(char)); - sprintf(errmsg,"Illegal fix bocs command: unrecognized keyword %s" - ,arg[iarg]); + char errmsg[128]; + snprintf(errmsg,128,"Illegal fix bocs command: unrecognized keyword %s" + ,arg[iarg]); error->all(FLERR,errmsg); } } @@ -625,11 +624,9 @@ void FixBocs::init() // NJD MRD 2 functions int FixBocs::read_F_table( char *filename, int p_basis_type ) { - char separator = ','; FILE *fpi; int N_columns = 2, n_entries = 0, i; float f1, f2; - double n1, n2; int test_sscanf; double **data = (double **) calloc(N_columns,sizeof(double *)); char * line = (char *) calloc(200,sizeof(char)); @@ -643,20 +640,16 @@ int FixBocs::read_F_table( char *filename, int p_basis_type ) { data[i] = (double *) calloc(n_entries,sizeof(double)); } - } - else - { - char * errmsg = (char *) calloc(50,sizeof(char)); - sprintf(errmsg,"Unable to open file: %s\n",filename); + } else { + char errmsg[128]; + snprintf(errmsg,128,"Unable to open file: %s\n",filename); error->all(FLERR,errmsg); } n_entries = 0; fpi = fopen(filename,"r"); - if (fpi) - { - while( fgets(line,199,fpi)) - { + if (fpi) { + while( fgets(line,199,fpi)) { ++n_entries; test_sscanf = sscanf(line," %f , %f ",&f1, &f2); if (test_sscanf == 2) @@ -670,11 +663,9 @@ int FixBocs::read_F_table( char *filename, int p_basis_type ) "line %d of file %s\n\tline: %s",n_entries,filename,line); } } - } - else - { - char * errmsg = (char *) calloc(50,sizeof(char)); - sprintf(errmsg,"Unable to open file: %s\n",filename); + } else { + char errmsg[128]; + snprintf(errmsg,128,"Unable to open file: %s\n",filename); error->all(FLERR,errmsg); } fclose(fpi); @@ -790,7 +781,7 @@ void FixBocs::build_cubic_splines( double **data ) compute T,P before integrator starts ------------------------------------------------------------------------- */ -void FixBocs::setup(int vflag) +void FixBocs::setup(int /*vflag*/) { // tdof needed by compute_temp_target() @@ -875,7 +866,7 @@ void FixBocs::setup(int vflag) 1st half of Verlet update ------------------------------------------------------------------------- */ -void FixBocs::initial_integrate(int vflag) +void FixBocs::initial_integrate(int /*vflag*/) { // update eta_press_dot @@ -970,7 +961,7 @@ void FixBocs::final_integrate() /* ---------------------------------------------------------------------- */ -void FixBocs::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixBocs::initial_integrate_respa(int /*vflag*/, int ilevel, int /*iloop*/) { // set timesteps by level @@ -1039,7 +1030,7 @@ void FixBocs::initial_integrate_respa(int vflag, int ilevel, int iloop) /* ---------------------------------------------------------------------- */ -void FixBocs::final_integrate_respa(int ilevel, int iloop) +void FixBocs::final_integrate_respa(int ilevel, int /*iloop*/) { // set timesteps by level diff --git a/src/USER-CGDNA/bond_oxdna_fene.cpp b/src/USER-CGDNA/bond_oxdna_fene.cpp index 47d8d8f60b3854632e13bdf7358200f596fef98c..34a25a9b5a56b78b9ed50bb98a417d971594021c 100644 --- a/src/USER-CGDNA/bond_oxdna_fene.cpp +++ b/src/USER-CGDNA/bond_oxdna_fene.cpp @@ -56,7 +56,7 @@ BondOxdnaFene::~BondOxdnaFene() compute vector COM-sugar-phosphate backbone interaction site in oxDNA ------------------------------------------------------------------------- */ void BondOxdnaFene::compute_interaction_sites(double e1[3], - double e2[3], double r[3]) + double /*e2*/[3], double r[3]) { double d_cs=-0.4; @@ -316,7 +316,7 @@ void BondOxdnaFene::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -double BondOxdnaFene::single(int type, double rsq, int i, int j, +double BondOxdnaFene::single(int type, double rsq, int /*i*/, int /*j*/, double &fforce) { double r = sqrt(rsq); diff --git a/src/USER-CGDNA/fix_nve_dot.cpp b/src/USER-CGDNA/fix_nve_dot.cpp index 63f38a4e12af727939cb5848153315f44f43b662..72b33887936daf62d25f9ad2f5d479db3f4800f8 100644 --- a/src/USER-CGDNA/fix_nve_dot.cpp +++ b/src/USER-CGDNA/fix_nve_dot.cpp @@ -62,7 +62,7 @@ void FixNVEDot::init() /* ---------------------------------------------------------------------- */ -void FixNVEDot::initial_integrate(int vflag) +void FixNVEDot::initial_integrate(int /*vflag*/) { double *shape,*quat; double fquat[4],conjqm[4],inertia[3]; diff --git a/src/USER-CGDNA/fix_nve_dotc_langevin.cpp b/src/USER-CGDNA/fix_nve_dotc_langevin.cpp index 90f7b1caebbc56e5849e47b72895128b22afcbbb..c73801c97aeb2962377b59f6d562430c2c850b46 100644 --- a/src/USER-CGDNA/fix_nve_dotc_langevin.cpp +++ b/src/USER-CGDNA/fix_nve_dotc_langevin.cpp @@ -127,7 +127,7 @@ void FixNVEDotcLangevin::compute_target() /* ---------------------------------------------------------------------- */ -void FixNVEDotcLangevin::initial_integrate(int vflag) +void FixNVEDotcLangevin::initial_integrate(int /*vflag*/) { double *shape,*quat; double fquat[4],conjqm[4],inertia[3]; diff --git a/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp b/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp index 151e7526924f508677c0c4648203b1091db9a4a0..d31890ea52b9dbfad89e5aec7088fb1826752369 100644 --- a/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp +++ b/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp @@ -542,7 +542,7 @@ void PairOxdna2Coaxstk::allocate() global settings ------------------------------------------------------------------------- */ -void PairOxdna2Coaxstk::settings(int narg, char **arg) +void PairOxdna2Coaxstk::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); diff --git a/src/USER-CGDNA/pair_oxdna2_dh.cpp b/src/USER-CGDNA/pair_oxdna2_dh.cpp index 974ade89c1230b3e6fff154855cdf8c7d13513f3..da6e1f8bbd95be3d169f58ef1d9041cb5e01c013 100644 --- a/src/USER-CGDNA/pair_oxdna2_dh.cpp +++ b/src/USER-CGDNA/pair_oxdna2_dh.cpp @@ -264,7 +264,7 @@ void PairOxdna2Dh::allocate() global settings ------------------------------------------------------------------------- */ -void PairOxdna2Dh::settings(int narg, char **arg) +void PairOxdna2Dh::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } diff --git a/src/USER-CGDNA/pair_oxdna_coaxstk.cpp b/src/USER-CGDNA/pair_oxdna_coaxstk.cpp index 0eb75fbb43b39b6bf29c460e2ebc0680d1cb66cb..ca03bcb35c2158ab341da19c67f74b4271ee766e 100644 --- a/src/USER-CGDNA/pair_oxdna_coaxstk.cpp +++ b/src/USER-CGDNA/pair_oxdna_coaxstk.cpp @@ -666,7 +666,7 @@ void PairOxdnaCoaxstk::allocate() global settings ------------------------------------------------------------------------- */ -void PairOxdnaCoaxstk::settings(int narg, char **arg) +void PairOxdnaCoaxstk::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); diff --git a/src/USER-CGDNA/pair_oxdna_excv.cpp b/src/USER-CGDNA/pair_oxdna_excv.cpp index e2b8334078cc4c0fae3dc34dcceb6bdefc662657..719a63b5f417eb20c6502d43ea26d436a3916c6e 100644 --- a/src/USER-CGDNA/pair_oxdna_excv.cpp +++ b/src/USER-CGDNA/pair_oxdna_excv.cpp @@ -92,7 +92,7 @@ PairOxdnaExcv::~PairOxdnaExcv() compute vector COM-excluded volume interaction sites in oxDNA ------------------------------------------------------------------------- */ void PairOxdnaExcv::compute_interaction_sites(double e1[3], - double e2[3], double rs[3], double rb[3]) + double /*e2*/[3], double rs[3], double rb[3]) { double d_cs=-0.4, d_cb=+0.4; @@ -441,7 +441,7 @@ void PairOxdnaExcv::allocate() global settings ------------------------------------------------------------------------- */ -void PairOxdnaExcv::settings(int narg, char **arg) +void PairOxdnaExcv::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); diff --git a/src/USER-CGDNA/pair_oxdna_hbond.cpp b/src/USER-CGDNA/pair_oxdna_hbond.cpp index ce1bfe036a3842ae07ceb2baf3b42eef63bd3c7b..cb9f61bd7e78d7eb3a229c4c876b575ea44f3ff9 100644 --- a/src/USER-CGDNA/pair_oxdna_hbond.cpp +++ b/src/USER-CGDNA/pair_oxdna_hbond.cpp @@ -601,7 +601,7 @@ void PairOxdnaHbond::allocate() global settings ------------------------------------------------------------------------- */ -void PairOxdnaHbond::settings(int narg, char **arg) +void PairOxdnaHbond::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); diff --git a/src/USER-CGDNA/pair_oxdna_stk.cpp b/src/USER-CGDNA/pair_oxdna_stk.cpp index 8c4498e627cfecb185289cf1834e74fab1f484a8..f713e4d27ca7c2dcc682908b7813dd4b0253b123 100644 --- a/src/USER-CGDNA/pair_oxdna_stk.cpp +++ b/src/USER-CGDNA/pair_oxdna_stk.cpp @@ -647,7 +647,7 @@ void PairOxdnaStk::allocate() global settings ------------------------------------------------------------------------- */ -void PairOxdnaStk::settings(int narg, char **arg) +void PairOxdnaStk::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); diff --git a/src/USER-CGDNA/pair_oxdna_xstk.cpp b/src/USER-CGDNA/pair_oxdna_xstk.cpp index e5b9de81c09c4450584434a8dfa006c826675c0a..c4c23bf2c9ab89ec78d6516e9f25adcbd3fcd2c8 100644 --- a/src/USER-CGDNA/pair_oxdna_xstk.cpp +++ b/src/USER-CGDNA/pair_oxdna_xstk.cpp @@ -611,7 +611,7 @@ void PairOxdnaXstk::allocate() global settings ------------------------------------------------------------------------- */ -void PairOxdnaXstk::settings(int narg, char **arg) +void PairOxdnaXstk::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); diff --git a/src/USER-CGSDK/lj_sdk_common.h b/src/USER-CGSDK/lj_sdk_common.h index c1f2cf215a68966884b90778bcd09319fe5e935b..51dcb4c2b7c8fa906af144ca2c222169b8dcefb9 100644 --- a/src/USER-CGSDK/lj_sdk_common.h +++ b/src/USER-CGSDK/lj_sdk_common.h @@ -27,6 +27,7 @@ namespace LJSDKParms { // LJ type flags. list of supported LJ exponent combinations enum {LJ_NOT_SET=0, LJ9_6, LJ12_4, LJ12_6, NUM_LJ_TYPES}; +#if defined(LMP_NEED_SDK_FIND_LJ_TYPE) static int find_lj_type(const char *label, const char * const * const list) { for (int i=0; i < NUM_LJ_TYPES; ++i) @@ -34,6 +35,7 @@ namespace LJSDKParms { return LJ_NOT_SET; } +#endif static const char * const lj_type_list[] = {"none", "lj9_6", "lj12_4", "lj12_6"}; static const double lj_prefact[] = {0.0, 6.75, 2.59807621135332, 4.0}; diff --git a/src/USER-CGSDK/pair_lj_sdk.cpp b/src/USER-CGSDK/pair_lj_sdk.cpp index cbcba7f6b260dc777bd40433aaa5610d33be0800..3404beb58a95528cd3def330ff78e88910be99fb 100644 --- a/src/USER-CGSDK/pair_lj_sdk.cpp +++ b/src/USER-CGSDK/pair_lj_sdk.cpp @@ -33,6 +33,7 @@ #include "memory.h" #include "error.h" +#define LMP_NEED_SDK_FIND_LJ_TYPE 1 #include "lj_sdk_common.h" using namespace LAMMPS_NS; diff --git a/src/USER-CGSDK/pair_lj_sdk_coul_long.cpp b/src/USER-CGSDK/pair_lj_sdk_coul_long.cpp index 1d93363e207f185d7460b3f038fb1042a82eb2b4..c51235518b38ccbe5057ecc4d838aa6827c842f6 100644 --- a/src/USER-CGSDK/pair_lj_sdk_coul_long.cpp +++ b/src/USER-CGSDK/pair_lj_sdk_coul_long.cpp @@ -34,6 +34,7 @@ #include "memory.h" #include "error.h" +#define LMP_NEED_SDK_FIND_LJ_TYPE 1 #include "lj_sdk_common.h" using namespace LAMMPS_NS; diff --git a/src/USER-DIFFRACTION/fix_saed_vtk.cpp b/src/USER-DIFFRACTION/fix_saed_vtk.cpp index 45bfeca48bd2269d0579672994fca283d8495ae1..882c13bc3ef74aa9d151fc779186842811413627 100644 --- a/src/USER-DIFFRACTION/fix_saed_vtk.cpp +++ b/src/USER-DIFFRACTION/fix_saed_vtk.cpp @@ -325,7 +325,7 @@ void FixSAEDVTK::init() only does something if nvalid = current timestep ------------------------------------------------------------------------- */ -void FixSAEDVTK::setup(int vflag) +void FixSAEDVTK::setup(int /*vflag*/) { end_of_step(); } @@ -424,12 +424,12 @@ void FixSAEDVTK::invoke_vector(bigint ntimestep) fclose(fp); char nName [128]; - sprintf(nName,"%s.%d.vtk",filename,nOutput); + snprintf(nName,128,"%s.%d.vtk",filename,nOutput); fp = fopen(nName,"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix saed/vtk file %s",nName); + snprintf(str,128,"Cannot open fix saed/vtk file %s",nName); error->one(FLERR,str); } } @@ -550,13 +550,13 @@ void FixSAEDVTK::options(int narg, char **arg) filename = new char[n]; strcpy(filename,arg[iarg+1]); - char nName [128]; - sprintf(nName,"%s.%d.vtk",filename,nOutput); + char nName [128]; + snprintf(nName,128,"%s.%d.vtk",filename,nOutput); fp = fopen(nName,"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix saed/vtk file %s",nName); + snprintf(str,128,"Cannot open fix saed/vtk file %s",nName); error->one(FLERR,str); } } diff --git a/src/USER-DPD/fix_dpd_energy.cpp b/src/USER-DPD/fix_dpd_energy.cpp index d89ea7759a8fbae547aeb4d724b3b8c82ca73472..5759a164f5cbec2bef1102c1380e3c01c222f9af 100644 --- a/src/USER-DPD/fix_dpd_energy.cpp +++ b/src/USER-DPD/fix_dpd_energy.cpp @@ -57,7 +57,7 @@ int FixDPDenergy::setmask() allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixDPDenergy::initial_integrate(int vflag) +void FixDPDenergy::initial_integrate(int /*vflag*/) { int nlocal = atom->nlocal; if (igroup == atom->firstgroup) nlocal = atom->nfirst; diff --git a/src/USER-DPD/fix_eos_table.cpp b/src/USER-DPD/fix_eos_table.cpp index e57a3788bf733f8f57ec12a54ea5b501eb0c0e4f..7d701f5fb8ed17c7e600a9a405096aa4f1df14d6 100644 --- a/src/USER-DPD/fix_eos_table.cpp +++ b/src/USER-DPD/fix_eos_table.cpp @@ -200,7 +200,7 @@ void FixEOStable::read_table(Table *tb, Table *tb2, char *file, char *keyword) FILE *fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",file); + snprintf(str,128,"Cannot open file %s",file); error->one(FLERR,str); } diff --git a/src/USER-DPD/fix_eos_table_rx.cpp b/src/USER-DPD/fix_eos_table_rx.cpp index 73144c0a0f9423196b106ba67ebd917f56bf8c77..779cee0e8bf02f763d681ebcc65980c5faebafa3 100644 --- a/src/USER-DPD/fix_eos_table_rx.cpp +++ b/src/USER-DPD/fix_eos_table_rx.cpp @@ -178,7 +178,7 @@ int FixEOStableRX::setmask() /* ---------------------------------------------------------------------- */ -void FixEOStableRX::setup(int vflag) +void FixEOStableRX::setup(int /*vflag*/) { int nlocal = atom->nlocal; int *mask = atom->mask; @@ -309,7 +309,7 @@ void FixEOStableRX::read_file(char *file) fp = fopen(file,"r"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open eos table/rx potential file %s",file); + snprintf(str,128,"Cannot open eos table/rx potential file %s",file); error->one(FLERR,str); } } @@ -419,7 +419,7 @@ void FixEOStableRX::read_table(Table *tb, Table *tb2, char *file, char *keyword) FILE *fp = fopen(file,"r"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",file); + snprintf(str,128,"Cannot open file %s",file); error->one(FLERR,str); } @@ -803,7 +803,7 @@ void FixEOStableRX::temperature_lookup(int id, double ui, double &thetai) /* ---------------------------------------------------------------------- */ -int FixEOStableRX::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +int FixEOStableRX::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { int ii,jj,m; double *uChem = atom->uChem; diff --git a/src/USER-DPD/fix_rx.cpp b/src/USER-DPD/fix_rx.cpp index be78989bb5a81de1f686b10afd59d9989a9375dd..97668471c885ce3215324b38daae58b3d4c4cf35 100644 --- a/src/USER-DPD/fix_rx.cpp +++ b/src/USER-DPD/fix_rx.cpp @@ -272,7 +272,7 @@ void FixRX::post_constructor() fp = force->open_potential(kineticsFile); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open rx file %s",kineticsFile); + snprintf(str,128,"Cannot open rx file %s",kineticsFile); error->one(FLERR,str); } } @@ -668,7 +668,7 @@ void FixRX::init_list(int, class NeighList* ptr) /* ---------------------------------------------------------------------- */ -void FixRX::setup_pre_force(int vflag) +void FixRX::setup_pre_force(int /*vflag*/) { int nlocal = atom->nlocal; int nghost = atom->nghost; @@ -727,9 +727,9 @@ void FixRX::setup_pre_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixRX::pre_force(int vflag) +void FixRX::pre_force(int /*vflag*/) { - TimerType timer_start = getTimeStamp(); + //TimerType timer_start = getTimeStamp(); int nlocal = atom->nlocal; int nghost = atom->nghost; @@ -808,7 +808,7 @@ void FixRX::pre_force(int vflag) comm->forward_comm_fix(this); if(localTempFlag) delete [] dpdThetaLocal; - TimerType timer_stop = getTimeStamp(); + //TimerType timer_stop = getTimeStamp(); double time_ODE = getElapsedTime(timer_localTemperature, timer_ODE); @@ -859,7 +859,7 @@ void FixRX::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open rx file %s",file); + snprintf(str,128,"Cannot open rx file %s",file); error->one(FLERR,str); } } @@ -1191,7 +1191,7 @@ void FixRX::rkf45_step (const int neq, const double h, double y[], double y_out[ return; } -int FixRX::rkf45_h0 (const int neq, const double t, const double t_stop, +int FixRX::rkf45_h0 (const int neq, const double t, const double /*t_stop*/, const double hmin, const double hmax, double& h0, double y[], double rwk[], void* v_params) { @@ -1668,7 +1668,7 @@ int FixRX::rhs(double t, const double *y, double *dydt, void *params) /* ---------------------------------------------------------------------- */ -int FixRX::rhs_dense(double t, const double *y, double *dydt, void *params) +int FixRX::rhs_dense(double /*t*/, const double *y, double *dydt, void *params) { UserRHSData *userData = (UserRHSData *) params; @@ -1702,7 +1702,7 @@ int FixRX::rhs_dense(double t, const double *y, double *dydt, void *params) /* ---------------------------------------------------------------------- */ -int FixRX::rhs_sparse(double t, const double *y, double *dydt, void *v_params) const +int FixRX::rhs_sparse(double /*t*/, const double *y, double *dydt, void *v_params) const { UserRHSData *userData = (UserRHSData *) v_params; @@ -1885,7 +1885,7 @@ void FixRX::computeLocalTemperature() /* ---------------------------------------------------------------------- */ -int FixRX::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +int FixRX::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { int ii,jj,m; double tmp; diff --git a/src/USER-DPD/fix_shardlow.cpp b/src/USER-DPD/fix_shardlow.cpp index 7fe865c8e6a9bce50d863c5f5cb14d8b119c1fef..4e133480ad4d97cbd830cd962bcb971c2ac9df9d 100644 --- a/src/USER-DPD/fix_shardlow.cpp +++ b/src/USER-DPD/fix_shardlow.cpp @@ -145,14 +145,14 @@ void FixShardlow::init() /* ---------------------------------------------------------------------- */ -void FixShardlow::init_list(int id, NeighList *ptr) +void FixShardlow::init_list(int /*id*/, NeighList *ptr) { list = ptr; } /* ---------------------------------------------------------------------- */ -void FixShardlow::setup(int vflag) +void FixShardlow::setup(int /*vflag*/) { bool fixShardlow = false; @@ -527,7 +527,7 @@ while (ct-- > 0) { rand_state[id] = RNGstate; } -void FixShardlow::initial_integrate(int vflag) +void FixShardlow::initial_integrate(int /*vflag*/) { int ii; @@ -646,7 +646,7 @@ fprintf(stdout, "\n%6d %6d,%6d %6d: " /* ---------------------------------------------------------------------- */ -int FixShardlow::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +int FixShardlow::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { int ii,jj,m; double **v = atom->v; diff --git a/src/USER-DPD/pair_dpd_fdt.cpp b/src/USER-DPD/pair_dpd_fdt.cpp index aeade16e7cb0525a5e1ce75dba723832646b7ad4..12e6d9f257c84eac8fa61bf637851ef704e2fb95 100644 --- a/src/USER-DPD/pair_dpd_fdt.cpp +++ b/src/USER-DPD/pair_dpd_fdt.cpp @@ -433,8 +433,8 @@ void PairDPDfdt::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairDPDfdt::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_dpd, double &fforce) +double PairDPDfdt::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_dpd, double &fforce) { double r,rinv,wr,wd,phi; diff --git a/src/USER-DPD/pair_dpd_fdt_energy.cpp b/src/USER-DPD/pair_dpd_fdt_energy.cpp index 05dc52eac787b974cf628bf9fd22b984763fab57..42c23e3ad234a682e1b513f778bb209f0e6aa066 100644 --- a/src/USER-DPD/pair_dpd_fdt_energy.cpp +++ b/src/USER-DPD/pair_dpd_fdt_energy.cpp @@ -534,8 +534,8 @@ void PairDPDfdtEnergy::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairDPDfdtEnergy::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_dpd, double &fforce) +double PairDPDfdtEnergy::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_dpd, double &fforce) { double r,rinv,wr,wd,phi; diff --git a/src/USER-DPD/pair_exp6_rx.cpp b/src/USER-DPD/pair_exp6_rx.cpp index 057c8fa1190e00e61b718edc0f4d66f865cb43f0..0251f019c5f3e0874a2f4882a606da69061a78fd 100644 --- a/src/USER-DPD/pair_exp6_rx.cpp +++ b/src/USER-DPD/pair_exp6_rx.cpp @@ -730,7 +730,7 @@ void PairExp6rx::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open exp6/rx potential file %s",file); + snprintf(str,128,"Cannot open exp6/rx potential file %s",file); error->one(FLERR,str); } } @@ -841,7 +841,7 @@ void PairExp6rx::read_file2(char *file) fp = fopen(file,"r"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open polynomial file %s",file); + snprintf(str,128,"Cannot open polynomial file %s",file); error->one(FLERR,str); } } diff --git a/src/USER-DPD/pair_multi_lucy.cpp b/src/USER-DPD/pair_multi_lucy.cpp index 3d204a849e3bfe1d70497f0c2c2340f48b3dab47..19a4a02f0b31a2f428b76e42f15e9616ce2141d0 100644 --- a/src/USER-DPD/pair_multi_lucy.cpp +++ b/src/USER-DPD/pair_multi_lucy.cpp @@ -350,7 +350,7 @@ void PairMultiLucy::read_table(Table *tb, char *file, char *keyword) FILE *fp = fopen(file,"r"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",file); + snprintf(str,128,"Cannot open file %s",file); error->one(FLERR,str); } @@ -781,7 +781,7 @@ void PairMultiLucy::computeLocalDensity() } /* ---------------------------------------------------------------------- */ -int PairMultiLucy::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +int PairMultiLucy::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; double *rho = atom->rho; diff --git a/src/USER-DPD/pair_multi_lucy_rx.cpp b/src/USER-DPD/pair_multi_lucy_rx.cpp index 0070ca82d9c5eed5f07fa16defbf4b0da7944829..f3ad86eb2f0639b491a98153e9a34ea393894c71 100644 --- a/src/USER-DPD/pair_multi_lucy_rx.cpp +++ b/src/USER-DPD/pair_multi_lucy_rx.cpp @@ -495,7 +495,7 @@ void PairMultiLucyRX::read_table(Table *tb, char *file, char *keyword) FILE *fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",file); + snprintf(str,128,"Cannot open file %s",file); error->one(FLERR,str); } @@ -1019,7 +1019,7 @@ void PairMultiLucyRX::getMixingWeights(int id, double &mixWtSite1old, double &mi /* ---------------------------------------------------------------------- */ -int PairMultiLucyRX::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +int PairMultiLucyRX::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; double *rho = atom->rho; diff --git a/src/USER-DPD/pair_table_rx.cpp b/src/USER-DPD/pair_table_rx.cpp index 221944edc5170612b0ae7a246f3dd7bc61e6a26d..1e7bc440d11107bbbdf224668e10b3be85727e14 100644 --- a/src/USER-DPD/pair_table_rx.cpp +++ b/src/USER-DPD/pair_table_rx.cpp @@ -439,7 +439,7 @@ void PairTableRX::coeff(int narg, char **arg) /* ---------------------------------------------------------------------- */ double PairTableRX::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double factor_lj, double &fforce) { int itable; diff --git a/src/USER-DRUDE/fix_drude.cpp b/src/USER-DRUDE/fix_drude.cpp index 19fd775715822d040edf8b3bf4621902fbafb71d..7800efe7ff74aa5174a041853557f7b2ce5dbf32 100644 --- a/src/USER-DRUDE/fix_drude.cpp +++ b/src/USER-DRUDE/fix_drude.cpp @@ -235,7 +235,7 @@ void FixDrude::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixDrude::copy_arrays(int i, int j, int delflag) +void FixDrude::copy_arrays(int i, int j, int /*delflag*/) { drudeid[j] = drudeid[i]; } diff --git a/src/USER-DRUDE/fix_langevin_drude.cpp b/src/USER-DRUDE/fix_langevin_drude.cpp index 235c5d224ba8e1914e201b95055cf072d3c9b64b..b9d1139f83df65d20644bc9356733c0c2e48701c 100644 --- a/src/USER-DRUDE/fix_langevin_drude.cpp +++ b/src/USER-DRUDE/fix_langevin_drude.cpp @@ -157,7 +157,7 @@ void FixLangevinDrude::init() /* ---------------------------------------------------------------------- */ -void FixLangevinDrude::setup(int vflag) +void FixLangevinDrude::setup(int /*vflag*/) { if (!strstr(update->integrate_style,"verlet")) error->all(FLERR,"RESPA style not compatible with fix langevin/drude"); diff --git a/src/USER-DRUDE/pair_thole.cpp b/src/USER-DRUDE/pair_thole.cpp index 8c20ee8c4208e7cd59377d184b99662444bf35bd..6901ad1f2d6e64ae3686c4eb381730f099d6347d 100644 --- a/src/USER-DRUDE/pair_thole.cpp +++ b/src/USER-DRUDE/pair_thole.cpp @@ -363,7 +363,7 @@ void PairThole::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ double PairThole::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, + double rsq, double factor_coul, double /*factor_lj*/, double &fforce) { double r2inv,rinv,r,phicoul; diff --git a/src/USER-EFF/compute_temp_deform_eff.cpp b/src/USER-EFF/compute_temp_deform_eff.cpp index d3856e431d0d427e1f90c3435f99e63c37097c60..23abb4f99da6280caefdb0f40f8b441228124ddd 100644 --- a/src/USER-EFF/compute_temp_deform_eff.cpp +++ b/src/USER-EFF/compute_temp_deform_eff.cpp @@ -290,7 +290,7 @@ void ComputeTempDeformEff::remove_bias_all() assume remove_bias() was previously called ------------------------------------------------------------------------- */ -void ComputeTempDeformEff::restore_bias(int i, double *v) +void ComputeTempDeformEff::restore_bias(int /*i*/, double *v) { v[0] += vbias[0]; v[1] += vbias[1]; diff --git a/src/USER-EFF/compute_temp_region_eff.cpp b/src/USER-EFF/compute_temp_region_eff.cpp index 4548914ce13f5a349c0a6b00db726e5160c6cef3..659bdfca5e3a06bc189b69ed521a0c824a578cda 100644 --- a/src/USER-EFF/compute_temp_region_eff.cpp +++ b/src/USER-EFF/compute_temp_region_eff.cpp @@ -263,7 +263,7 @@ void ComputeTempRegionEff::remove_bias_all() assume remove_bias() was previously called ------------------------------------------------------------------------- */ -void ComputeTempRegionEff::restore_bias(int i, double *v) +void ComputeTempRegionEff::restore_bias(int /*i*/, double *v) { v[0] += vbias[0]; v[1] += vbias[1]; diff --git a/src/USER-EFF/fix_langevin_eff.cpp b/src/USER-EFF/fix_langevin_eff.cpp index 2d0eef8e8573293af0ae480abb86898273d92a4a..d362113997fde58d193cb318968f86da02950410 100644 --- a/src/USER-EFF/fix_langevin_eff.cpp +++ b/src/USER-EFF/fix_langevin_eff.cpp @@ -63,7 +63,7 @@ FixLangevinEff::~FixLangevinEff() /* ---------------------------------------------------------------------- */ -void FixLangevinEff::post_force(int vflag) +void FixLangevinEff::post_force(int /*vflag*/) { if (tallyflag) post_force_tally(); else post_force_no_tally(); diff --git a/src/USER-EFF/fix_nve_eff.cpp b/src/USER-EFF/fix_nve_eff.cpp index 584714a44e7413e0eed09fedb95994a853b37811..699dd9f9497e1433e9b22202fd5b714df87ff174 100644 --- a/src/USER-EFF/fix_nve_eff.cpp +++ b/src/USER-EFF/fix_nve_eff.cpp @@ -68,7 +68,7 @@ void FixNVEEff::init() allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixNVEEff::initial_integrate(int vflag) +void FixNVEEff::initial_integrate(int /*vflag*/) { double dtfm; @@ -145,7 +145,7 @@ void FixNVEEff::final_integrate() /* ---------------------------------------------------------------------- */ -void FixNVEEff::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixNVEEff::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) { dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel] * force->ftm2v; @@ -159,7 +159,7 @@ void FixNVEEff::initial_integrate_respa(int vflag, int ilevel, int iloop) /* ---------------------------------------------------------------------- */ -void FixNVEEff::final_integrate_respa(int ilevel, int iloop) +void FixNVEEff::final_integrate_respa(int ilevel, int /*iloop*/) { dtf = 0.5 * step_respa[ilevel] * force->ftm2v; final_integrate(); diff --git a/src/USER-EFF/pair_eff_cut.cpp b/src/USER-EFF/pair_eff_cut.cpp index 0379c0264b5570f18ab1f8d401078c1abe700de9..b4e9011e332b3d586dd249dabc705c133cddd7d9 100644 --- a/src/USER-EFF/pair_eff_cut.cpp +++ b/src/USER-EFF/pair_eff_cut.cpp @@ -1009,7 +1009,7 @@ void PairEffCut::read_restart_settings(FILE *fp) these arrays are stored locally by pair style ------------------------------------------------------------------------- */ -void PairEffCut::min_xf_pointers(int ignore, double **xextra, double **fextra) +void PairEffCut::min_xf_pointers(int /*ignore*/, double **xextra, double **fextra) { // grow arrays if necessary // need to be atom->nmax in length @@ -1031,7 +1031,7 @@ void PairEffCut::min_xf_pointers(int ignore, double **xextra, double **fextra) calculate and store in min_eradius and min_erforce ------------------------------------------------------------------------- */ -void PairEffCut::min_xf_get(int ignore) +void PairEffCut::min_xf_get(int /*ignore*/) { double *eradius = atom->eradius; double *erforce = atom->erforce; @@ -1050,7 +1050,7 @@ void PairEffCut::min_xf_get(int ignore) propagate the change back to eradius ------------------------------------------------------------------------- */ -void PairEffCut::min_x_set(int ignore) +void PairEffCut::min_x_set(int /*ignore*/) { double *eradius = atom->eradius; int *spin = atom->spin; diff --git a/src/USER-FEP/fix_adapt_fep.cpp b/src/USER-FEP/fix_adapt_fep.cpp index 3b8c9d4201f592343dff8d9e43c6a6b7ae9f1407..7304bc4ef6f36496200c950f9541407838b315d3 100644 --- a/src/USER-FEP/fix_adapt_fep.cpp +++ b/src/USER-FEP/fix_adapt_fep.cpp @@ -387,7 +387,7 @@ void FixAdaptFEP::init() /* ---------------------------------------------------------------------- */ -void FixAdaptFEP::setup_pre_force(int vflag) +void FixAdaptFEP::setup_pre_force(int /*vflag*/) { change_settings(); } @@ -402,7 +402,7 @@ void FixAdaptFEP::setup_pre_force_respa(int vflag, int ilevel) /* ---------------------------------------------------------------------- */ -void FixAdaptFEP::pre_force(int vflag) +void FixAdaptFEP::pre_force(int /*vflag*/) { if (nevery == 0) return; diff --git a/src/USER-FEP/pair_coul_cut_soft.cpp b/src/USER-FEP/pair_coul_cut_soft.cpp index 5bcb5a752256a07ac83d4d74c2d044681b891b40..529ffe6b0983f9dc160aa336b80310c41471907c 100644 --- a/src/USER-FEP/pair_coul_cut_soft.cpp +++ b/src/USER-FEP/pair_coul_cut_soft.cpp @@ -347,7 +347,7 @@ void PairCoulCutSoft::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ double PairCoulCutSoft::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, + double rsq, double factor_coul, double /*factor_lj*/, double &fforce) { double forcecoul,phicoul; diff --git a/src/USER-FEP/pair_coul_long_soft.cpp b/src/USER-FEP/pair_coul_long_soft.cpp index 94bb3659fa3beea5a4025ace13b876ad6405375b..e45dbe72d6c38b6e6dd84053cad4f2e5ffda1d7c 100644 --- a/src/USER-FEP/pair_coul_long_soft.cpp +++ b/src/USER-FEP/pair_coul_long_soft.cpp @@ -348,7 +348,7 @@ void PairCoulLongSoft::read_restart_settings(FILE *fp) double PairCoulLongSoft::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, + double factor_coul, double /*factor_lj*/, double &fforce) { double r,grij,expm2,t,erfc,prefactor; diff --git a/src/USER-FEP/pair_lj_cut_soft.cpp b/src/USER-FEP/pair_lj_cut_soft.cpp index 4aaa5c292531f7cc0aee51712576de220fe56909..a33445f6f8d7cc28e1863205b37f17c737a3729d 100644 --- a/src/USER-FEP/pair_lj_cut_soft.cpp +++ b/src/USER-FEP/pair_lj_cut_soft.cpp @@ -735,8 +735,8 @@ void PairLJCutSoft::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJCutSoft::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairLJCutSoft::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double forcelj,philj; diff --git a/src/USER-FEP/pair_morse_soft.cpp b/src/USER-FEP/pair_morse_soft.cpp index 7a897e1870ed96a0aad08671b5d031e7764557d7..965d5708633d0d410d02c77bbad664a7310ca6b4 100644 --- a/src/USER-FEP/pair_morse_soft.cpp +++ b/src/USER-FEP/pair_morse_soft.cpp @@ -360,8 +360,8 @@ void PairMorseSoft::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairMorseSoft::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairMorseSoft::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r, dr, dexp, dexp2, dexp3, phi; diff --git a/src/USER-INTEL/angle_charmm_intel.cpp b/src/USER-INTEL/angle_charmm_intel.cpp index 672b70b6f68785256c67b694b58b8d8e741dce87..f2542fc0c7f43dd3d7bb1717f20f44ffbce6b9de 100644 --- a/src/USER-INTEL/angle_charmm_intel.cpp +++ b/src/USER-INTEL/angle_charmm_intel.cpp @@ -332,7 +332,7 @@ void AngleCharmmIntel::init_style() template void AngleCharmmIntel::pack_force_const(ForceConst &fc, - IntelBuffers *buffers) + IntelBuffers * /*buffers*/) { const int bp1 = atom->nangletypes + 1; fc.set_ntypes(bp1,memory); diff --git a/src/USER-INTEL/angle_harmonic_intel.cpp b/src/USER-INTEL/angle_harmonic_intel.cpp index 74639f3aebddd8c705f622c2165edcf033617ea0..5777dad9479957be52f9496435a6fdf845d828ff 100644 --- a/src/USER-INTEL/angle_harmonic_intel.cpp +++ b/src/USER-INTEL/angle_harmonic_intel.cpp @@ -314,7 +314,7 @@ void AngleHarmonicIntel::init_style() template void AngleHarmonicIntel::pack_force_const(ForceConst &fc, - IntelBuffers *buffers) + IntelBuffers * /*buffers*/) { const int bp1 = atom->nangletypes + 1; fc.set_ntypes(bp1,memory); diff --git a/src/USER-INTEL/bond_fene_intel.cpp b/src/USER-INTEL/bond_fene_intel.cpp index 2d70049a89b705918589f6402e987f6eb3edff34..9d54269c0563cb4134fdd278eb123ebc66ace8b4 100644 --- a/src/USER-INTEL/bond_fene_intel.cpp +++ b/src/USER-INTEL/bond_fene_intel.cpp @@ -291,7 +291,7 @@ void BondFENEIntel::init_style() template void BondFENEIntel::pack_force_const(ForceConst &fc, - IntelBuffers *buffers) + IntelBuffers * /*buffers*/) { const int bp1 = atom->nbondtypes + 1; fc.set_ntypes(bp1,memory); diff --git a/src/USER-INTEL/bond_harmonic_intel.cpp b/src/USER-INTEL/bond_harmonic_intel.cpp index ed9cab082ed5553c9afd38ddf12f2aabf98861fe..65894efa056cba90a4da72dbfbe6ee3c4157577c 100644 --- a/src/USER-INTEL/bond_harmonic_intel.cpp +++ b/src/USER-INTEL/bond_harmonic_intel.cpp @@ -262,7 +262,7 @@ void BondHarmonicIntel::init_style() template void BondHarmonicIntel::pack_force_const(ForceConst &fc, - IntelBuffers *buffers) + IntelBuffers * /*buffers*/) { const int bp1 = atom->nbondtypes + 1; fc.set_ntypes(bp1,memory); diff --git a/src/USER-INTEL/dihedral_fourier_intel.cpp b/src/USER-INTEL/dihedral_fourier_intel.cpp index 6ad25f1ce49228f5f719cc21277b01a9bcfd26d8..6ccc165c612fd01bc66b8fec7541adc3ffbae2f5 100644 --- a/src/USER-INTEL/dihedral_fourier_intel.cpp +++ b/src/USER-INTEL/dihedral_fourier_intel.cpp @@ -401,7 +401,7 @@ void DihedralFourierIntel::init_style() template void DihedralFourierIntel::pack_force_const(ForceConst &fc, - IntelBuffers *buffers) + IntelBuffers * /*buffers*/) { const int bp1 = atom->ndihedraltypes + 1; fc.set_ntypes(bp1, setflag, nterms, memory); diff --git a/src/USER-INTEL/dihedral_harmonic_intel.cpp b/src/USER-INTEL/dihedral_harmonic_intel.cpp index b2bf54102c4b8cfb05d8cfbe949d4cca4261ead9..ae5eb914e74d0af7ce5b727ed83761fea9d4d7b9 100644 --- a/src/USER-INTEL/dihedral_harmonic_intel.cpp +++ b/src/USER-INTEL/dihedral_harmonic_intel.cpp @@ -396,7 +396,7 @@ void DihedralHarmonicIntel::init_style() template void DihedralHarmonicIntel::pack_force_const(ForceConst &fc, - IntelBuffers *buffers) + IntelBuffers * /*buffers*/) { const int bp1 = atom->ndihedraltypes + 1; fc.set_ntypes(bp1,memory); diff --git a/src/USER-INTEL/dihedral_opls_intel.cpp b/src/USER-INTEL/dihedral_opls_intel.cpp index 832ce7ed50e482c787bd4e14e22d225b7b3be721..ef95cc75bb1bf998418152d47e994edbeb35f976 100644 --- a/src/USER-INTEL/dihedral_opls_intel.cpp +++ b/src/USER-INTEL/dihedral_opls_intel.cpp @@ -416,7 +416,7 @@ void DihedralOPLSIntel::init_style() template void DihedralOPLSIntel::pack_force_const(ForceConst &fc, - IntelBuffers *buffers) + IntelBuffers * /*buffers*/) { const int bp1 = atom->ndihedraltypes + 1; fc.set_ntypes(bp1,memory); diff --git a/src/USER-INTEL/fix_intel.cpp b/src/USER-INTEL/fix_intel.cpp index 7a206f472a92eed49e814e9029d69a936b196daa..37212928dfdc5333a50c7fd3daa3b373c9bc70b6 100644 --- a/src/USER-INTEL/fix_intel.cpp +++ b/src/USER-INTEL/fix_intel.cpp @@ -349,7 +349,7 @@ void FixIntel::init() /* ---------------------------------------------------------------------- */ -void FixIntel::setup(int vflag) +void FixIntel::setup(int /*vflag*/) { if (neighbor->style != Neighbor::BIN) error->all(FLERR, @@ -532,14 +532,19 @@ void FixIntel::check_neighbor_intel() _offload_noghost = 0; } #endif + + // avoid flagging a neighbor list as both USER-INTEL and USER-OMP + if (neighbor->requests[i]->intel) + neighbor->requests[i]->omp = 0; + if (neighbor->requests[i]->skip) - error->all(FLERR, "Cannot yet use hybrid styles with Intel package."); + error->all(FLERR, "Hybrid styles with Intel package are unsupported."); } } /* ---------------------------------------------------------------------- */ -void FixIntel::pre_reverse(int eflag, int vflag) +void FixIntel::pre_reverse(int /*eflag*/, int /*vflag*/) { if (_force_array_m != 0) { if (_need_reduce) { @@ -652,7 +657,7 @@ template void FixIntel::add_results(const ft * _noalias const f_in, const acc_t * _noalias const ev_global, const int eatom, const int vatom, - const int offload) { + const int /*offload*/) { start_watch(TIME_PACK); int f_length; #ifdef _LMP_INTEL_OFFLOAD @@ -719,16 +724,18 @@ void FixIntel::add_results(const ft * _noalias const f_in, template void FixIntel::add_oresults(const ft * _noalias const f_in, const acc_t * _noalias const ev_global, - const int eatom, const int vatom, + const int eatom, const int /*vatom*/, const int out_offset, const int nall) { lmp_ft * _noalias const f = (lmp_ft *) lmp->atom->f[0] + out_offset; if (atom->torque) { if (f_in[1].w) + { if (f_in[1].w == 1) error->all(FLERR,"Bad matrix inversion in mldivide3"); else error->all(FLERR, "Sphere particles not yet supported for gayberne/intel"); + } } int packthreads; diff --git a/src/USER-INTEL/fix_intel.h b/src/USER-INTEL/fix_intel.h index 79fb23ab3d98cfb7cdbf62a3d1cf35fa58415b8c..e6e09be503dc0d69840e251c0abc20a103890a04 100644 --- a/src/USER-INTEL/fix_intel.h +++ b/src/USER-INTEL/fix_intel.h @@ -74,7 +74,7 @@ class FixIntel : public Fix { inline int nbor_pack_width() const { return _nbor_pack_width; } inline void nbor_pack_width(const int w) { _nbor_pack_width = w; } inline int three_body_neighbor() { return _three_body_neighbor; } - inline void three_body_neighbor(const int i) { _three_body_neighbor = 1; } + inline void three_body_neighbor(const int /*i*/) { _three_body_neighbor = 1; } inline int need_zero(const int tid) { if (_need_reduce == 0 && tid > 0) return 1; @@ -159,8 +159,8 @@ class FixIntel : public Fix { inline int host_start_neighbor() { return 0; } inline int host_start_pair() { return 0; } inline void zero_timers() {} - inline void start_watch(const int which) {} - inline double stop_watch(const int which) { return 0.0; } + inline void start_watch(const int /*which*/) {} + inline double stop_watch(const int /*which*/) { return 0.0; } double * off_watch_pair() { return NULL; } double * off_watch_neighbor() { return NULL; } inline void balance_stamp() {} @@ -238,7 +238,7 @@ class FixIntel : public Fix { /* ---------------------------------------------------------------------- */ -void FixIntel::get_buffern(const int offload, int &nlocal, int &nall, +void FixIntel::get_buffern(const int /*offload*/, int &nlocal, int &nall, int &minlocal) { #ifdef _LMP_INTEL_OFFLOAD if (_separate_buffers) { @@ -273,7 +273,7 @@ void FixIntel::get_buffern(const int offload, int &nlocal, int &nall, /* ---------------------------------------------------------------------- */ void FixIntel::add_result_array(IntelBuffers::vec3_acc_t *f_in, - double *ev_in, const int offload, + double *ev_in, const int /*offload*/, const int eatom, const int vatom, const int rflag) { #ifdef _LMP_INTEL_OFFLOAD @@ -301,7 +301,7 @@ void FixIntel::add_result_array(IntelBuffers::vec3_acc_t *f_in, /* ---------------------------------------------------------------------- */ void FixIntel::add_result_array(IntelBuffers::vec3_acc_t *f_in, - double *ev_in, const int offload, + double *ev_in, const int /*offload*/, const int eatom, const int vatom, const int rflag) { #ifdef _LMP_INTEL_OFFLOAD @@ -329,7 +329,7 @@ void FixIntel::add_result_array(IntelBuffers::vec3_acc_t *f_in, /* ---------------------------------------------------------------------- */ void FixIntel::add_result_array(IntelBuffers::vec3_acc_t *f_in, - float *ev_in, const int offload, + float *ev_in, const int /*offload*/, const int eatom, const int vatom, const int rflag) { #ifdef _LMP_INTEL_OFFLOAD diff --git a/src/USER-INTEL/fix_nh_intel.cpp b/src/USER-INTEL/fix_nh_intel.cpp index 44253e8bb0b9c3b5750c6e0a46e2f3c3cf25a7ab..bf4764f10460405807b03db0bf5de9d5f5facbf2 100644 --- a/src/USER-INTEL/fix_nh_intel.cpp +++ b/src/USER-INTEL/fix_nh_intel.cpp @@ -464,7 +464,6 @@ void FixNHIntel::nve_x() { double * _noalias const x = atom->x[0]; double * _noalias const v = atom->v[0]; - const double * _noalias const f = atom->f[0]; // x update by full step only for atoms in group diff --git a/src/USER-INTEL/fix_nve_asphere_intel.cpp b/src/USER-INTEL/fix_nve_asphere_intel.cpp index 17bbcff77140de04b60b4cfdf8f79867d11f87d8..7eeb8a163557ef9c8521bffea5090a5ff4879601 100644 --- a/src/USER-INTEL/fix_nve_asphere_intel.cpp +++ b/src/USER-INTEL/fix_nve_asphere_intel.cpp @@ -79,12 +79,8 @@ void FixNVEAsphereIntel::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixNVEAsphereIntel::initial_integrate(int vflag) +void FixNVEAsphereIntel::initial_integrate(int /*vflag*/) { - double dtfm; - double inertia[3],omega[3]; - double *shape,*quat; - AtomVecEllipsoid::Bonus *bonus = avec->bonus; int *ellipsoid = atom->ellipsoid; double * _noalias const x = atom->x[0]; @@ -94,7 +90,6 @@ void FixNVEAsphereIntel::initial_integrate(int vflag) double **angmom = atom->angmom; double **torque = atom->torque; - double *rmass = atom->rmass; int nlocal = atom->nlocal; if (igroup == atom->firstgroup) nlocal = atom->nfirst; @@ -143,8 +138,6 @@ void FixNVEAsphereIntel::final_integrate() { if (neighbor->ago == 0) reset_dt(); - double dtfm; - double * _noalias const v = atom->v[0]; const double * _noalias const f = atom->f[0]; double * _noalias const angmom = atom->angmom[0]; diff --git a/src/USER-INTEL/fix_nve_intel.cpp b/src/USER-INTEL/fix_nve_intel.cpp index c0f6da06ae9d6f53ed5a875fdb17137f73551665..7dee31d2f447520a2f46dd8ac07ee7d3c33ec0e3 100644 --- a/src/USER-INTEL/fix_nve_intel.cpp +++ b/src/USER-INTEL/fix_nve_intel.cpp @@ -56,7 +56,7 @@ void FixNVEIntel::setup(int vflag) allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixNVEIntel::initial_integrate(int vflag) +void FixNVEIntel::initial_integrate(int /*vflag*/) { // update v and x of atoms in group diff --git a/src/USER-INTEL/improper_cvff_intel.cpp b/src/USER-INTEL/improper_cvff_intel.cpp index e0ef2162d1e72ce865cf080e5de9192c51247d6c..c20c004657b1b53ce16c55dd6a41a87f37d708f4 100644 --- a/src/USER-INTEL/improper_cvff_intel.cpp +++ b/src/USER-INTEL/improper_cvff_intel.cpp @@ -428,7 +428,7 @@ void ImproperCvffIntel::init_style() template void ImproperCvffIntel::pack_force_const(ForceConst &fc, - IntelBuffers *buffers) + IntelBuffers * /*buffers*/) { const int bp1 = atom->nimpropertypes + 1; fc.set_ntypes(bp1,memory); diff --git a/src/USER-INTEL/improper_harmonic_intel.cpp b/src/USER-INTEL/improper_harmonic_intel.cpp index 60cbe163586da454d9dd7d70710ad6551f0c89ff..167095150e8c8cb05af7fc4982980432eb0745a6 100644 --- a/src/USER-INTEL/improper_harmonic_intel.cpp +++ b/src/USER-INTEL/improper_harmonic_intel.cpp @@ -384,7 +384,7 @@ void ImproperHarmonicIntel::init_style() template void ImproperHarmonicIntel::pack_force_const(ForceConst &fc, - IntelBuffers *buffers) + IntelBuffers * /*buffers*/) { const int bp1 = atom->nimpropertypes + 1; fc.set_ntypes(bp1,memory); diff --git a/src/USER-INTEL/intel_buffers.cpp b/src/USER-INTEL/intel_buffers.cpp index 0f32cb48b201ca71c7181d512f241c0634db89ad..05176e1fd1e1bf4bc629dc6d8b40275b4bed81bb 100644 --- a/src/USER-INTEL/intel_buffers.cpp +++ b/src/USER-INTEL/intel_buffers.cpp @@ -109,7 +109,7 @@ void IntelBuffers::free_buffers() template void IntelBuffers::_grow(const int nall, const int nlocal, const int nthreads, - const int offload_end) + const int /*offload_end*/) { free_buffers(); _buf_size = static_cast(nall) * 1.1 + 1; @@ -200,7 +200,7 @@ void IntelBuffers::free_nmax() /* ---------------------------------------------------------------------- */ template -void IntelBuffers::_grow_nmax(const int offload_end) +void IntelBuffers::_grow_nmax(const int /*offload_end*/) { #ifdef _LMP_INTEL_OFFLOAD free_nmax(); @@ -264,7 +264,7 @@ void IntelBuffers::free_list_local() template void IntelBuffers::_grow_list_local(NeighList *list, - const int offload_end) + const int /*offload_end*/) { free_list_local(); int size = list->get_maxlocal(); @@ -310,10 +310,10 @@ void IntelBuffers::free_nbor_list() /* ---------------------------------------------------------------------- */ template -void IntelBuffers::_grow_nbor_list(NeighList *list, +void IntelBuffers::_grow_nbor_list(NeighList * /*list*/, const int nlocal, const int nthreads, - const int offload_end, + const int /*offload_end*/, const int pack_width) { free_nbor_list(); @@ -382,7 +382,7 @@ void IntelBuffers::free_ccache() /* ---------------------------------------------------------------------- */ template -void IntelBuffers::grow_ccache(const int off_flag, +void IntelBuffers::grow_ccache(const int /*off_flag*/, const int nthreads, const int width) { @@ -481,7 +481,7 @@ void IntelBuffers::free_ncache() /* ---------------------------------------------------------------------- */ template -void IntelBuffers::grow_ncache(const int off_flag, +void IntelBuffers::grow_ncache(const int /*off_flag*/, const int nthreads) { const int nsize = get_max_nbors() * 3; diff --git a/src/USER-INTEL/intel_buffers.h b/src/USER-INTEL/intel_buffers.h index 8040715b2e197bea1a1d2eb4dea03b5ce4b6e15b..e8225a4a30f42f9d9012452fbf9bdfbebdce5195 100644 --- a/src/USER-INTEL/intel_buffers.h +++ b/src/USER-INTEL/intel_buffers.h @@ -135,24 +135,24 @@ class IntelBuffers { void set_ntypes(const int ntypes, const int use_ghost_cut = 0); - inline int * firstneigh(const NeighList *list) { return _list_alloc; } - inline int * cnumneigh(const NeighList *list) { return _cnumneigh; } + inline int * firstneigh(const NeighList * /*list*/) { return _list_alloc; } + inline int * cnumneigh(const NeighList * /*list*/) { return _cnumneigh; } inline int * get_atombin() { return _atombin; } inline int * get_binpacked() { return _binpacked; } - inline atom_t * get_x(const int offload = 1) { + inline atom_t * get_x(const int /*offload*/ = 1) { #ifdef _LMP_INTEL_OFFLOAD if (_separate_buffers && offload == 0) return _host_x; #endif return _x; } - inline flt_t * get_q(const int offload = 1) { + inline flt_t * get_q(const int /*offload*/ = 1) { #ifdef _LMP_INTEL_OFFLOAD if (_separate_buffers && offload == 0) return _host_q; #endif return _q; } - inline quat_t * get_quat(const int offload = 1) { + inline quat_t * get_quat(const int /*offload*/ = 1) { #ifdef _LMP_INTEL_OFFLOAD if (_separate_buffers && offload == 0) return _host_quat; #endif diff --git a/src/USER-INTEL/intel_intrinsics_airebo.h b/src/USER-INTEL/intel_intrinsics_airebo.h index 4a86d8db290d096dff9ae1e16809176a6ce18930..b20f9c8ad13d37d79844250552f972240deb9dc1 100644 --- a/src/USER-INTEL/intel_intrinsics_airebo.h +++ b/src/USER-INTEL/intel_intrinsics_airebo.h @@ -2057,8 +2057,8 @@ public: } VEC_INLINE static ivec set( - int i15, int i14, int i13, int i12, int i11, int i10, int i9, int i8, - int i7, int i6, int i5, int i4, int i3, int i2, int i1, int i0 + int /*i15*/, int /*i14*/, int /*i13*/, int /*i12*/, int /*i11*/, int /*i10*/, int /*i9*/, int /*i8*/, + int /*i7*/, int /*i6*/, int /*i5*/, int /*i4*/, int /*i3*/, int /*i2*/, int /*i1*/, int i0 ) { return i0; } @@ -2243,7 +2243,7 @@ public: FVEC_BINOP(*, mul) FVEC_BINOP(/, div) - VEC_INLINE static void gather_prefetch0(const ivec &idx, const void * mem) {} + VEC_INLINE static void gather_prefetch0(const ivec & /*idx*/, const void * /*mem*/) {} }; class avec { diff --git a/src/USER-INTEL/nbin_intel.cpp b/src/USER-INTEL/nbin_intel.cpp index e071b141fe077895a19801b4c9260f2555a88213..789fa35b429448a5e50651b206d5baea7364dd63 100644 --- a/src/USER-INTEL/nbin_intel.cpp +++ b/src/USER-INTEL/nbin_intel.cpp @@ -192,15 +192,10 @@ void NBinIntel::bin_atoms(IntelBuffers * buffers) { // ---------- Bin Atoms ------------- _fix->start_watch(TIME_HOST_NEIGHBOR); - const ATOM_T * _noalias const x = buffers->get_x(); + //const ATOM_T * _noalias const x = buffers->get_x(); int * _noalias const atombin = this->_atombin; int * _noalias const binpacked = this->_binpacked; - - const double sboxlo0 = bboxlo[0] + mbinxlo/bininvx; - const double sboxlo1 = bboxlo[1] + mbinylo/bininvy; - const double sboxlo2 = bboxlo[2] + mbinzlo/bininvz; - int i, ibin; for (i = 0; i < mbins; i++) binhead[i] = -1; diff --git a/src/USER-INTEL/npair_full_bin_ghost_intel.cpp b/src/USER-INTEL/npair_full_bin_ghost_intel.cpp index ae961e84b59f0c52038f1f14e38123ace6877d27..74a04f0e7de9dd97197049c7ac9227d2b8ee2516 100644 --- a/src/USER-INTEL/npair_full_bin_ghost_intel.cpp +++ b/src/USER-INTEL/npair_full_bin_ghost_intel.cpp @@ -106,7 +106,7 @@ void NPairFullBinGhostIntel::fbi(NeighList * list, /* ---------------------------------------------------------------------- */ template -void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, +void NPairFullBinGhostIntel::fbi(const int /*offload*/, NeighList * list, IntelBuffers * buffers, const int pstart, const int pend) { if (pend-pstart == 0) return; @@ -115,7 +115,6 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, int nall_t = nall; const int aend = nall; - const int pack_width = _fix->nbor_pack_width(); const ATOM_T * _noalias const x = buffers->get_x(); int * _noalias const firstneigh = buffers->firstneigh(list); const int e_nall = nall_t; @@ -155,9 +154,6 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, tagint * const molecule = atom->molecule; #endif - int *molindex = atom->molindex; - int *molatom = atom->molatom; - Molecule **onemols = atom->avec->onemols; int moltemplate; if (molecular == 2) moltemplate = 1; else moltemplate = 0; @@ -167,8 +163,8 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, int tnum; int *overflow; - double *timer_compute; #ifdef _LMP_INTEL_OFFLOAD + double *timer_compute; if (offload) { timer_compute = _fix->off_watch_neighbor(); tnum = buffers->get_off_threads(); @@ -311,7 +307,7 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, int * _noalias const ttag = ncachetag + toffs; // loop over all atoms in other bins in stencil, store every pair - int istart, icount, ncount, oldbin = -9999999, lane, max_chunk; + int ncount, oldbin = -9999999; for (int i = ifrom; i < ito; i++) { const flt_t xtmp = x[i].x; const flt_t ytmp = x[i].y; diff --git a/src/USER-INTEL/npair_intel.cpp b/src/USER-INTEL/npair_intel.cpp index 355c8db199b9bd010abb81868ce22bd2cc34d8a9..6d4529752ab38dd490680069d627c97a0de22446 100644 --- a/src/USER-INTEL/npair_intel.cpp +++ b/src/USER-INTEL/npair_intel.cpp @@ -54,10 +54,10 @@ NPairIntel::~NPairIntel() { template -void NPairIntel::bin_newton(const int offload, NeighList *list, +void NPairIntel::bin_newton(const int /*offload*/, NeighList *list, IntelBuffers *buffers, const int astart, const int aend, - const int offload_end) { + const int /*offload_end*/) { if (aend-astart == 0) return; @@ -109,8 +109,8 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, int tnum; int *overflow; - double *timer_compute; #ifdef _LMP_INTEL_OFFLOAD + double *timer_compute; if (offload) { timer_compute = _fix->off_watch_neighbor(); tnum = buffers->get_off_threads(); @@ -265,8 +265,9 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, int * _noalias itjtype; // loop over all atoms in other bins in stencil, store every pair - int istart, icount, ncount, oldbin = -9999999, lane, max_chunk; + int istart, icount, ncount, oldbin = -9999999; #ifdef LMP_INTEL_3BODY_FAST + int lane, max_chunk; if (THREE) { lane = 0; max_chunk = 0; @@ -579,7 +580,6 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, int ns; if (THREE) { - int alln = n; ns = n - pack_offset; atombin[i] = ns; ns += n2 - pack_offset - maxnbors; diff --git a/src/USER-INTEL/pair_airebo_intel.cpp b/src/USER-INTEL/pair_airebo_intel.cpp index 07f33f7ebe10bdfb1fac0511b768a9eba1fa3148..601144a3c03ae6a14f8cb2cb697cf19d7cdb020e 100644 --- a/src/USER-INTEL/pair_airebo_intel.cpp +++ b/src/USER-INTEL/pair_airebo_intel.cpp @@ -2200,7 +2200,7 @@ typedef typename intr_types::bvec bvec; VEC_INLINE inline static void aut_loadatoms_vec( AtomAIREBOT * atoms, ivec j_vec, - fvec *x, fvec * y, fvec * z, bvec * type_mask, int * map, ivec map_i, + fvec *x, fvec * y, fvec * z, bvec * type_mask, int * /*map*/, ivec map_i, ivec c_1 ) { const ivec c_4 = ivec::set1(4); @@ -2413,7 +2413,7 @@ static fvec aut_eval_poly_lin_pd_2(int n, flt_t * vals, ivec idx, fvec x, } static fvec aut_mask_gSpline_pd_2(KernelArgsAIREBOT * ka, - bvec active_mask, int itype, fvec cosjik, + bvec /*active_mask*/, int itype, fvec cosjik, fvec Nij, fvec *dgdc, fvec *dgdN) { int i; flt_t * gDom = NULL; @@ -2835,7 +2835,7 @@ static void aut_frebo_data_writeback( static void aut_frebo_N_spline_force( KernelArgsAIREBOT * _noalias ka, struct aut_frebo_data * _noalias data, int itype, int jtype, ivec vi, - ivec vj, fvec VA, fvec dN, fvec dNconj, fvec Nconj) { + ivec /*vj*/, fvec VA, fvec dN, fvec dNconj, fvec Nconj) { ivec c_i1 = ivec::set1(1); fvec c_2 = fvec::set1(2); fvec c_TOL = fvec::set1(TOL); @@ -2999,8 +2999,8 @@ static fvec aut_frebo_sum_omega( KernelArgsAIREBOT * _noalias ka, struct aut_frebo_data * _noalias i_data, struct aut_frebo_data * _noalias j_data, - int itype, int jtype, - ivec vi, ivec vj, + int /*itype*/, int /*jtype*/, + ivec /*vi*/, ivec /*vj*/, fvec r23x, fvec r23y, fvec r23z, fvec r23mag, fvec VA, fvec fij[3] ) { @@ -3284,7 +3284,7 @@ static void aut_torsion_vec( KernelArgsAIREBOT * ka, struct aut_frebo_data * i_data, struct aut_frebo_data * j_data, - ivec i, ivec j, fvec wij, fvec dwij + ivec /*i*/, ivec /*j*/, fvec wij, fvec dwij ) { AtomAIREBOT * x = ka->x; int * map = ka->map; @@ -4134,7 +4134,7 @@ exceed_limits: /* * Attempt to look up an element in the hash-map. */ -static fvec aut_airebo_lj_tap_test_path(KernelArgsAIREBOT * ka, +static fvec aut_airebo_lj_tap_test_path(KernelArgsAIREBOT * /*ka*/, struct aut_airebo_lj_test_path_result_data * test_path_result, bvec need_search, ivec i_bc, ivec j, LennardJonesPathAIREBOT path[fvec::VL] diff --git a/src/USER-INTEL/pair_eam_alloy_intel.cpp b/src/USER-INTEL/pair_eam_alloy_intel.cpp index 192b39b2e8c27ffd8a8cd3cffeee1de9969552e3..da8a180fff2dc1a36f1b5b64ae554a124285dfbe 100644 --- a/src/USER-INTEL/pair_eam_alloy_intel.cpp +++ b/src/USER-INTEL/pair_eam_alloy_intel.cpp @@ -126,7 +126,7 @@ void PairEAMAlloyIntel::read_file(char *filename) fptr = force->open_potential(filename); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); + snprintf(str,128,"Cannot open EAM potential file %s",filename); error->one(FLERR,str); } } diff --git a/src/USER-INTEL/pair_eam_fs_intel.cpp b/src/USER-INTEL/pair_eam_fs_intel.cpp index 61bb6e0b4d17674a2602f7eddea08cc4b82fa0ce..043f77db3efc1e1f7199993465b784f25b574f8a 100644 --- a/src/USER-INTEL/pair_eam_fs_intel.cpp +++ b/src/USER-INTEL/pair_eam_fs_intel.cpp @@ -126,7 +126,7 @@ void PairEAMFSIntel::read_file(char *filename) fptr = force->open_potential(filename); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); + snprintf(str,128,"Cannot open EAM potential file %s",filename); error->one(FLERR,str); } } diff --git a/src/USER-INTEL/pair_eam_intel.cpp b/src/USER-INTEL/pair_eam_intel.cpp index 201277e68dc7dc4fbcbe4b637716c1347615888a..ce9ede69d680684a6af9a896187d24fb425ed52b 100644 --- a/src/USER-INTEL/pair_eam_intel.cpp +++ b/src/USER-INTEL/pair_eam_intel.cpp @@ -784,7 +784,7 @@ void PairEAMIntel::ForceConst::set_ntypes(const int ntypes, /* ---------------------------------------------------------------------- */ int PairEAMIntel::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { if (fix->precision() == FixIntel::PREC_MODE_DOUBLE) return pack_forward_comm(n, list, buf, fp); diff --git a/src/USER-INTEL/pair_rebo_intel.cpp b/src/USER-INTEL/pair_rebo_intel.cpp index bc7197000bf3e8f94ee067c57f6f1310e2e440a8..3decc0154bdb0a0423baa348ed5e4f05a95106ab 100644 --- a/src/USER-INTEL/pair_rebo_intel.cpp +++ b/src/USER-INTEL/pair_rebo_intel.cpp @@ -28,7 +28,7 @@ PairREBOIntel::PairREBOIntel(LAMMPS *lmp) : PairAIREBOIntel(lmp) {} global settings ------------------------------------------------------------------------- */ -void PairREBOIntel::settings(int narg, char **arg) +void PairREBOIntel::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); diff --git a/src/USER-INTEL/pair_sw_intel.cpp b/src/USER-INTEL/pair_sw_intel.cpp index d1d52270be27c3f8b393fc0da5cc1f3773fca4a8..aff8ba88a74971f7ee1e4e7f824334af0f056330 100644 --- a/src/USER-INTEL/pair_sw_intel.cpp +++ b/src/USER-INTEL/pair_sw_intel.cpp @@ -173,7 +173,7 @@ template void PairSWIntel::eval(const int offload, const int vflag, IntelBuffers *buffers, const ForceConst &fc, const int astart, - const int aend, const int pad_width) + const int aend, const int /*pad_width*/) { const int inum = aend - astart; if (inum == 0) return; diff --git a/src/USER-INTEL/pppm_disp_intel.cpp b/src/USER-INTEL/pppm_disp_intel.cpp index 0a41e5d8a5341c635853a2125ea2603ba6a9e64e..3b05658278fddc5548e6c8158fa1e446e3cc3331 100644 --- a/src/USER-INTEL/pppm_disp_intel.cpp +++ b/src/USER-INTEL/pppm_disp_intel.cpp @@ -723,7 +723,7 @@ void PPPMDispIntel::particle_map(double delx, double dely, double delz, double sft, int** p2g, int nup, int nlow, int nxlo, int nylo, int nzlo, int nxhi, int nyhi, int nzhi, - IntelBuffers *buffers) + IntelBuffers * /*buffers*/) { int nlocal = atom->nlocal; int nthr = comm->nthreads; @@ -790,7 +790,7 @@ void PPPMDispIntel::particle_map(double delx, double dely, double delz, ------------------------------------------------------------------------- */ template -void PPPMDispIntel::make_rho_c(IntelBuffers *buffers) +void PPPMDispIntel::make_rho_c(IntelBuffers * /*buffers*/) { // clear 3d density array @@ -940,7 +940,7 @@ void PPPMDispIntel::make_rho_c(IntelBuffers *buffers) ------------------------------------------------------------------------- */ template -void PPPMDispIntel::make_rho_g(IntelBuffers *buffers) +void PPPMDispIntel::make_rho_g(IntelBuffers * /*buffers*/) { // clear 3d density array @@ -1091,7 +1091,7 @@ void PPPMDispIntel::make_rho_g(IntelBuffers *buffers) ------------------------------------------------------------------------- */ template -void PPPMDispIntel::make_rho_a(IntelBuffers *buffers) +void PPPMDispIntel::make_rho_a(IntelBuffers * /*buffers*/) { // clear 3d density array @@ -1225,7 +1225,7 @@ void PPPMDispIntel::make_rho_a(IntelBuffers *buffers) ------------------------------------------------------------------------- */ template -void PPPMDispIntel::make_rho_none(IntelBuffers *buffers) +void PPPMDispIntel::make_rho_none(IntelBuffers * /*buffers*/) { FFT_SCALAR * _noalias global_density = &(density_brick_none[0][nzlo_out_6][nylo_out_6][nxlo_out_6]); @@ -1373,7 +1373,7 @@ void PPPMDispIntel::make_rho_none(IntelBuffers *buffers) ------------------------------------------------------------------------- */ template -void PPPMDispIntel::fieldforce_c_ik(IntelBuffers *buffers) +void PPPMDispIntel::fieldforce_c_ik(IntelBuffers * /*buffers*/) { // loop over my charges, interpolate electric field from nearby grid points @@ -1520,7 +1520,7 @@ void PPPMDispIntel::fieldforce_c_ik(IntelBuffers *buffers) ------------------------------------------------------------------------- */ template -void PPPMDispIntel::fieldforce_c_ad(IntelBuffers *buffers) +void PPPMDispIntel::fieldforce_c_ad(IntelBuffers * /*buffers*/) { // loop over my charges, interpolate electric field from nearby grid points @@ -1725,7 +1725,7 @@ void PPPMDispIntel::fieldforce_c_ad(IntelBuffers *buffers) ------------------------------------------------------------------------- */ template -void PPPMDispIntel::fieldforce_g_ik(IntelBuffers *buffers) +void PPPMDispIntel::fieldforce_g_ik(IntelBuffers * /*buffers*/) { // loop over my charges, interpolate electric field from nearby grid points @@ -1869,7 +1869,7 @@ void PPPMDispIntel::fieldforce_g_ik(IntelBuffers *buffers) ------------------------------------------------------------------------- */ template -void PPPMDispIntel::fieldforce_g_ad(IntelBuffers *buffers) +void PPPMDispIntel::fieldforce_g_ad(IntelBuffers * /*buffers*/) { // loop over my charges, interpolate electric field from nearby grid points @@ -2069,7 +2069,7 @@ void PPPMDispIntel::fieldforce_g_ad(IntelBuffers *buffers) ------------------------------------------------------------------------- */ template -void PPPMDispIntel::fieldforce_a_ik(IntelBuffers *buffers) +void PPPMDispIntel::fieldforce_a_ik(IntelBuffers * /*buffers*/) { // loop over my charges, interpolate electric field from nearby grid points @@ -2282,7 +2282,7 @@ void PPPMDispIntel::fieldforce_a_ik(IntelBuffers *buffers) ------------------------------------------------------------------------- */ template -void PPPMDispIntel::fieldforce_a_ad(IntelBuffers *buffers) +void PPPMDispIntel::fieldforce_a_ad(IntelBuffers * /*buffers*/) { // loop over my charges, interpolate electric field from nearby grid points @@ -2594,7 +2594,7 @@ void PPPMDispIntel::fieldforce_a_ad(IntelBuffers *buffers) ------------------------------------------------------------------------- */ template -void PPPMDispIntel::fieldforce_none_ik(IntelBuffers *buffers) +void PPPMDispIntel::fieldforce_none_ik(IntelBuffers * /*buffers*/) { // loop over my charges, interpolate electric field from nearby grid points @@ -2755,7 +2755,7 @@ void PPPMDispIntel::fieldforce_none_ik(IntelBuffers *buffers) ------------------------------------------------------------------------- */ template -void PPPMDispIntel::fieldforce_none_ad(IntelBuffers *buffers) +void PPPMDispIntel::fieldforce_none_ad(IntelBuffers * /*buffers*/) { // loop over my charges, interpolate electric field from nearby grid points // (nx,ny,nz) = global coords of grid pt to "lower left" of charge diff --git a/src/USER-INTEL/pppm_intel.cpp b/src/USER-INTEL/pppm_intel.cpp index 46a55e558afbad5e408be10b24077430b53b65cc..e5540e637751bc758a347bcf00ee71aaf1c91e86 100644 --- a/src/USER-INTEL/pppm_intel.cpp +++ b/src/USER-INTEL/pppm_intel.cpp @@ -255,7 +255,7 @@ void PPPMIntel::compute_first(int eflag, int vflag) /* ---------------------------------------------------------------------- */ -void PPPMIntel::compute_second(int eflag, int vflag) +void PPPMIntel::compute_second(int /*eflag*/, int /*vflag*/) { int i,j; diff --git a/src/USER-LB/fix_lb_fluid.cpp b/src/USER-LB/fix_lb_fluid.cpp index 7a0bd0572ed63f1df5cd51eb8bead57d5ec05349..fecd6f2b25419088badbd29f29f4f557bb46aaf8 100644 --- a/src/USER-LB/fix_lb_fluid.cpp +++ b/src/USER-LB/fix_lb_fluid.cpp @@ -646,7 +646,7 @@ void FixLbFluid::init(void) } -void FixLbFluid::setup(int vflag) +void FixLbFluid::setup(int /*vflag*/) { //-------------------------------------------------------------------------- // Need to calculate the force on the fluid for a restart run. @@ -655,7 +655,7 @@ void FixLbFluid::setup(int vflag) calc_fluidforce(); } -void FixLbFluid::initial_integrate(int vflag) +void FixLbFluid::initial_integrate(int /*vflag*/) { //-------------------------------------------------------------------------- // Print a header labelling any output printed to the screen. @@ -711,7 +711,7 @@ void FixLbFluid::initial_integrate(int vflag) streamout(); } -void FixLbFluid::post_force(int vflag) +void FixLbFluid::post_force(int /*vflag*/) { if(fixviscouslb==1) calc_fluidforce(); @@ -741,7 +741,7 @@ void FixLbFluid::grow_arrays(int nmax) //========================================================================== // copy values within local atom-based array //========================================================================== -void FixLbFluid::copy_arrays(int i, int j, int delflag) +void FixLbFluid::copy_arrays(int i, int j, int /*delflag*/) { hydroF[j][0] = hydroF[i][0]; hydroF[j][1] = hydroF[i][1]; diff --git a/src/USER-LB/fix_lb_pc.cpp b/src/USER-LB/fix_lb_pc.cpp index 9fd0dab51de39ec708cad06ac94202321d3bb59c..c5c12d6c119e0cd62e8e06ccc4b2efe6c4e4510c 100644 --- a/src/USER-LB/fix_lb_pc.cpp +++ b/src/USER-LB/fix_lb_pc.cpp @@ -118,7 +118,7 @@ void FixLbPC::init() } /* ---------------------------------------------------------------------- */ -void FixLbPC::initial_integrate(int vflag) { +void FixLbPC::initial_integrate(int /*vflag*/) { double dtfm; @@ -285,7 +285,7 @@ void FixLbPC::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixLbPC::copy_arrays(int i, int j, int delflag) +void FixLbPC::copy_arrays(int i, int j, int /*delflag*/) { force_old[j][0] = force_old[i][0]; diff --git a/src/USER-LB/fix_lb_rigid_pc_sphere.cpp b/src/USER-LB/fix_lb_rigid_pc_sphere.cpp index dddd060fa4cd416bb3e97a77bfffedcb0a05da03..260153972758a193889eafa8a646da9dc14b1d03 100644 --- a/src/USER-LB/fix_lb_rigid_pc_sphere.cpp +++ b/src/USER-LB/fix_lb_rigid_pc_sphere.cpp @@ -1454,7 +1454,7 @@ void FixLbRigidPCSphere::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixLbRigidPCSphere::copy_arrays(int i, int j, int delflag) +void FixLbRigidPCSphere::copy_arrays(int i, int j, int /*delflag*/) { body[j] = body[i]; up[j][0] = up[i][0]; diff --git a/src/USER-LB/fix_lb_viscous.cpp b/src/USER-LB/fix_lb_viscous.cpp index 8ee4d8419e73e5a377fa65b2c8e40b13baef6b5a..afe23477be49fee5025294712ea6ee226c61f40b 100644 --- a/src/USER-LB/fix_lb_viscous.cpp +++ b/src/USER-LB/fix_lb_viscous.cpp @@ -109,7 +109,7 @@ void FixLbViscous::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixLbViscous::post_force(int vflag) +void FixLbViscous::post_force(int /*vflag*/) { // apply drag force to atoms in group // direction is opposed to velocity vector @@ -132,7 +132,7 @@ void FixLbViscous::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixLbViscous::post_force_respa(int vflag, int ilevel, int iloop) +void FixLbViscous::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_force(vflag); } diff --git a/src/USER-MANIFOLD/fix_manifoldforce.cpp b/src/USER-MANIFOLD/fix_manifoldforce.cpp index 04172d5c92da874322344e33fcd0aa4189f184cd..4e717ce55653b799e094e92e490f233e8e8a9ab8 100644 --- a/src/USER-MANIFOLD/fix_manifoldforce.cpp +++ b/src/USER-MANIFOLD/fix_manifoldforce.cpp @@ -149,7 +149,7 @@ void FixManifoldForce::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixManifoldForce::post_force(int vflag) +void FixManifoldForce::post_force(int /*vflag*/) { double **x = atom->x; double **f = atom->f; @@ -177,7 +177,7 @@ void FixManifoldForce::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixManifoldForce::post_force_respa(int vflag, int ilevel, int iloop) +void FixManifoldForce::post_force_respa(int vflag, int /*ilevel*/, int /*iloop*/) { post_force(vflag); } diff --git a/src/USER-MANIFOLD/fix_nve_manifold_rattle.cpp b/src/USER-MANIFOLD/fix_nve_manifold_rattle.cpp index 4dcc3f9704aa3543aeaa62ed7a9202135218c801..3c6c70f6dfe3ed2bc33750d60c40d626e0cd9bfc 100644 --- a/src/USER-MANIFOLD/fix_nve_manifold_rattle.cpp +++ b/src/USER-MANIFOLD/fix_nve_manifold_rattle.cpp @@ -307,7 +307,7 @@ void FixNVEManifoldRattle::update_var_params() /* ----------------------------------------------------------------------------- ---------------------------------------------------------------------------*/ -int FixNVEManifoldRattle::dof(int igroup) +int FixNVEManifoldRattle::dof(int /*igroup*/) { int *mask = atom->mask; int nlocal = atom->nlocal; @@ -348,7 +348,7 @@ double FixNVEManifoldRattle::memory_usage() /* ----------------------------------------------------------------------------- ---------------------------------------------------------------------------*/ -void FixNVEManifoldRattle::initial_integrate(int vflag) +void FixNVEManifoldRattle::initial_integrate(int /*vflag*/) { update_var_params(); nve_x_rattle(igroup, groupbit); diff --git a/src/USER-MANIFOLD/fix_nvt_manifold_rattle.cpp b/src/USER-MANIFOLD/fix_nvt_manifold_rattle.cpp index 973a5bcf43875d12af45655be1ff97f54c17e139..2a204d2048b79ddc2306ddd43b11c41438e207fb 100644 --- a/src/USER-MANIFOLD/fix_nvt_manifold_rattle.cpp +++ b/src/USER-MANIFOLD/fix_nvt_manifold_rattle.cpp @@ -229,7 +229,7 @@ void FixNVTManifoldRattle::init() -void FixNVTManifoldRattle::setup(int vflag) +void FixNVTManifoldRattle::setup(int /*vflag*/) { compute_temp_target(); @@ -371,7 +371,7 @@ void FixNVTManifoldRattle::nh_v_temp() // Most of this logic is based on fix_nh: -void FixNVTManifoldRattle::initial_integrate(int vflag) +void FixNVTManifoldRattle::initial_integrate(int /*vflag*/) { update_var_params(); diff --git a/src/USER-MANIFOLD/manifold.h b/src/USER-MANIFOLD/manifold.h index 6eb09010efbb3022bed71c282744db7792140ba8..b0727c346d5efb70272b3493d8ef5ea746108aa3 100644 --- a/src/USER-MANIFOLD/manifold.h +++ b/src/USER-MANIFOLD/manifold.h @@ -61,7 +61,7 @@ namespace user_manifold { virtual const char *id() = 0; - virtual void set_atom_id( tagint a_id ){} + virtual void set_atom_id( tagint /*a_id*/ ){} virtual int nparams() = 0; // double *get_params(){ return params; }; diff --git a/src/USER-MANIFOLD/manifold_cylinder.cpp b/src/USER-MANIFOLD/manifold_cylinder.cpp index c13581c640587c4fdb53c5334a3a844d1f5466e8..28062d7a27533ff7835e52622f918971c00bfcb4 100644 --- a/src/USER-MANIFOLD/manifold_cylinder.cpp +++ b/src/USER-MANIFOLD/manifold_cylinder.cpp @@ -5,8 +5,8 @@ using namespace LAMMPS_NS; using namespace user_manifold; -manifold_cylinder::manifold_cylinder( LAMMPS *lmp, int argc, - char **argv ) : manifold(lmp) +manifold_cylinder::manifold_cylinder( LAMMPS *lmp, int /*argc*/, + char **/*argv*/ ) : manifold(lmp) {} diff --git a/src/USER-MANIFOLD/manifold_cylinder_dent.cpp b/src/USER-MANIFOLD/manifold_cylinder_dent.cpp index 21d4087d7c240722162b0eb556aa0b873c1a8896..4df4c833d3fb9c798d7c625e8854f61858d95f36 100644 --- a/src/USER-MANIFOLD/manifold_cylinder_dent.cpp +++ b/src/USER-MANIFOLD/manifold_cylinder_dent.cpp @@ -8,8 +8,8 @@ using namespace LAMMPS_NS; using namespace user_manifold; -manifold_cylinder_dent::manifold_cylinder_dent( LAMMPS *lmp, int argc, - char **argv ) : manifold(lmp) +manifold_cylinder_dent::manifold_cylinder_dent( LAMMPS *lmp, int /*argc*/, + char **/*argv*/ ) : manifold(lmp) {} diff --git a/src/USER-MANIFOLD/manifold_dumbbell.cpp b/src/USER-MANIFOLD/manifold_dumbbell.cpp index fa7edc6e4afa4fa345c283187d073365a05dedb7..c40a5fff9f1538d391819262aa736f8a3a693ef3 100644 --- a/src/USER-MANIFOLD/manifold_dumbbell.cpp +++ b/src/USER-MANIFOLD/manifold_dumbbell.cpp @@ -6,7 +6,7 @@ using namespace LAMMPS_NS; using namespace user_manifold; -manifold_dumbbell::manifold_dumbbell( LAMMPS *lmp, int argc, char **argv ) : manifold(lmp) +manifold_dumbbell::manifold_dumbbell( LAMMPS *lmp, int /*argc*/, char **/*argv*/ ) : manifold(lmp) {} diff --git a/src/USER-MANIFOLD/manifold_ellipsoid.cpp b/src/USER-MANIFOLD/manifold_ellipsoid.cpp index f590123dc3b8aa9385ed78994cf1b9fc841541e9..d5e7bb146ec82301e868b11a20518b4964047318 100644 --- a/src/USER-MANIFOLD/manifold_ellipsoid.cpp +++ b/src/USER-MANIFOLD/manifold_ellipsoid.cpp @@ -4,7 +4,7 @@ using namespace LAMMPS_NS; using namespace user_manifold; -manifold_ellipsoid::manifold_ellipsoid( LAMMPS *lmp, int narg, char **argv ) : manifold(lmp) +manifold_ellipsoid::manifold_ellipsoid( LAMMPS *lmp, int /*narg*/, char **/*argv*/ ) : manifold(lmp) {} diff --git a/src/USER-MANIFOLD/manifold_gaussian_bump.cpp b/src/USER-MANIFOLD/manifold_gaussian_bump.cpp index a9ee35bbfc5f23628c2943e70ea8043777028af1..b95162740bdd2deef1f8d47330689bae188ec9c4 100644 --- a/src/USER-MANIFOLD/manifold_gaussian_bump.cpp +++ b/src/USER-MANIFOLD/manifold_gaussian_bump.cpp @@ -25,7 +25,6 @@ public: cubic_hermite( double x0, double x1, double y0, double y1, double yp0, double yp1, LAMMPS_NS::Error *err ) : - x0(x0), x1(x1), y0(y0), y1(y1), yp0(yp0), yp1(yp1), a( 2*x0 + 2 - 2*x1 ), b( -3*x0 - 3 + 3*x1 ), c( 1.0 ), @@ -34,6 +33,7 @@ public: u( -3*y0 + 3*y1 - 2*yp0 - yp1 ), v( yp0 ), w( y0 ), + x0(x0), x1(x1), y0(y0), y1(y1), yp0(yp0), yp1(yp1), err(err) { test(); @@ -133,7 +133,7 @@ public: // Manifold itself: manifold_gaussian_bump::manifold_gaussian_bump(class LAMMPS* lmp, - int narg, char **arg) + int /*narg*/, char **/*arg*/) : manifold(lmp), lut_z(NULL), lut_zp(NULL) {} diff --git a/src/USER-MANIFOLD/manifold_plane.cpp b/src/USER-MANIFOLD/manifold_plane.cpp index d33617fbfba8d580b0457d46e6a5737ea04ff851..6c3f17393aed528231f8ea649bfaf5157cd3726a 100644 --- a/src/USER-MANIFOLD/manifold_plane.cpp +++ b/src/USER-MANIFOLD/manifold_plane.cpp @@ -4,7 +4,7 @@ using namespace LAMMPS_NS; using namespace user_manifold; -manifold_plane::manifold_plane( LAMMPS *lmp, int argc, char **argv ) : +manifold_plane::manifold_plane( LAMMPS *lmp, int /*argc*/, char **/*argv*/ ) : manifold(lmp) {} @@ -16,7 +16,7 @@ double manifold_plane::g( const double *x ) } -void manifold_plane::n( const double *x, double *n ) +void manifold_plane::n( const double * /*x*/, double *n ) { n[0] = params[0]; n[1] = params[1]; diff --git a/src/USER-MANIFOLD/manifold_plane_wiggle.cpp b/src/USER-MANIFOLD/manifold_plane_wiggle.cpp index ccf0a794dadc28900dcee2a01cee1a6343d39b68..983702b6f3c60d57e2d12452ff2e605fb69cd1e7 100644 --- a/src/USER-MANIFOLD/manifold_plane_wiggle.cpp +++ b/src/USER-MANIFOLD/manifold_plane_wiggle.cpp @@ -5,7 +5,7 @@ using namespace LAMMPS_NS; using namespace user_manifold; -manifold_plane_wiggle::manifold_plane_wiggle( LAMMPS *lmp, int argc, char **argv ) : +manifold_plane_wiggle::manifold_plane_wiggle( LAMMPS *lmp, int /*argc*/, char **/*argv*/ ) : manifold(lmp) {} diff --git a/src/USER-MANIFOLD/manifold_sphere.h b/src/USER-MANIFOLD/manifold_sphere.h index 5d4ae55fdace151347cb7039131d776abb0f9fb7..d9cd46c9c3f5be09dc716222098a78dd9872964d 100644 --- a/src/USER-MANIFOLD/manifold_sphere.h +++ b/src/USER-MANIFOLD/manifold_sphere.h @@ -40,7 +40,7 @@ namespace user_manifold { nn[2] = 2*x[2]; } - virtual void H( double *x, double h[3][3] ) + virtual void H( double * /*x*/, double h[3][3] ) { h[0][1] = h[0][2] = h[1][0] = h[1][2] = h[2][0] = h[2][1] = 0.0; h[0][0] = h[1][1] = h[2][2] = 2.0; diff --git a/src/USER-MANIFOLD/manifold_spine.cpp b/src/USER-MANIFOLD/manifold_spine.cpp index 308190c5288ea41ad9ceb689b9df1f849ffb8c08..0ca4c6700205399a0485ac65c2da5570f797f6d3 100644 --- a/src/USER-MANIFOLD/manifold_spine.cpp +++ b/src/USER-MANIFOLD/manifold_spine.cpp @@ -8,7 +8,7 @@ using namespace user_manifold; -manifold_spine::manifold_spine( LAMMPS *lmp, int argc, char **argv ) +manifold_spine::manifold_spine( LAMMPS *lmp, int /*argc*/, char **/*argv*/ ) : manifold(lmp) { power = 4; diff --git a/src/USER-MANIFOLD/manifold_thylakoid.cpp b/src/USER-MANIFOLD/manifold_thylakoid.cpp index b7eb155ba27b5b40c4f4d1dafc87942839b887d4..93cf60ad0392f8e53a412b4dec57e982b956b1ec 100644 --- a/src/USER-MANIFOLD/manifold_thylakoid.cpp +++ b/src/USER-MANIFOLD/manifold_thylakoid.cpp @@ -12,7 +12,7 @@ using namespace LAMMPS_NS; using namespace user_manifold; -manifold_thylakoid::manifold_thylakoid( LAMMPS *lmp, int narg, char ** arg) +manifold_thylakoid::manifold_thylakoid( LAMMPS *lmp, int /*narg*/, char ** /*arg*/) : manifold(lmp) { // You can NOT depend on proper construction of the domains in @@ -117,7 +117,7 @@ void manifold_thylakoid::n( const double *x, double *n ) } } -thyla_part *manifold_thylakoid::get_thyla_part( const double *x, int *err_flag, std::size_t *idx ) +thyla_part *manifold_thylakoid::get_thyla_part( const double *x, int * /*err_flag*/, std::size_t *idx ) { for( std::size_t i = 0; i < parts.size(); ++i ){ diff --git a/src/USER-MANIFOLD/manifold_torus.cpp b/src/USER-MANIFOLD/manifold_torus.cpp index 44a17725b5e2230e4cbc2e2fb5809ef693d99c0a..0b4ca24370ce11d9701013b21159ced669e09d24 100644 --- a/src/USER-MANIFOLD/manifold_torus.cpp +++ b/src/USER-MANIFOLD/manifold_torus.cpp @@ -6,7 +6,7 @@ using namespace LAMMPS_NS; using namespace user_manifold; -manifold_torus::manifold_torus( LAMMPS *lmp, int argc, char **argv ) : manifold(lmp) +manifold_torus::manifold_torus( LAMMPS *lmp, int /*argc*/, char **/*argv*/ ) : manifold(lmp) {} diff --git a/src/USER-MEAMC/meam_dens_final.cpp b/src/USER-MEAMC/meam_dens_final.cpp index de188e497db05954deaa0e84ec9d9670c2a19b7e..2be215c282efd21397621c2cfe671d3f77737f27 100644 --- a/src/USER-MEAMC/meam_dens_final.cpp +++ b/src/USER-MEAMC/meam_dens_final.cpp @@ -5,7 +5,7 @@ using namespace LAMMPS_NS; void MEAM::meam_dens_final(int nlocal, int eflag_either, int eflag_global, int eflag_atom, double* eng_vdwl, - double* eatom, int ntype, int* type, int* fmap, int& errorflag) + double* eatom, int /*ntype*/, int* type, int* fmap, int& errorflag) { int i, elti; int m; diff --git a/src/USER-MEAMC/meam_dens_init.cpp b/src/USER-MEAMC/meam_dens_init.cpp index e1a7509ab30db041337bddc0d7bb2f6ea763f81e..0aa71125c8e7de1472d7c9057b3fa9727989ad9c 100644 --- a/src/USER-MEAMC/meam_dens_init.cpp +++ b/src/USER-MEAMC/meam_dens_init.cpp @@ -93,7 +93,7 @@ MEAM::meam_dens_init(int i, int ntype, int* type, int* fmap, double** x, void MEAM::getscreen(int i, double* scrfcn, double* dscrfcn, double* fcpair, double** x, int numneigh, - int* firstneigh, int numneigh_full, int* firstneigh_full, int ntype, int* type, int* fmap) + int* firstneigh, int numneigh_full, int* firstneigh_full, int /*ntype*/, int* type, int* fmap) { int jn, j, kn, k; int elti, eltj, eltk; @@ -101,7 +101,7 @@ MEAM::getscreen(int i, double* scrfcn, double* dscrfcn, double* fcpair, double** double xjtmp, yjtmp, zjtmp, delxik, delyik, delzik, rik2 /*,rik*/; double xktmp, yktmp, zktmp, delxjk, delyjk, delzjk, rjk2 /*,rjk*/; double xik, xjk, sij, fcij, sfcij, dfcij, sikj, dfikj, cikj; - double Cmin, Cmax, delc, /*ebound,*/ rbound, a, coef1, coef2; + double Cmin, Cmax, delc, /*ebound,*/ a, coef1, coef2; double dCikj; double rnorm, fc, dfc, drinv; @@ -129,6 +129,7 @@ MEAM::getscreen(int i, double* scrfcn, double* dscrfcn, double* fcpair, double** rij2 = delxij * delxij + delyij * delyij + delzij * delzij; rij = sqrt(rij2); + const double rbound = this->ebound_meam[elti][eltj] * rij2; if (rij > this->rc_meam) { fcij = 0.0; dfcij = 0.0; @@ -138,7 +139,6 @@ MEAM::getscreen(int i, double* scrfcn, double* dscrfcn, double* fcpair, double** sij = 1.0; // if rjk2 > ebound*rijsq, atom k is definitely outside the ellipse - const double rbound = this->ebound_meam[elti][eltj] * rij2; for (kn = 0; kn < numneigh_full; kn++) { k = firstneigh_full[kn]; eltk = fmap[type[k]]; @@ -193,7 +193,6 @@ MEAM::getscreen(int i, double* scrfcn, double* dscrfcn, double* fcpair, double** if (iszero(sfcij) || iszero(sfcij - 1.0)) goto LABEL_100; - rbound = this->ebound_meam[elti][eltj] * rij2; for (kn = 0; kn < numneigh_full; kn++) { k = firstneigh_full[kn]; if (k == j) continue; @@ -256,7 +255,7 @@ MEAM::getscreen(int i, double* scrfcn, double* dscrfcn, double* fcpair, double** // ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc void -MEAM::calc_rho1(int i, int ntype, int* type, int* fmap, double** x, int numneigh, int* firstneigh, +MEAM::calc_rho1(int i, int /*ntype*/, int* type, int* fmap, double** x, int numneigh, int* firstneigh, double* scrfcn, double* fcpair) { int jn, j, m, n, p, elti, eltj; diff --git a/src/USER-MEAMC/meam_force.cpp b/src/USER-MEAMC/meam_force.cpp index 85314dd8a2f0ef5bcf319936183ff0f1e70dd280..06fbb57adb11a778d088c1fc166ffe231ff23ade 100644 --- a/src/USER-MEAMC/meam_force.cpp +++ b/src/USER-MEAMC/meam_force.cpp @@ -7,7 +7,7 @@ using namespace LAMMPS_NS; void MEAM::meam_force(int i, int eflag_either, int eflag_global, int eflag_atom, int vflag_atom, double* eng_vdwl, - double* eatom, int ntype, int* type, int* fmap, double** x, int numneigh, int* firstneigh, + double* eatom, int /*ntype*/, int* type, int* fmap, double** x, int numneigh, int* firstneigh, int numneigh_full, int* firstneigh_full, int fnoffset, double** f, double** vatom) { int j, jn, k, kn, kk, m, n, p, q; diff --git a/src/USER-MEAMC/meam_funcs.cpp b/src/USER-MEAMC/meam_funcs.cpp index 29db27fc4b816f891f9ff4e3e102f5171710e278..1d47dcc1f6fca6b0215252d535d6e8d9663e8d1c 100644 --- a/src/USER-MEAMC/meam_funcs.cpp +++ b/src/USER-MEAMC/meam_funcs.cpp @@ -87,7 +87,7 @@ MEAM::dG_gam(const double gamma, const int ibar, double& dG) const // e.g. gsmooth_factor is 99, {: // gsmooth_switchpoint = -0.99 // G = 0.01*(-0.99/gamma)**99 - double G = 1 / (gsmooth_factor + 1) * pow((gsmooth_switchpoint / gamma), gsmooth_factor); + G = 1 / (gsmooth_factor + 1) * pow((gsmooth_switchpoint / gamma), gsmooth_factor); G = sqrt(G); dG = -gsmooth_factor * G / (2.0 * gamma); return G; diff --git a/src/USER-MEAMC/meam_impl.cpp b/src/USER-MEAMC/meam_impl.cpp index 25c53785e49a9abae6f4a5794354686f3883bb24..d4a47a4f48fc428243183d1527cf413af4e183ce 100644 --- a/src/USER-MEAMC/meam_impl.cpp +++ b/src/USER-MEAMC/meam_impl.cpp @@ -34,6 +34,19 @@ MEAM::MEAM(Memory* mem) maxneigh = 0; scrfcn = dscrfcn = fcpair = NULL; + + neltypes = 0; + for (int i = 0; i < maxelt; i++) { + Omega_meam[i] = Z_meam[i] = A_meam[i] = rho0_meam[i] = beta0_meam[i] = + beta1_meam[i]= beta2_meam[i] = beta3_meam[i] = + t0_meam[i] = t1_meam[i] = t2_meam[i] = t3_meam[i] = + rho_ref_meam[i] = ibar_meam[i] = ielt_meam[i] = 0.0; + for (int j = 0; j < maxelt; j++) { + lattce_meam[i][j] = FCC; + Ec_meam[i][j] = re_meam[i][j] = alpha_meam[i][j] = delta_meam[i][j] = Ec_meam[i][j] = ebound_meam[i][j] = attrac_meam[i][j] = repuls_meam[i][j] = 0.0; + nn2_meam[i][j] = zbl_meam[i][j] = eltind[i][j] = 0; + } + } } MEAM::~MEAM() diff --git a/src/USER-MEAMC/meam_setup_global.cpp b/src/USER-MEAMC/meam_setup_global.cpp index 7f8ad3d81f5f09fbff2224c28ee866ddf234686f..503ee6549647f8c654b6a3b3c6a1ecb6815cc058 100644 --- a/src/USER-MEAMC/meam_setup_global.cpp +++ b/src/USER-MEAMC/meam_setup_global.cpp @@ -3,7 +3,7 @@ using namespace LAMMPS_NS; void -MEAM::meam_setup_global(int nelt, lattice_t* lat, double* z, int* ielement, double* atwt, double* alpha, +MEAM::meam_setup_global(int nelt, lattice_t* lat, double* z, int* ielement, double* /*atwt*/, double* alpha, double* b0, double* b1, double* b2, double* b3, double* alat, double* esub, double* asub, double* t0, double* t1, double* t2, double* t3, double* rozero, int* ibar) diff --git a/src/USER-MEAMC/pair_meamc.cpp b/src/USER-MEAMC/pair_meamc.cpp index 027e4c27a79ca000dd10a3b6383a97152f0a1bd1..b74416a46d30f215dbb1b7bf5b5bc72fc1452386 100644 --- a/src/USER-MEAMC/pair_meamc.cpp +++ b/src/USER-MEAMC/pair_meamc.cpp @@ -195,7 +195,7 @@ void PairMEAMC::allocate() global settings ------------------------------------------------------------------------- */ -void PairMEAMC::settings(int narg, char **arg) +void PairMEAMC::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -206,7 +206,7 @@ void PairMEAMC::settings(int narg, char **arg) void PairMEAMC::coeff(int narg, char **arg) { - int i,j,m,n; + int m,n; if (!allocated) allocate(); @@ -222,7 +222,7 @@ void PairMEAMC::coeff(int narg, char **arg) // elements = list of unique element names if (nelements) { - for (i = 0; i < nelements; i++) delete [] elements[i]; + for (int i = 0; i < nelements; i++) delete [] elements[i]; delete [] elements; delete [] mass; } @@ -231,7 +231,7 @@ void PairMEAMC::coeff(int narg, char **arg) elements = new char*[nelements]; mass = new double[nelements]; - for (i = 0; i < nelements; i++) { + for (int i = 0; i < nelements; i++) { n = strlen(arg[i+3]) + 1; elements[i] = new char[n]; strcpy(elements[i],arg[i+3]); @@ -247,8 +247,9 @@ void PairMEAMC::coeff(int narg, char **arg) // read args that map atom types to MEAM elements // map[i] = which element the Ith atom type is, -1 if not mapped - for (i = 4 + nelements; i < narg; i++) { + for (int i = 4 + nelements; i < narg; i++) { m = i - (4+nelements) + 1; + int j; for (j = 0; j < nelements; j++) if (strcmp(arg[i],elements[j]) == 0) break; if (j < nelements) map[m] = j; @@ -312,7 +313,7 @@ void PairMEAMC::init_list(int id, NeighList *ptr) init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairMEAMC::init_one(int i, int j) +double PairMEAMC::init_one(int /*i*/, int /*j*/) { return cutmax; } @@ -328,7 +329,7 @@ void PairMEAMC::read_files(char *globalfile, char *userfile) fp = force->open_potential(globalfile); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open MEAM potential file %s",globalfile); + snprintf(str,128,"Cannot open MEAM potential file %s",globalfile); error->one(FLERR,str); } } @@ -509,7 +510,7 @@ void PairMEAMC::read_files(char *globalfile, char *userfile) fp = force->open_potential(userfile); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open MEAM potential file %s",userfile); + snprintf(str,128,"Cannot open MEAM potential file %s",userfile); error->one(FLERR,str); } } @@ -558,8 +559,8 @@ void PairMEAMC::read_files(char *globalfile, char *userfile) if (strcmp(params[0],keywords[which]) == 0) break; if (which == nkeywords) { char str[128]; - sprintf(str,"Keyword %s in MEAM parameter file not recognized", - params[0]); + snprintf(str,128,"Keyword %s in MEAM parameter file not recognized", + params[0]); error->all(FLERR,str); } nindex = nparams - 2; @@ -598,7 +599,7 @@ void PairMEAMC::read_files(char *globalfile, char *userfile) /* ---------------------------------------------------------------------- */ int PairMEAMC::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,k,m; diff --git a/src/USER-MESO/fix_edpd_source.cpp b/src/USER-MESO/fix_edpd_source.cpp index 8b03e051814ffe6f636f01d7c8e92f4b83950464..24bef2b1f72fdfe4c1f06b21175b5d9b90ef6eff 100644 --- a/src/USER-MESO/fix_edpd_source.cpp +++ b/src/USER-MESO/fix_edpd_source.cpp @@ -87,7 +87,7 @@ void FixEDPDSource::init() /* ---------------------------------------------------------------------- */ -void FixEDPDSource::post_force(int vflag) +void FixEDPDSource::post_force(int /*vflag*/) { double **x = atom->x; double *edpd_flux = atom->edpd_flux; diff --git a/src/USER-MESO/fix_mvv_dpd.cpp b/src/USER-MESO/fix_mvv_dpd.cpp index c97a2d779c0de1595e13a5e09f2a3809d4057fa1..f663165f78d834d4aec55b51bb23e9f0e63a7c5f 100644 --- a/src/USER-MESO/fix_mvv_dpd.cpp +++ b/src/USER-MESO/fix_mvv_dpd.cpp @@ -72,7 +72,7 @@ void FixMvvDPD::init() allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixMvvDPD::initial_integrate(int vflag) +void FixMvvDPD::initial_integrate(int /*vflag*/) { double dtfm; double **x = atom->x; diff --git a/src/USER-MESO/fix_mvv_edpd.cpp b/src/USER-MESO/fix_mvv_edpd.cpp index 89a831e121b9a37fbdb8271f9db554b2fa6d2d07..8719d0d262d35e3f20eb0e0d57f031141ed69981 100644 --- a/src/USER-MESO/fix_mvv_edpd.cpp +++ b/src/USER-MESO/fix_mvv_edpd.cpp @@ -78,7 +78,7 @@ void FixMvvEDPD::init() allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixMvvEDPD::initial_integrate(int vflag) +void FixMvvEDPD::initial_integrate(int /*vflag*/) { double dtfm,dtT; // update v and x and cc of atoms in group diff --git a/src/USER-MESO/fix_mvv_tdpd.cpp b/src/USER-MESO/fix_mvv_tdpd.cpp index e16171800b1b61bc44899fc0895adff7a52637a3..24b1bbcf48bc2ed85d27fbf8e80893794689bdfc 100644 --- a/src/USER-MESO/fix_mvv_tdpd.cpp +++ b/src/USER-MESO/fix_mvv_tdpd.cpp @@ -76,7 +76,7 @@ void FixMvvTDPD::init() allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixMvvTDPD::initial_integrate(int vflag) +void FixMvvTDPD::initial_integrate(int /*vflag*/) { double dtfm; // update v and x and cc of atoms in group diff --git a/src/USER-MESO/fix_tdpd_source.cpp b/src/USER-MESO/fix_tdpd_source.cpp index 64964a4c983ebb5ef8fb5cd27df15079f8860464..89e8005b43500bedefeee55078c3fe5b914ebec3 100644 --- a/src/USER-MESO/fix_tdpd_source.cpp +++ b/src/USER-MESO/fix_tdpd_source.cpp @@ -88,7 +88,7 @@ void FixTDPDSource::init() /* ---------------------------------------------------------------------- */ -void FixTDPDSource::post_force(int vflag) +void FixTDPDSource::post_force(int /*vflag*/) { double **x = atom->x; double **cc_flux = atom->cc_flux; diff --git a/src/USER-MESO/pair_edpd.cpp b/src/USER-MESO/pair_edpd.cpp index 351637a842018c6469c09a1929e5552487c20695..5ed63a2a8b3dca4ad4a10fde95ed79ba9f185ac9 100644 --- a/src/USER-MESO/pair_edpd.cpp +++ b/src/USER-MESO/pair_edpd.cpp @@ -530,7 +530,7 @@ void PairEDPD::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ double PairEDPD::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_dpd, double &fforce) + double /*factor_coul*/, double factor_dpd, double &fforce) { double r,rinv,wc,phi; double *T = atom->edpd_temp; diff --git a/src/USER-MESO/pair_mdpd_rhosum.cpp b/src/USER-MESO/pair_mdpd_rhosum.cpp index 1264d03ed3b5dd9404fef9ba6a5eac0acb28b16d..806a63f898685c731b6a79d1937e102a1e184a26 100644 --- a/src/USER-MESO/pair_mdpd_rhosum.cpp +++ b/src/USER-MESO/pair_mdpd_rhosum.cpp @@ -186,7 +186,7 @@ void PairMDPDRhoSum::allocate() { global settings ------------------------------------------------------------------------- */ -void PairMDPDRhoSum::settings(int narg, char **arg) { +void PairMDPDRhoSum::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal number of setting arguments for pair_style mdpd/rhosum"); } @@ -236,8 +236,8 @@ double PairMDPDRhoSum::init_one(int i, int j) { /* ---------------------------------------------------------------------- */ -double PairMDPDRhoSum::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, double &fforce) { +double PairMDPDRhoSum::single(int /*i*/, int /*j*/, int /*itype*/, int /*jtype*/, double /*rsq*/, + double /*factor_coul*/, double /*factor_lj*/, double &fforce) { fforce = 0.0; return 0.0; @@ -246,7 +246,7 @@ double PairMDPDRhoSum::single(int i, int j, int itype, int jtype, double rsq, /* ---------------------------------------------------------------------- */ int PairMDPDRhoSum::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) { + int /*pbc_flag*/, int * /*pbc*/) { int i, j, m; double *rho = atom->rho; diff --git a/src/USER-MESO/pair_tdpd.cpp b/src/USER-MESO/pair_tdpd.cpp index b8bbf6d622f51e16f15813cbeb1af08a692adceb..821d8c0486b60928ba9f075daf1ad2a242b10da5 100644 --- a/src/USER-MESO/pair_tdpd.cpp +++ b/src/USER-MESO/pair_tdpd.cpp @@ -465,8 +465,8 @@ void PairTDPD::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairTDPD::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_dpd, double &fforce) +double PairTDPD::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_dpd, double &fforce) { double r,rinv,wc,phi; diff --git a/src/USER-MGPT/mgpt_linalg.cpp b/src/USER-MGPT/mgpt_linalg.cpp index 94a4e21ea6a3cb185a556459e30dd98b3cbab0e4..68701037f4a52bbdfeba238004f67d7900d2cb72 100644 --- a/src/USER-MGPT/mgpt_linalg.cpp +++ b/src/USER-MGPT/mgpt_linalg.cpp @@ -81,8 +81,8 @@ #define const #endif static void transprod_generic(const double * restrict A, - const double * restrict B, - double * restrict C) { + const double * restrict B, + double * restrict C) { const int lda = 8,n = mgpt_linalg::matrix_size; int i,j,k; double s; @@ -90,15 +90,15 @@ static void transprod_generic(const double * restrict A, for(j = 0; jall(__FILE__,__LINE__,"Illegal pair_style command"); } @@ -2025,7 +2025,7 @@ void PairMGPT::init_list(int id, NeighList *ptr) /* ---------------------------------------------------------------------- init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairMGPT::init_one(int i, int j) +double PairMGPT::init_one(int /*i*/, int /*j*/) { return cutoff; } diff --git a/src/USER-MISC/README b/src/USER-MISC/README index 0f9e7bf383bf3e005b828672ad24b360d6f9b440..cf948df233cb53819d220e5286454d9e21319888 100644 --- a/src/USER-MISC/README +++ b/src/USER-MISC/README @@ -30,6 +30,9 @@ compute ackland/atom, Gerolf Ziegenhain, gerolf at ziegenhain.com, 4 Oct 2007 compute basal/atom, Christopher Barrett, cdb333 at cavs.msstate.edu, 3 Mar 2013 compute cnp/atom, Paulo Branicio (USC), branicio at usc.edu, 31 May 2017 compute entropy/atom, Pablo Piaggi (EPFL), pablo.piaggi at epfl.ch, 15 June 2018 +compute pressure/cylinder, Cody K. Addington (NCSU), , 2 Oct 2018 +compute stress/mop, Romain Vermorel (U Pau) & Laurent Joly (U Lyon), romain.vermorel at univ-pau.fr & ljoly.ulyon at gmail.com, 5 Sep 18 +compute stress/mop/profile, Romain Vermorel (U Pau) & Laurent Joly (U Lyon), romain.vermorel at univ-pau.fr & ljoly.ulyon at gmail.com, 5 Sep 18 compute temp/rotate, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11 compute PRESSURE/GREM, David Stelter, dstelter@bu.edu, 22 Nov 16 dihedral_style cosine/shift/exp, Carsten Svaneborg, science at zqex.dk, 8 Aug 11 @@ -42,6 +45,7 @@ dihedral_style table/cut, Mike Salerno, ksalerno@pha.jhu.edu, 11 May 18 fix addtorque, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11 fix ave/correlate/long, Jorge Ramirez (UPM Madrid), jorge.ramirez at upm.es, 21 Oct 2015 fix bond/react, Jacob Gissinger (CU Boulder), info at disarmmd.org, 24 Feb 2018 +fix ffl, David Wilkins (EPFL Lausanne), david.wilkins @ epfl.ch, 28 Sep 2018 fix filter/corotate, Lukas Fath (KIT), lukas.fath at kit.edu, 15 Mar 2017 fix flow/gauss, Joel Eaves (CU Boulder), Joel.Eaves@Colorado.edu, 23 Aug 2016 fix gle, Michele Ceriotti (EPFL Lausanne), michele.ceriotti at gmail.com, 24 Nov 2014 diff --git a/src/USER-MISC/angle_dipole.cpp b/src/USER-MISC/angle_dipole.cpp index bcb631c61f065353cbb60761a4e693c28800693a..c4186da472b58d51c2a1ae5ec94518ae40065c5a 100644 --- a/src/USER-MISC/angle_dipole.cpp +++ b/src/USER-MISC/angle_dipole.cpp @@ -229,7 +229,7 @@ void AngleDipole::write_data(FILE *fp) used by ComputeAngleLocal ------------------------------------------------------------------------- */ -double AngleDipole::single(int type, int iRef, int iDip, int iDummy) +double AngleDipole::single(int type, int iRef, int iDip, int /*iDummy*/) { double **x = atom->x; // position vector double **mu = atom->mu; // point-dipole components and moment magnitude diff --git a/src/USER-MISC/bond_harmonic_shift.cpp b/src/USER-MISC/bond_harmonic_shift.cpp index 7148c5438d1d4ff200915edbb5c1fda345bd3d01..b34f71e8885ffce2e25154a7e2985eb739a1dfd3 100644 --- a/src/USER-MISC/bond_harmonic_shift.cpp +++ b/src/USER-MISC/bond_harmonic_shift.cpp @@ -203,7 +203,7 @@ void BondHarmonicShift::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -double BondHarmonicShift::single(int type, double rsq, int i, int j, +double BondHarmonicShift::single(int type, double rsq, int /*i*/, int /*j*/, double &fforce) { double r = sqrt(rsq); diff --git a/src/USER-MISC/bond_harmonic_shift_cut.cpp b/src/USER-MISC/bond_harmonic_shift_cut.cpp index 20c8a1a30019fb5cb3bdb99b597e91c6fd116778..a58df7087818de4a2c48f4624c3915d3b0988311 100644 --- a/src/USER-MISC/bond_harmonic_shift_cut.cpp +++ b/src/USER-MISC/bond_harmonic_shift_cut.cpp @@ -205,7 +205,7 @@ void BondHarmonicShiftCut::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -double BondHarmonicShiftCut::single(int type, double rsq, int i, int j, +double BondHarmonicShiftCut::single(int type, double rsq, int /*i*/, int /*j*/, double &fforce) { fforce = 0.0; diff --git a/src/USER-MISC/compute_ackland_atom.cpp b/src/USER-MISC/compute_ackland_atom.cpp index a17aefe71b46b0dd435473c9d917eb6a74561365..bcf41591ebb1b29fb2ed173fde0fa8c1cc9b5259 100644 --- a/src/USER-MISC/compute_ackland_atom.cpp +++ b/src/USER-MISC/compute_ackland_atom.cpp @@ -105,7 +105,7 @@ void ComputeAcklandAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeAcklandAtom::init_list(int id, NeighList *ptr) +void ComputeAcklandAtom::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/USER-MISC/compute_basal_atom.cpp b/src/USER-MISC/compute_basal_atom.cpp index 4d8627a11fb66534b0e982413790156d4efaf524..3b9b38343d2aabe3ea67ffa737973d74cda24f71 100644 --- a/src/USER-MISC/compute_basal_atom.cpp +++ b/src/USER-MISC/compute_basal_atom.cpp @@ -85,7 +85,7 @@ void ComputeBasalAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeBasalAtom::init_list(int id, NeighList *ptr) +void ComputeBasalAtom::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/USER-MISC/compute_cnp_atom.cpp b/src/USER-MISC/compute_cnp_atom.cpp index 51cf3ab07a43628ba454f708400d386bdffdb54f..6fa16f1a9ac5b6f82a35eac3a9d792c9dedabe30 100644 --- a/src/USER-MISC/compute_cnp_atom.cpp +++ b/src/USER-MISC/compute_cnp_atom.cpp @@ -121,7 +121,7 @@ void ComputeCNPAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeCNPAtom::init_list(int id, NeighList *ptr) +void ComputeCNPAtom::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/USER-MISC/compute_entropy_atom.cpp b/src/USER-MISC/compute_entropy_atom.cpp index 922f2aaf5ee9d53b50bbadb3485142ab1bc88961..4946bc437e7960bba7e9f054d298d191c69f2711 100644 --- a/src/USER-MISC/compute_entropy_atom.cpp +++ b/src/USER-MISC/compute_entropy_atom.cpp @@ -151,7 +151,7 @@ void ComputeEntropyAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeEntropyAtom::init_list(int id, NeighList *ptr) +void ComputeEntropyAtom::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/USER-MISC/compute_pressure_cylinder.cpp b/src/USER-MISC/compute_pressure_cylinder.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6fcd343e38d643163a2cb7b4182eddf44f73f169 --- /dev/null +++ b/src/USER-MISC/compute_pressure_cylinder.cpp @@ -0,0 +1,484 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include "compute_pressure_cylinder.h" +#include "atom.h" +#include "update.h" +#include "force.h" +#include "pair.h" +#include "neighbor.h" +#include "neigh_request.h" +#include "neigh_list.h" +#include "group.h" +#include "memory.h" +#include "error.h" +#include "citeme.h" +#include "domain.h" +#include "math_const.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +static const char cite_compute_pressure_cylinder[] = + "compute pressure/cylinder:\n\n" + "@Article{Addington,\n" + " author = {C. K. Addington, Y. Long, K. E. Gubbins},\n" + " title = {The pressure in interfaces having cylindrical geometry},\n" + " journal = {J.~Chem.~Phys.},\n" + " year = 2018,\n" + " volume = 149,\n" + " pages = {084109}\n" + "}\n\n"; + +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Calculate the configurational components of the pressure tensor in + cylindrical geometry, according to the formulation of Addington et al. (2018) + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ + +ComputePressureCyl::ComputePressureCyl(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg), + Pr_temp(NULL), Pr_all(NULL), Pz_temp(NULL), Pz_all(NULL), Pphi_temp(NULL), + Pphi_all(NULL), R(NULL), Rinv(NULL), R2(NULL), PrAinv(NULL), PzAinv(NULL), + R2kin(NULL), density_temp(NULL), invVbin(NULL), density_all(NULL), + tangent(NULL), ephi_x(NULL), ephi_y(NULL), binz(NULL) +{ + if (lmp->citeme) lmp->citeme->add(cite_compute_pressure_cylinder); + if (narg != 7) error->all(FLERR,"Illegal compute pressure/cylinder command"); + + zlo=force->numeric(FLERR,arg[3]); + zhi=force->numeric(FLERR,arg[4]); + Rmax=force->numeric(FLERR,arg[5]); + bin_width=force->numeric(FLERR,arg[6]); + + if ((bin_width <= 0.0) || (bin_width < Rmax)) + error->all(FLERR,"Illegal compute pressure/cylinder command"); + if ((zhi < zlo) || ((zhi-zlo) < bin_width)) + error->all(FLERR,"Illegal compute pressure/cylinder command"); + if ((zhi > domain->boxhi[2]) || (zlo < domain->boxlo[2])) + error->all(FLERR,"Illegal compute pressure/cylinder command"); + + nbins=(int)(Rmax/bin_width); + nzbins=(int)((zhi-zlo)/bin_width); + + // NOTE: at 2^22 = 4.2M bins, we will be close to exhausting allocatable + // memory on a 32-bit environment. so we use this as an upper limit. + + if ((nbins < 1) || (nzbins < 1) || (nbins > 2>>22) || (nbins > 2>>22)) + error->all(FLERR,"Illegal compute pressure/cylinder command"); + + array_flag=1; + vector_flag=0; + extarray=0; + size_array_cols = 5; // r, number density, Pr, Pphi, Pz + size_array_rows = nbins; + + Pr_temp = new double[nbins]; + Pr_all = new double[nbins]; + Pz_temp = new double[nbins]; + Pz_all = new double[nbins]; + Pphi_temp = new double[nbins]; + Pphi_all = new double[nbins]; + R = new double[nbins]; + R2 = new double[nbins]; + PrAinv = new double[nbins]; + PzAinv = new double[nbins]; + Rinv = new double[nbins]; + binz = new double[nzbins]; + + R2kin = new double[nbins]; + density_temp = new double[nbins]; + invVbin = new double[nbins]; + density_all = new double[nbins]; + + memory->create(array,nbins,5,"PN:array"); + + nphi=360; + tangent = new double[nphi]; + ephi_x = new double[nphi]; + ephi_y = new double[nphi]; + + nktv2p = force->nktv2p; + +} + +/* ---------------------------------------------------------------------- */ + +ComputePressureCyl::~ComputePressureCyl() +{ + // count all of these for memory usage + memory->destroy(array); + delete [] R; + delete [] Rinv; + delete [] R2; + delete [] R2kin; + delete [] invVbin; + delete [] density_temp; + delete [] density_all; + delete [] tangent; + delete [] ephi_x; + delete [] ephi_y; + delete [] Pr_temp; + delete [] Pr_all; + delete [] Pz_temp; + delete [] Pz_all; + delete [] Pphi_temp; + delete [] Pphi_all; + delete [] PrAinv; + delete [] PzAinv; + delete [] binz; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePressureCyl::init() +{ + if (force->pair == NULL) + error->all(FLERR,"No pair style is defined for compute pressure/cylinder"); + if (force->pair->single_enable == 0) + error->all(FLERR,"Pair style does not support compute pressure/cylinder"); + + double phi; + + for (int iphi = 0; iphi < nphi; iphi++) { + phi=((double)iphi)*MY_PI/180.0; + tangent[iphi]=tan(phi); + ephi_x[iphi]=-sin(phi); + ephi_y[iphi]=cos(phi); + } + + for (int iq = 0; iq < nbins; iq++) { + R[iq]=((double)iq+0.5)*bin_width; + Rinv[iq]=1.0/R[iq]; + R2[iq]=R[iq]*R[iq]; + R2kin[iq]=(((double)iq)+1.0)*bin_width; + R2kin[iq]*=R2kin[iq]; + PrAinv[iq]=1.0/(2.0*MY_PI*(zhi-zlo)*R[iq]); + } + PphiAinv=1.0/((zhi-zlo)*bin_width*2.0*(double)nphi); + + invVbin[0]=1.0/((zhi-zlo)*MY_PI*R2kin[0]); + PzAinv[0]=1.0/(MY_PI*R2kin[0]*((double)nzbins)); + + for (int jq = 1; jq < nbins; jq++) { + invVbin[jq]=1.0/((zhi-zlo)*MY_PI*(R2kin[jq]-R2kin[jq-1])); + PzAinv[jq]=1.0/(MY_PI*(R2kin[jq]-R2kin[jq-1])*((double)nzbins)); + } + + // need an occasional half neighbor list + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->pair = 0; + neighbor->requests[irequest]->compute = 1; + neighbor->requests[irequest]->occasional = 1; + + for (int zzz = 0; zzz < nzbins; zzz++) binz[zzz]=(((double)zzz)+0.5)*bin_width+zlo; + +} + +/* ---------------------------------------------------------------------- */ + +void ComputePressureCyl::init_list(int /* id */, NeighList *ptr) +{ + list = ptr; +} + +/* ---------------------------------------------------------------------- */ + + +/* ---------------------------------------------------------------------- + count pairs and compute pair info on this proc + only count pair once if newton_pair is off + both atom I,J must be in group + if flag is set, compute requested info about pair +------------------------------------------------------------------------- */ + +void ComputePressureCyl::compute_array() +{ + invoked_array = update->ntimestep; + + int ibin; + + // clear pressures + for (ibin = 0; ibin < nbins; ibin++) { + density_temp[ibin]=0.0; + density_all[ibin]=0.0; + Pr_temp[ibin]=0.0; + Pr_all[ibin]=0.0; + Pphi_temp[ibin]=0.0; + Pphi_all[ibin]=0.0; + Pz_temp[ibin]=0.0; + Pz_all[ibin]=0.0; + } + + // what processor am I? + int me; + MPI_Comm_rank(world,&me); + + int i,j,ii,jj,inum,jnum,itype,jtype; + tagint itag,jtag; + double xtmp,ytmp,ztmp,delx,dely,delz; + double rsq,fpair,factor_coul,factor_lj; + int *ilist,*jlist,*numneigh,**firstneigh; + + double **x = atom->x; + tagint *tag = atom->tag; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + + // invoke half neighbor list (will copy or build if necessary) + neighbor->build_one(list); + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // calculate number density (by radius) + double temp_R2; + for (i = 0; i < nlocal; i++) if ((x[i][2] < zhi) && (x[i][2] > zlo)) { + temp_R2=x[i][0]*x[i][0]+x[i][1]*x[i][1]; + if (temp_R2 > R2kin[nbins-1]) continue; // outside of Rmax + + for (j = 0; j < nbins; j++) if (temp_R2 < R2kin[j]) break; + + density_temp[j]+=invVbin[j]; + } + MPI_Allreduce(density_temp,density_all,nbins,MPI_DOUBLE,MPI_SUM,world); + for (i = 0; i < nbins; i++) array[i][1]=density_all[i]; // NEW + + // loop over neighbors of my atoms + // skip if I or J are not in group + // for newton = 0 and J = ghost atom, + // need to insure I,J pair is only output by one proc + // use same itag,jtag logic as in Neighbor::neigh_half_nsq() + // for flag = 0, just count pair interactions within force cutoff + // for flag = 1, calculate requested output fields + + Pair *pair = force->pair; + double **cutsq = force->pair->cutsq; + + double r1=0.0; + double r2=0.0; + double risq,rjsq; + double A,B,C,D; + double alpha1,alpha2; + double xi,yi,zi,dx,dy,dz; + double xR,yR,zR,fn; + double alpha,xL,yL,zL,L2,ftphi,ftz; + double sqrtD; + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + if (!(mask[i] & groupbit)) continue; + + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itag = tag[i]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + r1=x[i][0]*x[i][0]+x[i][1]*x[i][1]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + if (!(mask[j] & groupbit)) continue; + + // itag = jtag is possible for long cutoffs that include images of self + // do calculation only on appropriate processor + if (newton_pair == 0 && j >= nlocal) { + jtag = tag[j]; + if (itag > jtag) { + if ((itag+jtag) % 2 == 0) continue; + } else if (itag < jtag) { + if ((itag+jtag) % 2 == 1) continue; + } else { + if (x[j][2] < ztmp) continue; + if (x[j][2] == ztmp) { + if (x[j][1] < ytmp) continue; + if (x[j][1] == ytmp && x[j][0] < xtmp) continue; + } + } + } + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + + r2=x[j][0]*x[j][0]+x[j][1]*x[j][1]; + + // ri is smaller of r1 and r2 + if (r2 < r1) { + risq=r2; + rjsq=r1; + xi=x[j][0]; + yi=x[j][1]; + zi=x[j][2]; + dx=x[i][0]-x[j][0]; + dy=x[i][1]-x[j][1]; + dz=x[i][2]-x[j][2]; + } else { + risq=r1; + rjsq=r2; + xi=x[i][0]; + yi=x[i][1]; + zi=x[i][2]; + dx=x[j][0]-x[i][0]; + dy=x[j][1]-x[i][1]; + dz=x[j][2]-x[i][2]; + } + + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + if (rsq >= cutsq[itype][jtype]) continue; + + pair->single(i,j,itype,jtype,rsq,factor_coul,factor_lj,fpair); + + A=dx*dx+dy*dy; + B=2.0*(xi*dx+yi*dy); + + // normal pressure contribution P_rhorho + for (ibin = 0; ibin < nbins; ibin++) { + // completely inside of R + if (rjsq < R2[ibin]) continue; + + C=risq-R2[ibin]; + D=B*B-4.0*A*C; + + // completely outside of R + if (D < 0.0) continue; + + sqrtD=sqrt(D); + alpha1=0.5*(-B+sqrtD)/A; + alpha2=0.5*(-B-sqrtD)/A; + + if ((alpha1 > 0.0) && (alpha1 < 1.0)) { + zR=zi+alpha1*dz; + if ((zR < zhi) && (zR > zlo)) + { + xR=xi+alpha1*dx; + yR=yi+alpha1*dy; + fn=fpair*fabs(xR*dx+yR*dy); + + Pr_temp[ibin]+=fn; + } + } + if ((alpha2 > 0.0) && (alpha2 < 1.0)) { + zR=zi+alpha2*dz; + if ((zR < zhi) && (zR > zlo)) { + xR=xi+alpha2*dx; + yR=yi+alpha2*dy; + fn=fpair*fabs(xR*dx+yR*dy); + + Pr_temp[ibin]+=fn; + } + } + } + + // azimuthal pressure contribution (P_phiphi) + for (int iphi = 0; iphi < nphi; iphi++) { + alpha=(yi-xi*tangent[iphi])/(dx*tangent[iphi]-dy); + + // no intersection with phi surface + if ((alpha >= 1.0) || (alpha <= 0.0)) continue; + + // no contribution (outside of averaging region) + zL=zi+alpha*dz; + if ((zL > zhi) || (zL < zlo)) continue; + + xL=xi+alpha*dx; + yL=yi+alpha*dy; + + L2=xL*xL+yL*yL; + + // no intersection (outside of Rmax) + if (L2 > R2kin[nbins-1]) continue; + + ftphi=fabs(dx*ephi_x[iphi]+dy*ephi_y[iphi])*fpair; + + // add to appropriate bin + for (ibin = 0; ibin < nbins; ibin++) if (L2 < R2kin[ibin]) { + Pphi_temp[ibin]+=ftphi; + break; + } + } + + // z pressure contribution (P_zz) + for (int zbin = 0; zbin < nzbins; zbin++) { + // check if interaction contributes + if ((x[i][2] > binz[zbin]) && (x[j][2] > binz[zbin])) continue; + if ((x[i][2] < binz[zbin]) && (x[j][2] < binz[zbin])) continue; + + alpha=(binz[zbin]-zi)/dz; + + xL=xi+alpha*dx; + yL=yi+alpha*dy; + + L2=xL*xL+yL*yL; + + if (L2 > R2kin[nbins-1]) continue; + + ftz=fabs(dz)*fpair; + + // add to appropriate bin + for (ibin = 0; ibin < nbins; ibin++) if (L2 < R2kin[ibin]) { + Pz_temp[ibin]+=ftz; + break; + } + } + } + } + + // calculate pressure (force over area) + for (ibin = 0; ibin < nbins; ibin++) { + Pr_temp[ibin]*=PrAinv[ibin]*Rinv[ibin]; + Pphi_temp[ibin]*=PphiAinv; + Pz_temp[ibin]*=PzAinv[ibin]; + } + + // communicate these values across processors + MPI_Allreduce(Pr_temp,Pr_all,nbins,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(Pphi_temp,Pphi_all,nbins,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(Pz_temp,Pz_all,nbins,MPI_DOUBLE,MPI_SUM,world); + + // populate array + for (ibin = 0; ibin < nbins; ibin++) { + array[ibin][0]=R[ibin]; + array[ibin][2]=Pr_all[ibin]*nktv2p; + array[ibin][3]=Pphi_all[ibin]*nktv2p; + array[ibin][4]=Pz_all[ibin]*nktv2p; + } + +} + +/* ---------------------------------------------------------------------- +memory usage of data +------------------------------------------------------------------------- */ + +double ComputePressureCyl::memory_usage() +{ + double bytes = + (3.0*(double)nphi + 16.0*(double)nbins+5.0*(double)nbins) * sizeof(double); + return bytes; +} diff --git a/src/USER-MISC/compute_pressure_cylinder.h b/src/USER-MISC/compute_pressure_cylinder.h new file mode 100644 index 0000000000000000000000000000000000000000..7151cca6cedab19f2439a139eb895b948f0aba86 --- /dev/null +++ b/src/USER-MISC/compute_pressure_cylinder.h @@ -0,0 +1,74 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef COMPUTE_CLASS + +ComputeStyle(pressure/cylinder,ComputePressureCyl) + +#else + +#ifndef LMP_COMPUTE_PRESSURE_CYLINDER +#define LMP_COMPUTE_PRESSURE_CYLINDER + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputePressureCyl : public Compute { + public: + ComputePressureCyl(class LAMMPS *, int, char **); + ~ComputePressureCyl(); + void init(); + void init_list(int, class NeighList *); + void compute_array(); + double memory_usage(); + + private: + int nbins,nphi,nzbins; + double *Pr_temp,*Pr_all,*Pz_temp,*Pz_all,*Pphi_temp,*Pphi_all; + double *R,*Rinv,*R2,*PrAinv,*PzAinv,PphiAinv; + double Rmax,bin_width,nktv2p; + double *R2kin,*density_temp,*invVbin,*density_all; + double *tangent,*ephi_x,*ephi_y; + double *binz; + + double zlo,zhi; + + class NeighList *list; + +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: No pair style is defined for compute pressure/cylinder + +Self-explanatory. + +E: Pair style does not support compute pressure/cylinder + +The pair style does not have a single() function, so it can +not be invoked by compute pressure/cylinder. + +*/ + diff --git a/src/USER-MISC/compute_stress_mop.cpp b/src/USER-MISC/compute_stress_mop.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f764e0ee7e9ca85410db98cb613e0fea98d130f0 --- /dev/null +++ b/src/USER-MISC/compute_stress_mop.cpp @@ -0,0 +1,424 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. + ------------------------------------------------------------------------- */ + +/*------------------------------------------------------------------------ + Contributing Authors : Romain Vermorel (LFCR), Laurent Joly (ULyon) + --------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include "compute_stress_mop.h" +#include "atom.h" +#include "update.h" +#include "domain.h" +#include "group.h" +#include "modify.h" +#include "fix.h" +#include "neighbor.h" +#include "force.h" +#include "pair.h" +#include "neigh_request.h" +#include "neigh_list.h" +#include "error.h" +#include "memory.h" + +using namespace LAMMPS_NS; + +enum{X,Y,Z}; +enum{TOTAL,CONF,KIN}; + +#define BIG 1000000000 + +/* ---------------------------------------------------------------------- */ + +ComputeStressMop::ComputeStressMop(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg < 6) error->all(FLERR,"Illegal compute stress/mop command"); + + MPI_Comm_rank(world,&me); + + // set compute mode and direction of plane(s) for pressure calculation + + if (strcmp(arg[3],"x")==0) { + dir = X; + } else if (strcmp(arg[3],"y")==0) { + dir = Y; + } else if (strcmp(arg[3],"z")==0) { + dir = Z; + } else error->all(FLERR,"Illegal compute stress/mop command"); + + // Position of the plane + + if (strcmp(arg[4],"lower")==0) { + pos = domain->boxlo[dir]; + } else if (strcmp(arg[4],"upper")==0) { + pos = domain->boxhi[dir]; + } else if (strcmp(arg[4],"center")==0) { + pos = 0.5*(domain->boxlo[dir]+domain->boxhi[dir]); + } else pos = force->numeric(FLERR,arg[4]); + + if ( pos < (domain->boxlo[dir]+domain->prd_half[dir]) ) { + pos1 = pos + domain->prd[dir]; + } else { + pos1 = pos - domain->prd[dir]; + } + + // parse values until one isn't recognized + + which = new int[3*(narg-5)]; + nvalues = 0; + int i; + + int iarg=5; + while (iarg < narg) { + if (strcmp(arg[iarg],"conf") == 0) { + for (i=0; i<3; i++) { + which[nvalues] = CONF; + nvalues++; + } + } else if (strcmp(arg[iarg],"kin") == 0) { + for (i=0; i<3; i++) { + which[nvalues] = KIN; + nvalues++; + } + } else if (strcmp(arg[iarg],"total") == 0) { + for (i=0; i<3; i++) { + which[nvalues] = TOTAL; + nvalues++; + } + } else error->all(FLERR, "Illegal compute stress/mop command"); //break; + + iarg++; + } + + // Error check + // 3D only + + if (domain->dimension < 3) + error->all(FLERR, "Compute stress/mop incompatible with simulation dimension"); + + // orthogonal simulation box + if (domain->triclinic != 0) + error->all(FLERR, "Compute stress/mop incompatible with triclinic simulation box"); + // plane inside the box + if (pos >domain->boxhi[dir] || pos boxlo[dir]) + error->all(FLERR, "Plane for compute stress/mop is out of bounds"); + + + // Initialize some variables + + values_local = values_global = vector = NULL; + + // this fix produces a global vector + + memory->create(vector,nvalues,"stress/mop:vector"); + memory->create(values_local,nvalues,"stress/mop/spatial:values_local"); + memory->create(values_global,nvalues,"stress/mop/spatial:values_global"); + size_vector = nvalues; + + vector_flag = 1; + extvector = 0; + +} + +/* ---------------------------------------------------------------------- */ + +ComputeStressMop::~ComputeStressMop() +{ + + delete [] which; + + memory->destroy(values_local); + memory->destroy(values_global); + memory->destroy(vector); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeStressMop::init() +{ + + // Conversion constants + + nktv2p = force->nktv2p; + ftm2v = force->ftm2v; + + // Plane area + + area = 1; + int i; + for (i=0; i<3; i++){ + if (i!=dir) area = area*domain->prd[i]; + } + + // Timestep Value + + dt = update->dt; + + // Error check + + // Compute stress/mop requires fixed simulation box + if (domain->box_change_size || domain->box_change_shape || domain->deform_flag) + error->all(FLERR, "Compute stress/mop requires a fixed simulation box"); + + // This compute requires a pair style with pair_single method implemented + + if (force->pair == NULL) + error->all(FLERR,"No pair style is defined for compute stress/mop"); + if (force->pair->single_enable == 0) + error->all(FLERR,"Pair style does not support compute stress/mop"); + + // Warnings + + if (me==0){ + + //Compute stress/mop only accounts for pair interactions. + // issue a warning if any intramolecular potential or Kspace is defined. + + if (force->bond!=NULL) + error->warning(FLERR,"compute stress/mop does not account for bond potentials"); + if (force->angle!=NULL) + error->warning(FLERR,"compute stress/mop does not account for angle potentials"); + if (force->dihedral!=NULL) + error->warning(FLERR,"compute stress/mop does not account for dihedral potentials"); + if (force->improper!=NULL) + error->warning(FLERR,"compute stress/mop does not account for improper potentials"); + if (force->kspace!=NULL) + error->warning(FLERR,"compute stress/mop does not account for kspace contributions"); + } + + // need an occasional half neighbor list + int irequest = neighbor->request((void *) this); + neighbor->requests[irequest]->pair = 0; + neighbor->requests[irequest]->compute = 1; + neighbor->requests[irequest]->occasional = 1; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeStressMop::init_list(int id, NeighList *ptr) +{ + list = ptr; +} + + +/* ---------------------------------------------------------------------- + compute output vector + ------------------------------------------------------------------------- */ + +void ComputeStressMop::compute_vector() +{ + invoked_array = update->ntimestep; + + //Compute pressures on separate procs + compute_pairs(); + + // sum pressure contributions over all procs + MPI_Allreduce(values_local,values_global,nvalues, + MPI_DOUBLE,MPI_SUM,world); + + int m; + for (m=0; mmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + + + // zero out arrays for one sample + + for (i = 0; i < nvalues; i++) values_local[i] = 0.0; + + // invoke half neighbor list (will copy or build if necessary) + + neighbor->build_one(list); + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + Pair *pair = force->pair; + double **cutsq = force->pair->cutsq; + + // Parse values + + double xi[3]; + double vi[3]; + double fi[3]; + double xj[3]; + + m = 0; + while (mx[i][0]; + xi[1] = atom->x[i][1]; + xi[2] = atom->x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + // skip if neither I nor J are in group + if (!(mask[i] & groupbit || mask[j] & groupbit)) continue; + + xj[0] = atom->x[j][0]; + xj[1] = atom->x[j][1]; + xj[2] = atom->x[j][2]; + delx = xi[0] - xj[0]; + dely = xi[1] - xj[1]; + delz = xi[2] - xj[2]; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + if (rsq >= cutsq[itype][jtype]) continue; + + if (newton_pair || j < nlocal) { + + //check if ij pair is accross plane, add contribution to pressure + if ( ((xi[dir]>pos) && (xj[dir]pos1) && (xj[dir]single(i,j,itype,jtype,rsq,factor_coul,factor_lj,fpair); + + values_local[m] += fpair*(xi[0]-xj[0])/area*nktv2p; + values_local[m+1] += fpair*(xi[1]-xj[1])/area*nktv2p; + values_local[m+2] += fpair*(xi[2]-xj[2])/area*nktv2p; + } + else if ( ((xi[dir]pos)) || ((xi[dir]pos1)) ){ + + pair->single(i,j,itype,jtype,rsq,factor_coul,factor_lj,fpair); + + values_local[m] -= fpair*(xi[0]-xj[0])/area*nktv2p; + values_local[m+1] -= fpair*(xi[1]-xj[1])/area*nktv2p; + values_local[m+2] -= fpair*(xi[2]-xj[2])/area*nktv2p; + } + + } else { + + if ( ((xi[dir]>pos) && (xj[dir]pos1) && (xj[dir]single(i,j,itype,jtype,rsq,factor_coul,factor_lj,fpair); + + values_local[m] += fpair*(xi[0]-xj[0])/area*nktv2p; + values_local[m+1] += fpair*(xi[1]-xj[1])/area*nktv2p; + values_local[m+2] += fpair*(xi[2]-xj[2])/area*nktv2p; + } + + } + + } + + } + + } + + + // Compute kinetic contribution to pressure + // counts local particles transfers across the plane + + if (which[m] == KIN || which[m] == TOTAL){ + double vcm[3]; + double masstotal,sgn; + + for (int i = 0; i < nlocal; i++){ + + // skip if I is not in group + if (mask[i] & groupbit){ + + itype = type[i]; + + //coordinates at t + xi[0] = atom->x[i][0]; + xi[1] = atom->x[i][1]; + xi[2] = atom->x[i][2]; + + //velocities at t + vi[0] = atom->v[i][0]; + vi[1] = atom->v[i][1]; + vi[2] = atom->v[i][2]; + + //forces at t + fi[0] = atom->f[i][0]; + fi[1] = atom->f[i][1]; + fi[2] = atom->f[i][2]; + + //coordinates at t-dt (based on Velocity-Verlet alg.) + xj[0] = xi[0]-vi[0]*dt+fi[0]/2/mass[itype]*dt*dt*ftm2v; + xj[1] = xi[1]-vi[1]*dt+fi[1]/2/mass[itype]*dt*dt*ftm2v; + xj[2] = xi[2]-vi[2]*dt+fi[2]/2/mass[itype]*dt*dt*ftm2v; + + // because LAMMPS does not put atoms back in the box + // at each timestep, must check atoms going through the + // image of the plane that is closest to the box + + double pos_temp = pos+copysign(1,domain->prd_half[dir]-pos)*domain->prd[dir]; + if (fabs(xi[dir]-pos) +#include +#include +#include + +#include "compute_stress_mop_profile.h" +#include "atom.h" +#include "update.h" +#include "domain.h" +#include "group.h" +#include "modify.h" +#include "fix.h" +#include "neighbor.h" +#include "force.h" +#include "pair.h" +#include "neigh_request.h" +#include "neigh_list.h" +#include "error.h" +#include "memory.h" + +using namespace LAMMPS_NS; + +enum{X,Y,Z}; +enum{LOWER,CENTER,UPPER,COORD}; +enum{TOTAL,CONF,KIN}; + +#define BIG 1000000000 + +/* ---------------------------------------------------------------------- */ + +ComputeStressMopProfile::ComputeStressMopProfile(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg) +{ + if (narg < 7) error->all(FLERR,"Illegal compute stress/mop/profile command"); + + MPI_Comm_rank(world,&me); + + // set compute mode and direction of plane(s) for pressure calculation + + if (strcmp(arg[3],"x")==0) { + dir = X; + } else if (strcmp(arg[3],"y")==0) { + dir = Y; + } else if (strcmp(arg[3],"z")==0) { + dir = Z; + } else error->all(FLERR,"Illegal compute stress/mop/profile command"); + + // bin parameters + + if (strcmp(arg[4],"lower") == 0) originflag = LOWER; + else if (strcmp(arg[4],"center") == 0) originflag = CENTER; + else if (strcmp(arg[4],"upper") == 0) originflag = UPPER; + else originflag = COORD; + if (originflag == COORD) + origin = force->numeric(FLERR,arg[4]); + delta = force->numeric(FLERR,arg[5]); + invdelta = 1.0/delta; + + // parse values until one isn't recognized + + which = new int[3*(narg-6)]; + nvalues = 0; + int i; + + int iarg=6; + while (iarg < narg) { + if (strcmp(arg[iarg],"conf") == 0) { + for (i=0; i<3; i++) { + which[nvalues] = CONF; + nvalues++; + } + } else if (strcmp(arg[iarg],"kin") == 0) { + for (i=0; i<3; i++) { + which[nvalues] = KIN; + nvalues++; + } + } else if (strcmp(arg[iarg],"total") == 0) { + for (i=0; i<3; i++) { + which[nvalues] = TOTAL; + nvalues++; + } + } else error->all(FLERR, "Illegal compute stress/mop/profile command"); //break; + + iarg++; + } + + // check domain related errors + + // 3D only + + if (domain->dimension < 3) + error->all(FLERR, "Compute stress/mop/profile incompatible with simulation dimension"); + + // orthogonal simulation box + + if (domain->triclinic != 0) + error->all(FLERR, "Compute stress/mop/profile incompatible with triclinic simulation box"); + + // initialize some variables + + nbins = 0; + coord = coordp = NULL; + values_local = values_global = array = NULL; + + // bin setup + + setup_bins(); + + // this fix produces a global array + + memory->create(array,nbins,1+nvalues,"stress/mop/profile:array"); + size_array_rows = nbins; + size_array_cols = 1 + nvalues; + + array_flag = 1; + extarray = 0; +} + +/* ---------------------------------------------------------------------- */ + +ComputeStressMopProfile::~ComputeStressMopProfile() +{ + + delete [] which; + + memory->destroy(coord); + memory->destroy(coordp); + memory->destroy(values_local); + memory->destroy(values_global); + memory->destroy(array); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeStressMopProfile::init() +{ + + // conversion constants + + nktv2p = force->nktv2p; + ftm2v = force->ftm2v; + + // plane area + + area = 1; + int i; + for (i=0; i<3; i++) { + if (i!=dir) area = area*domain->prd[i]; + } + + // timestep Value + + dt = update->dt; + + // Error check + // Compute stress/mop/profile requires fixed simulation box + + if (domain->box_change_size || domain->box_change_shape || domain->deform_flag) + error->all(FLERR, "Compute stress/mop/profile requires a fixed simulation box"); + + //This compute requires a pair style with pair_single method implemented + + if (force->pair == NULL) + error->all(FLERR,"No pair style is defined for compute stress/mop/profile"); + if (force->pair->single_enable == 0) + error->all(FLERR,"Pair style does not support compute stress/mop/profile"); + + // Warnings + + if (me==0){ + + //Compute stress/mop/profile only accounts for pair interactions. + // issue a warning if any intramolecular potential or Kspace is defined. + + if (force->bond!=NULL) + error->warning(FLERR,"compute stress/mop/profile does not account for bond potentials"); + if (force->angle!=NULL) + error->warning(FLERR,"compute stress/mop/profile does not account for angle potentials"); + if (force->dihedral!=NULL) + error->warning(FLERR,"compute stress/mop/profile does not account for dihedral potentials"); + if (force->improper!=NULL) + error->warning(FLERR,"compute stress/mop/profile does not account for improper potentials"); + if (force->kspace!=NULL) + error->warning(FLERR,"compute stress/mop/profile does not account for kspace contributions"); + } + + // need an occasional half neighbor list + + int irequest = neighbor->request((void *) this); + neighbor->requests[irequest]->pair = 0; + neighbor->requests[irequest]->compute = 1; + neighbor->requests[irequest]->occasional = 1; +} + +/* ---------------------------------------------------------------------- */ + +void ComputeStressMopProfile::init_list(int id, NeighList *ptr) +{ + list = ptr; +} + + +/* ---------------------------------------------------------------------- + compute output array + ------------------------------------------------------------------------- */ + +void ComputeStressMopProfile::compute_array() +{ + invoked_array = update->ntimestep; + + //Compute pressures on separate procs + compute_pairs(); + + // sum pressure contributions over all procs + MPI_Allreduce(&values_local[0][0],&values_global[0][0],nbins*nvalues, + MPI_DOUBLE,MPI_SUM,world); + + int ibin,m,mo; + for (ibin=0; ibinmass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + double *special_coul = force->special_coul; + double *special_lj = force->special_lj; + int newton_pair = force->newton_pair; + + + // zero out arrays for one sample + for (m = 0; m < nbins; m++) { + for (i = 0; i < nvalues; i++) values_local[m][i] = 0.0; + } + + // invoke half neighbor list (will copy or build if necessary) + + neighbor->build_one(list); + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + Pair *pair = force->pair; + double **cutsq = force->pair->cutsq; + + // parse values + + double xi[3]; + double vi[3]; + double fi[3]; + double xj[3]; + + m = 0; + while (mx[i][0]; + xi[1] = atom->x[i][1]; + xi[2] = atom->x[i][2]; + itype = type[i]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + factor_lj = special_lj[sbmask(j)]; + factor_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + // skip if neither I nor J are in group + + if (!(mask[i] & groupbit || mask[j] & groupbit)) continue; + + xj[0] = atom->x[j][0]; + xj[1] = atom->x[j][1]; + xj[2] = atom->x[j][2]; + delx = xi[0] - xj[0]; + dely = xi[1] - xj[1]; + delz = xi[2] - xj[2]; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + if (rsq >= cutsq[itype][jtype]) continue; + + if (newton_pair || j < nlocal) { + + for (ibin=0;ibinpos) && (xj[dir]pos1) && (xj[dir]single(i,j,itype,jtype,rsq,factor_coul,factor_lj,fpair); + + values_local[ibin][m] += fpair*(xi[0]-xj[0])/area*nktv2p; + values_local[ibin][m+1] += fpair*(xi[1]-xj[1])/area*nktv2p; + values_local[ibin][m+2] += fpair*(xi[2]-xj[2])/area*nktv2p; + + } else if ( ((xi[dir]pos)) + || ((xi[dir]pos1)) ) { + + pair->single(i,j,itype,jtype,rsq,factor_coul,factor_lj,fpair); + + values_local[ibin][m] -= fpair*(xi[0]-xj[0])/area*nktv2p; + values_local[ibin][m+1] -= fpair*(xi[1]-xj[1])/area*nktv2p; + values_local[ibin][m+2] -= fpair*(xi[2]-xj[2])/area*nktv2p; + } + } + } else { + + for (ibin=0;ibinpos) && (xj[dir]pos1) && (xj[dir]single(i,j,itype,jtype,rsq,factor_coul,factor_lj,fpair); + + values_local[ibin][m] += fpair*(xi[0]-xj[0])/area*nktv2p; + values_local[ibin][m+1] += fpair*(xi[1]-xj[1])/area*nktv2p; + values_local[ibin][m+2] += fpair*(xi[2]-xj[2])/area*nktv2p; + } + } + } + } + } + } + + // compute kinetic contribution to pressure + // counts local particles transfers across the plane + + if (which[m] == KIN || which[m] == TOTAL){ + + double vcm[3]; + double masstotal,sgn; + + for (int i = 0; i < nlocal; i++){ + + // skip if I is not in group + + if (mask[i] & groupbit){ + + itype = type[i]; + + //coordinates at t + xi[0] = atom->x[i][0]; + xi[1] = atom->x[i][1]; + xi[2] = atom->x[i][2]; + + //velocities at t + vi[0] = atom->v[i][0]; + vi[1] = atom->v[i][1]; + vi[2] = atom->v[i][2]; + + //forces at t + fi[0] = atom->f[i][0]; + fi[1] = atom->f[i][1]; + fi[2] = atom->f[i][2]; + + //coordinates at t-dt (based on Velocity-Verlet alg.) + xj[0] = xi[0]-vi[0]*dt+fi[0]/2/mass[itype]*dt*dt*ftm2v; + xj[1] = xi[1]-vi[1]*dt+fi[1]/2/mass[itype]*dt*dt*ftm2v; + xj[2] = xi[2]-vi[2]*dt+fi[2]/2/mass[itype]*dt*dt*ftm2v; + + for (ibin=0;ibinboxlo; + boxhi = domain->boxhi; + prd = domain->prd; + + if (originflag == LOWER) origin = boxlo[dir]; + else if (originflag == UPPER) origin = boxhi[dir]; + else if (originflag == CENTER) + origin = 0.5 * (boxlo[dir] + boxhi[dir]); + + if (origin < boxlo[dir]) { + error->all(FLERR,"Origin of bins for compute stress/mop/profile is out of bounds" ); + } else { + n = static_cast ((origin - boxlo[dir]) * invdelta); + lo = origin - n*delta; + } + if (origin < boxhi[dir]) { + n = static_cast ((boxhi[dir] - origin) * invdelta); + hi = origin + n*delta; + } else { + error->all(FLERR,"Origin of bins for compute stress/mop/profile is out of bounds" ); + } + + offset = lo; + nbins = static_cast ((hi-lo) * invdelta + 1.5); + + //allocate bin arrays + memory->create(coord,nbins,1,"stress/mop/profile:coord"); + memory->create(coordp,nbins,1,"stress/mop/profile:coordp"); + memory->create(values_local,nbins,nvalues,"stress/mop/profile:values_local"); + memory->create(values_global,nbins,nvalues,"stress/mop/profile:values_global"); + + // set bin coordinates + for (i = 0; i < nbins; i++) { + coord[i][0] = offset + i*delta; + if ( coord[i][0] < (domain->boxlo[dir]+domain->prd_half[dir]) ) { + coordp[i][0] = coord[i][0] + domain->prd[dir]; + } else { + coordp[i][0] = coord[i][0] - domain->prd[dir]; + } + } +} diff --git a/src/USER-MISC/compute_stress_mop_profile.h b/src/USER-MISC/compute_stress_mop_profile.h new file mode 100644 index 0000000000000000000000000000000000000000..648d86cc7f98d6a289c418627d1760257bf48a20 --- /dev/null +++ b/src/USER-MISC/compute_stress_mop_profile.h @@ -0,0 +1,113 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. + ------------------------------------------------------------------------- */ + +/*------------------------------------------------------------------------ + Contributing Authors : Romain Vermorel (LFCR), Laurent Joly (ULyon) + --------------------------------------------------------------------------*/ + +#ifdef COMPUTE_CLASS + +ComputeStyle(stress/mop/profile,ComputeStressMopProfile) + +#else + +#ifndef LMP_COMPUTE_STRESS_MOP_PROFILE_H +#define LMP_COMPUTE_STRESS_MOP_PROFILE_H + +#include "compute.h" + +namespace LAMMPS_NS { + + class ComputeStressMopProfile : public Compute { + public: + ComputeStressMopProfile(class LAMMPS *, int, char **); + virtual ~ComputeStressMopProfile(); + void init(); + void init_list(int, class NeighList *); + void compute_array(); + + private: + + void compute_pairs(); + void setup_bins(); + + int me,nvalues,dir; + int *which; + + int originflag; + double origin,delta,offset,invdelta; + int nbins; + double **coord,**coordp; + double **values_local,**values_global; + + int ndim; + double dt,nktv2p,ftm2v; + double area; + class NeighList *list; + + }; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + + E: Illegal ... command + + Self-explanatory. Check the input script syntax and compare to the + documentation for the command. You can use -echo screen as a + command-line option when running LAMMPS to see the offending line. + + E: Compute stress/mop/profile incompatible with simulation dimension + + Compute stress/mop/profile only works with 3D simulations. + + E: Compute stress/mop/profile incompatible with triclinic simulation box + + Self-explanatory. + + E: Compute stress/mop/profile requires a fixed simulation box + + Compute stress/mop/profile is not compatible with any change of volume or shape + or boundary conditions of the simulation box. + + E: No pair style is defined for compute stress/mop/profile + + Self-explanatory. Compute stress/mop/profile requires the definition of a pair style. + + E: Pair style does not support compute stress/mop/profile + + The pair style does not have a single() function, so it can + not be invoked by compute stress/mop/profile. + + E: Origin of bins for compute stress/mop/profile is out of bounds + + Self-explanatory. + + W: compute stress/mop/profile does not account for bond potentials + + W: compute stress/mop/profile does not account for angle potentials + + W: compute stress/mop/profile does not account for dihedral potentials + + W: compute stress/mop/profile does not account for improper potentials + + W: compute stress/mop/profile does not account for kspace contributions + + Compute stress/mop/profile only accounts for pairwise additive interactions for + the computation of local stress tensor components. + +*/ + diff --git a/src/USER-MISC/fix_addtorque.cpp b/src/USER-MISC/fix_addtorque.cpp index 654911769c271bce9c23c7488d5fa35ca88370e0..2cd1ac7527f063fb28dc9080000321126f7a00e4 100644 --- a/src/USER-MISC/fix_addtorque.cpp +++ b/src/USER-MISC/fix_addtorque.cpp @@ -164,7 +164,7 @@ void FixAddTorque::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixAddTorque::post_force(int vflag) +void FixAddTorque::post_force(int /*vflag*/) { double **x = atom->x; double **f = atom->f; @@ -252,7 +252,7 @@ void FixAddTorque::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixAddTorque::post_force_respa(int vflag, int ilevel, int iloop) +void FixAddTorque::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/USER-MISC/fix_ave_correlate_long.cpp b/src/USER-MISC/fix_ave_correlate_long.cpp index da6d041287df6904548cd4fa0070ca2a58b7a86e..5c9f478a659140a33917d6c96488410a3dfd073c 100644 --- a/src/USER-MISC/fix_ave_correlate_long.cpp +++ b/src/USER-MISC/fix_ave_correlate_long.cpp @@ -165,7 +165,7 @@ FixAveCorrelateLong::FixAveCorrelateLong(LAMMPS * lmp, int narg, char **arg): fp = fopen(arg[iarg+1],"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix ave/correlate/long file %s",arg[iarg+1]); + snprintf(str,128,"Cannot open fix ave/correlate/long file %s",arg[iarg+1]); error->one(FLERR,str); } } @@ -412,7 +412,7 @@ void FixAveCorrelateLong::init() only does something if nvalid = current timestep ------------------------------------------------------------------------- */ -void FixAveCorrelateLong::setup(int vflag) +void FixAveCorrelateLong::setup(int /*vflag*/) { end_of_step(); } diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index c72a1b027bafa28c9e219f1348111c4ec4016f97..b30f1b36c613f1268396de04f4838b5dd4691fd7 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -588,7 +588,7 @@ void FixBondReact::init() /* ---------------------------------------------------------------------- */ -void FixBondReact::init_list(int id, NeighList *ptr) +void FixBondReact::init_list(int /*id*/, NeighList *ptr) { list = ptr; } @@ -961,6 +961,10 @@ void FixBondReact::superimpose_algorithm() local_num_mega = 0; ghostly_num_mega = 0; + // indicates local ghosts of other procs + int tmp; + localsendlist = (int *) comm->extract("localsendlist",tmp); + // quick description of important global indices you'll see floating about: // 'pion' is the pioneer loop index // 'neigh' in the first neighbor index @@ -1063,8 +1067,8 @@ void FixBondReact::superimpose_algorithm() hang_catch++; // let's go ahead and catch the simplest of hangs //if (hang_catch > onemol->natoms*4) - if (hang_catch > atom->nlocal*3) { - error->all(FLERR,"Excessive iteration of superimpose algorithm"); + if (hang_catch > atom->nlocal*30) { + error->one(FLERR,"Excessive iteration of superimpose algorithm"); } } } @@ -1554,6 +1558,39 @@ void FixBondReact::find_landlocked_atoms(int myrxn) error->one(FLERR,"Atom affected by reaction too close to template edge"); } + // additionally, if a bond changes type, but neither involved atom is landlocked, bad + // would someone want to change an angle type but not bond or atom types? (etc.) ...hopefully not yet + for (int i = 0; i < twomol->natoms; i++) { + if (landlocked_atoms[i][myrxn] == 0) { + for (int j = 0; j < twomol->num_bond[i]; j++) { + int twomol_atomj = twomol->bond_atom[i][j]; + if (landlocked_atoms[twomol_atomj-1][myrxn] == 0) { + int onemol_atomi = equivalences[i][1][myrxn]; + int onemol_batom; + for (int m = 0; m < onemol->num_bond[onemol_atomi-1]; m++) { + onemol_batom = onemol->bond_atom[onemol_atomi-1][m]; + if (onemol_batom == equivalences[twomol_atomj-1][1][myrxn]) { + if (twomol->bond_type[i][j] != onemol->bond_type[onemol_atomi-1][m]) { + error->one(FLERR,"Bond type affected by reaction too close to template edge"); + } + } + } + if (newton_bond) { + int onemol_atomj = equivalences[twomol_atomj-1][1][myrxn]; + for (int m = 0; m < onemol->num_bond[onemol_atomj-1]; m++) { + onemol_batom = onemol->bond_atom[onemol_atomj-1][m]; + if (onemol_batom == equivalences[i][1][myrxn]) { + if (twomol->bond_type[i][j] != onemol->bond_type[onemol_atomj-1][m]) { + error->one(FLERR,"Bond type affected by reaction too close to template edge"); + } + } + } + } + } + } + } + } + // also, if atoms change number of bonds, but aren't landlocked, that could be bad if (me == 0) for (int i = 0; i < twomol->natoms; i++) { @@ -1824,16 +1861,23 @@ if so, flag for broadcasting for perusal by all processors void FixBondReact::glove_ghostcheck() { - // it appears this little loop was deemed important enough for its own function! - // noteworthy: it's only relevant for parallel - // here we add glove to either local_mega_glove or ghostly_mega_glove + // ghostly_mega_glove includes atoms that are ghosts, either of this proc or another + // 'ghosts of another' indication taken from comm->sendlist + int ghostly = 0; - for (int i = 0; i < onemol->natoms; i++) { - if (atom->map(glove[i][1]) >= atom->nlocal) { - ghostly = 1; - break; + if (comm->style == 0) { + for (int i = 0; i < onemol->natoms; i++) { + int ilocal = atom->map(glove[i][1]); + if (ilocal >= atom->nlocal || localsendlist[ilocal] == 1) { + ghostly = 1; + break; + } } + } else { + #if !defined(MPI_STUBS) + ghostly = 1; + #endif } if (ghostly == 1) { @@ -2067,7 +2111,7 @@ void FixBondReact::update_everything() nspecial[atom->map(update_mega_glove[jj+1][i])][1]++; nspecial[atom->map(update_mega_glove[jj+1][i])][2]++; } - for (int n = nspecial[atom->map(update_mega_glove[jj+1][i])][2]; n > insert_num; n--) { + for (int n = nspecial[atom->map(update_mega_glove[jj+1][i])][2]-1; n > insert_num; n--) { special[atom->map(update_mega_glove[jj+1][i])][n] = special[atom->map(update_mega_glove[jj+1][i])][n-1]; } special[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->special[j][k]-1][1][rxnID]][i]; @@ -2496,7 +2540,7 @@ void FixBondReact::open(char *file) fp = fopen(file,"r"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open superimpose file %s",file); + snprintf(str,128,"Cannot open superimpose file %s",file); error->one(FLERR,str); } } @@ -2587,7 +2631,7 @@ double FixBondReact::compute_vector(int n) /* ---------------------------------------------------------------------- */ -void FixBondReact::post_integrate_respa(int ilevel, int iloop) +void FixBondReact::post_integrate_respa(int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_integrate(); } @@ -2595,7 +2639,7 @@ void FixBondReact::post_integrate_respa(int ilevel, int iloop) /* ---------------------------------------------------------------------- */ int FixBondReact::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,k,m,ns; diff --git a/src/USER-MISC/fix_bond_react.h b/src/USER-MISC/fix_bond_react.h index 8ff71141f8abf66e2ea221db207983ecc9b7eae5..08756f8131cf504cf172f50c3b4cc7c1a7e2c365 100644 --- a/src/USER-MISC/fix_bond_react.h +++ b/src/USER-MISC/fix_bond_react.h @@ -122,6 +122,7 @@ class FixBondReact : public Fix { tagint **local_mega_glove; // consolidation local of reaction instances tagint **ghostly_mega_glove; // consolidation nonlocal of reaction instances tagint **global_mega_glove; // consolidation (inter-processor) of gloves containing nonlocal atoms + int *localsendlist; // indicates ghosts of other procs int local_num_mega; // num of local reaction instances int ghostly_num_mega; // num of ghostly reaction instances int global_megasize; // num of reaction instances in global_mega_glove diff --git a/src/USER-MISC/fix_ffl.cpp b/src/USER-MISC/fix_ffl.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e2fb0166a28473be73e33ddba4e5c746b2d6679d --- /dev/null +++ b/src/USER-MISC/fix_ffl.cpp @@ -0,0 +1,483 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Fast-forward Langevin thermostat, see + M. Hijazi, D. M. Wilkins, M. Ceriotti, J. Chem. Phys. 148, 184109 (2018) +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: Lionel Constantin (EPFL), David M. Wilkins (EPFL), + Michele Ceriotti (EPFL) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "fix_ffl.h" +#include "math_extra.h" +#include "atom.h" +#include "atom_vec_ellipsoid.h" +#include "force.h" +#include "update.h" +#include "modify.h" +#include "compute.h" +#include "domain.h" +#include "region.h" +#include "respa.h" +#include "comm.h" +#include "input.h" +#include "variable.h" +#include "random_mars.h" +#include "memory.h" +#include "error.h" +#include "group.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +enum {NOBIAS,BIAS}; +enum {CONSTANT,EQUAL,ATOM}; +enum {NO_FLIP, FLIP_RESCALE, FLIP_HARD, FLIP_SOFT}; +//#define FFL_DEBUG 1 + +#define MAXLINE 1024 + +/* syntax for fix_ffl: + * fix nfix id-group ffl tau Tstart Tstop seed [flip_type] + * + * */ + +/* ---------------------------------------------------------------------- */ + + +FixFFL::FixFFL(LAMMPS *lmp, int narg, char **arg) : + Fix(lmp, narg, arg) { + + + if (narg < 7) + error->all(FLERR,"Illegal fix ffl command. Expecting: fix " + " ffl "); + + restart_peratom = 1; + time_integrate = 1; + scalar_flag = 1; + + //gamma = 1/ time constant(tau) + if (force->numeric(FLERR,arg[3]) <= 0) + error->all(FLERR,"Illegal fix ffl tau value, should be greater than 0"); + gamma = 1.0/force->numeric(FLERR,arg[3]); + ffl_every=1; + ffl_step=0; + + // start temperature (t ramp) + t_start = force->numeric(FLERR,arg[4]); + + // final temperature (t ramp) + t_stop = force->numeric(FLERR,arg[5]); + + // PRNG seed + int seed = force->inumeric(FLERR,arg[6]); + + // Flip type used, uses rescale if no flip is given + if (narg == 8) { + if (strcmp(arg[7],"no_flip") == 0) { + flip_int = NO_FLIP; + } else if (strcmp(arg[7],"rescale") == 0) { + flip_int = FLIP_RESCALE; + } else if (strcmp(arg[7],"hard") == 0) { + flip_int = FLIP_HARD; + } else if (strcmp(arg[7],"soft") == 0) { + flip_int = FLIP_SOFT; + } else { + error->all(FLERR,"Illegal fix ffl flip type, only accepts : rescale - hard - soft - no_flip"); + } + } else { + flip_int = FLIP_RESCALE; + } + + t_target=t_start; + const double kT = t_target * force->boltz / force->mvv2e; + + + // initialize Marsaglia RNG with processor-unique seed + // NB: this means runs will not be the same with different numbers of processors + if (seed <= 0) error->all(FLERR,"Illegal fix ffl command"); + random = new RanMars(lmp,seed + comm->me); + + // allocate per-type arrays for mass-scaling + sqrt_m=NULL; + memory->grow(sqrt_m, atom->ntypes+1,"ffl:sqrt_m"); + + // allocates space for temporaries + ffl_tmp1=ffl_tmp2=NULL; + + grow_arrays(atom->nmax); + + // add callbacks to enable restarts + atom->add_callback(0); + atom->add_callback(1); + + energy = 0.0; +} + + +/* --- Frees up memory used by temporaries and buffers ------------------ */ + +FixFFL::~FixFFL() { + delete random; + + memory->destroy(sqrt_m); + memory->destroy(ffl_tmp1); + memory->destroy(ffl_tmp2); +} + +/* ---------------------------------------------------------------------- */ + +int FixFFL::setmask() { + int mask = 0; + + mask |= INITIAL_INTEGRATE; + mask |= FINAL_INTEGRATE; + mask |= INITIAL_INTEGRATE_RESPA; + mask |= FINAL_INTEGRATE_RESPA; + mask |= THERMO_ENERGY; + + + return mask; +} + +/* ------- Initializes one-time quantities for FFL ---------------------- */ + +void FixFFL::init() { + doffl = 1; + dtv = update->dt; + dtf = 0.5 * update->dt * force->ftm2v; + + // set force prefactors + if (!atom->rmass) { + for (int i = 1; i <= atom->ntypes; i++) { + sqrt_m[i] = sqrt(atom->mass[i]); + } + } + + if (strstr(update->integrate_style,"respa")) { + nlevels_respa = ((Respa *) update->integrate)->nlevels; + step_respa = ((Respa *) update->integrate)->step; + } + + init_ffl(); +} + +/* ------- Initializes constants for FFL (change with T and dt) ------- */ + +void FixFFL::init_ffl() { + const double kT = t_target * force->boltz / force->mvv2e; + + // compute constants for FFL + + c1 = exp ( - gamma * 0.5 * dtv ); + c2 = sqrt( (1.0 - c1*c1)* kT ); //without the mass term + + +} + + + +/* ---------------------------------------------------------------------- */ + +void FixFFL::setup(int vflag) { + if (strstr(update->integrate_style,"verlet")) + post_force(vflag); + else { + ((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1); + post_force_respa(vflag,nlevels_respa-1,0); + ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1); + } +} + +void FixFFL::ffl_integrate() { + double **v = atom->v; + double *rmass = atom->rmass, smi, ismi; + double factor; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + if (igroup == atom->firstgroup) nlocal = atom->nfirst; + + // loads momentum data (mass-scaled) into the temporary vectors for the propagation + int nk=0; + double deltae=0.0; + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + if (rmass) smi = sqrt(rmass[i]); + else smi = sqrt_m[type[i]]; + + for (int k = 0; k<3; k++) { + // first loads velocities and accumulates conserved quantity + ffl_tmp2[nk] = v[i][k] * smi; + deltae += ffl_tmp2[nk] * ffl_tmp2[nk]; + nk++; + } + } + } + + //fills up a vector of random numbers + for (int i = 0; i < nk; i++) ffl_tmp1[i] = random->gaussian(); + + + // unloads momentum data (mass-scaled) from the temporary vectors + nk=0; + for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { + if (rmass) ismi = 1.0 / sqrt(rmass[i]); + else ismi = 1.0/ sqrt_m[type[i]]; + + for (int k = 0; k<3; k++) { + // fetches new velocities and completes computation of the conserved quantity change + v[i][k]= c1*v[i][k] + c2*ffl_tmp1[nk]*ismi; + + deltae-= v[i][k]*v[i][k] /ismi /ismi; + + //flips the sign of the momentum (HARD FLIP) + if ( flip_int == FLIP_HARD) { + if (v[i][k]*ffl_tmp2[nk] < 0.0) v[i][k] = -v[i][k]; + } + + nk++; + } + } + + //rescale operation (RESCALE FLIP) + if (flip_int == FLIP_RESCALE) { + nk=0; + for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { + factor = sqrt ((v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) / + (ffl_tmp2[nk]*ffl_tmp2[nk] + ffl_tmp2[nk+1]*ffl_tmp2[nk+1] + + ffl_tmp2[nk+2]*ffl_tmp2[nk+2])); + + for (int k = 0; k<3; k++) { + v[i][k]= factor * ffl_tmp2[nk]; + nk++; + } + } + } + + + //soft flip operation (SOFT FLIP) + if (flip_int == FLIP_SOFT) { + nk=0; + for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { + factor = v[i][0]*ffl_tmp2[nk] + v[i][1]*ffl_tmp2[nk+1] + v[i][2]*ffl_tmp2[nk+2]; + if (factor < 0) { + factor = factor / (ffl_tmp2[nk]*ffl_tmp2[nk] + ffl_tmp2[nk+1]*ffl_tmp2[nk+1] + + ffl_tmp2[nk+2]*ffl_tmp2[nk+2]); + + for (int k = 0; k<3; k++) { + v[i][k] -= 2.0 * factor * ffl_tmp2[nk]; + nk++; + } + } else { + nk += 3; + } + } + + } + + energy += deltae*0.5*force->mvv2e; + +} + +void FixFFL::initial_integrate(int vflag) { + double dtfm; + + // update v and x of atoms in group + double **x = atom->x; + double **v = atom->v; + double **f = atom->f; + double *rmass = atom->rmass; + double *mass = atom->mass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + if (igroup == atom->firstgroup) nlocal = atom->nfirst; + + ffl_step--; + if (doffl && ffl_step<1) ffl_integrate(); + + if (rmass) { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = dtf / rmass[i]; + v[i][0] += dtfm * f[i][0]; + v[i][1] += dtfm * f[i][1]; + v[i][2] += dtfm * f[i][2]; + x[i][0] += dtv * v[i][0]; + x[i][1] += dtv * v[i][1]; + x[i][2] += dtv * v[i][2]; + } + + } else { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = dtf / mass[type[i]]; + v[i][0] += dtfm * f[i][0]; + v[i][1] += dtfm * f[i][1]; + v[i][2] += dtfm * f[i][2]; + x[i][0] += dtv * v[i][0]; + x[i][1] += dtv * v[i][1]; + x[i][2] += dtv * v[i][2]; + } + } +} + +void FixFFL::final_integrate() { + double dtfm; + + // update v of atoms in group + + double **v = atom->v; + double **f = atom->f; + double *rmass = atom->rmass; + double *mass = atom->mass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + if (igroup == atom->firstgroup) nlocal = atom->nfirst; + + if (rmass) { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = dtf / rmass[i]; + v[i][0] += dtfm * f[i][0]; + v[i][1] += dtfm * f[i][1]; + v[i][2] += dtfm * f[i][2]; + } + + } else { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = dtf / mass[type[i]]; + v[i][0] += dtfm * f[i][0]; + v[i][1] += dtfm * f[i][1]; + v[i][2] += dtfm * f[i][2]; + } + } + + if (doffl && ffl_step<1) { + ffl_integrate(); + ffl_step = ffl_every; + } + + // Change the temperature for the next step + double delta = update->ntimestep - update->beginstep; + delta /= update->endstep - update->beginstep; + t_target = t_start + delta * (t_stop - t_start); + if (t_stop != t_start) { + // only updates if it is really necessary + init_ffl(); + } + +} +/* ---------------------------------------------------------------------- */ + +void FixFFL::initial_integrate_respa(int vflag, int ilevel, int iloop) { + dtv = step_respa[ilevel]; + dtf = 0.5 * step_respa[ilevel] * force->ftm2v; + + // innermost level - NVE update of v and x + // all other levels - NVE update of v + + if (ilevel==nlevels_respa-1) ffl_integrate(); + doffl=0; + if (ilevel == 0) initial_integrate(vflag); + else { + final_integrate(); + } +} + +void FixFFL::final_integrate_respa(int ilevel, int iloop) { + + dtv = step_respa[ilevel]; + dtf = 0.5 * step_respa[ilevel] * force->ftm2v; + doffl=0; + final_integrate(); + if (ilevel==nlevels_respa-1) ffl_integrate(); +} + + +double FixFFL::compute_scalar() { + + double energy_me = energy; + double energy_all; + MPI_Allreduce(&energy_me,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); + + return energy_all; +} + +/* ---------------------------------------------------------------------- + extract thermostat properties +------------------------------------------------------------------------- */ + +void *FixFFL::extract(const char *str, int &dim) { + dim = 0; + if (strcmp(str,"t_target") == 0) { + return &t_target; + } + return NULL; +} + + +/* ---------------------------------------------------------------------- + Called when a change to the target temperature is requested mid-run +------------------------------------------------------------------------- */ + +void FixFFL::reset_target(double t_new) { + + t_target = t_start = t_stop = t_new; +} + +/* ---------------------------------------------------------------------- + Called when a change to the timestep is requested mid-run +------------------------------------------------------------------------- */ + +void FixFFL::reset_dt() { + // set the time integration constants + dtv = update->dt; + dtf = 0.5 * update->dt * (force->ftm2v); + init_ffl(); +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based arrays +------------------------------------------------------------------------- */ + +double FixFFL::memory_usage() { + double bytes = atom->nmax*(3*2)*sizeof(double); + return bytes; +} + + +/* ---------------------------------------------------------------------- + allocate local atom-based arrays +------------------------------------------------------------------------- */ + +void FixFFL::grow_arrays(int nmax) { + memory->grow(ffl_tmp1, nmax*3,"ffl:tmp1"); + memory->grow(ffl_tmp2, nmax*3,"ffl:tmp2"); + //zeroes out temporary buffers + for (int i=0; i< nmax*3; ++i) ffl_tmp1[i] = 0.0; + for (int i=0; i< nmax*3; ++i) ffl_tmp2[i] = 0.0; +} + + diff --git a/src/USER-MISC/fix_ffl.h b/src/USER-MISC/fix_ffl.h new file mode 100644 index 0000000000000000000000000000000000000000..1225d2598940e5a57208f73f0b4d24568abe0c92 --- /dev/null +++ b/src/USER-MISC/fix_ffl.h @@ -0,0 +1,67 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef FIX_CLASS + +FixStyle(ffl,FixFFL) + +#else + +#ifndef LMP_FIX_FFL_H +#define LMP_FIX_FFL_H + +#include "fix.h" + +namespace LAMMPS_NS { + +class FixFFL : public Fix { + public: + FixFFL(class LAMMPS *, int, char **); + virtual ~FixFFL(); + int setmask(); + void init(); + void setup(int); + void ffl_integrate(); + void initial_integrate_respa(int vflag, int ilevel, int iloop); + void final_integrate_respa(int ilevel, int iloop); + void initial_integrate(int vflag); + void final_integrate(); + double compute_scalar(); + void reset_target(double); + virtual void reset_dt(); + double memory_usage(); + void grow_arrays(int); + + virtual void *extract(const char *, int &); + + void init_ffl(); + protected: + double *ffl_tmp1, *ffl_tmp2; + double t_start, t_stop, t_target; + double dtv, dtf, c1, c2, gamma; + char flip_type[10]; + + int doffl, ffl_every, ffl_step, flip_int; + class RanMars *random; + double *sqrt_m; + double *step_respa; + double energy; + int nlevels_respa; + + double **vaux; +}; + +} + +#endif +#endif diff --git a/src/USER-MISC/fix_filter_corotate.cpp b/src/USER-MISC/fix_filter_corotate.cpp index 91c70335133e4fdf6a37c0ec212d5d38dc9501fb..56ab2b3df9698edd26898fe0c1cbacb8001eebe0 100644 --- a/src/USER-MISC/fix_filter_corotate.cpp +++ b/src/USER-MISC/fix_filter_corotate.cpp @@ -705,7 +705,7 @@ double FixFilterCorotate::compute_array(int,int) return 1; } -void FixFilterCorotate::pre_force_respa(int vflag, int ilevel, int iloop) +void FixFilterCorotate::pre_force_respa(int /*vflag*/, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) { @@ -717,7 +717,7 @@ void FixFilterCorotate::pre_force_respa(int vflag, int ilevel, int iloop) } } -void FixFilterCorotate::post_force_respa(int vflag, int ilevel, int iloop) +void FixFilterCorotate::post_force_respa(int /*vflag*/, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) { @@ -1699,7 +1699,7 @@ void FixFilterCorotate::general_cluster(int index, int index_in_list) } int FixFilterCorotate::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; double**f = atom->f; @@ -1839,7 +1839,7 @@ double FixFilterCorotate::memory_usage() * copy values within local atom-based arrays * ------------------------------------------------------------------------- */ -void FixFilterCorotate::copy_arrays(int i, int j, int delflag) +void FixFilterCorotate::copy_arrays(int i, int j, int /*delflag*/) { int flag = shake_flag[j] = shake_flag[i]; if (flag == 1) { diff --git a/src/USER-MISC/fix_flow_gauss.cpp b/src/USER-MISC/fix_flow_gauss.cpp index 6a1e508030c16857aa282e0089c920bfdbbe8796..b6366ec509cd356990aff55b10d19c9ebb1baefe 100644 --- a/src/USER-MISC/fix_flow_gauss.cpp +++ b/src/USER-MISC/fix_flow_gauss.cpp @@ -155,7 +155,7 @@ void FixFlowGauss::setup(int vflag) /* ---------------------------------------------------------------------- this is where Gaussian dynamics constraint is applied ------------------------------------------------------------------------- */ -void FixFlowGauss::post_force(int vflag) +void FixFlowGauss::post_force(int /*vflag*/) { double **f = atom->f; double **v = atom->v; @@ -222,7 +222,7 @@ void FixFlowGauss::post_force(int vflag) } -void FixFlowGauss::post_force_respa(int vflag, int ilevel, int iloop) +void FixFlowGauss::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/USER-MISC/fix_gle.cpp b/src/USER-MISC/fix_gle.cpp index 584b33bfe7da1bc93d041ee15388d7e72ebe36d5..01da7f87cf97c9cddd391844a1c3edfcae575f8d 100644 --- a/src/USER-MISC/fix_gle.cpp +++ b/src/USER-MISC/fix_gle.cpp @@ -232,7 +232,7 @@ FixGLE::FixGLE(LAMMPS *lmp, int narg, char **arg) : fgle = force->open_potential(fname); if (fgle == NULL) { char str[128]; - sprintf(str,"Cannot open A-matrix file %s",fname); + snprintf(str,128,"Cannot open A-matrix file %s",fname); error->one(FLERR,str); } if (screen) fprintf(screen,"Reading A-matrix from %s\n", fname); @@ -302,7 +302,7 @@ FixGLE::FixGLE(LAMMPS *lmp, int narg, char **arg) : fgle = force->open_potential(fname); if (fgle == NULL) { char str[128]; - sprintf(str,"Cannot open C-matrix file %s",fname); + snprintf(str,128,"Cannot open C-matrix file %s",fname); error->one(FLERR,str); } if (screen) @@ -582,7 +582,7 @@ void FixGLE::gle_integrate() energy += deltae*0.5*force->mvv2e; } -void FixGLE::initial_integrate(int vflag) +void FixGLE::initial_integrate(int /*vflag*/) { double dtfm; @@ -685,7 +685,7 @@ void FixGLE::final_integrate() } /* ---------------------------------------------------------------------- */ -void FixGLE::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixGLE::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) { dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel] * force->ftm2v; @@ -699,7 +699,7 @@ void FixGLE::initial_integrate_respa(int vflag, int ilevel, int iloop) else { final_integrate();} } -void FixGLE::final_integrate_respa(int ilevel, int iloop) +void FixGLE::final_integrate_respa(int ilevel, int /*iloop*/) { dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel] * force->ftm2v; @@ -793,7 +793,7 @@ void FixGLE::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixGLE::copy_arrays(int i, int j, int delflag) +void FixGLE::copy_arrays(int i, int j, int /*delflag*/) { for (int k = 0; k < 3*ns; k++) gle_s[j][k] = gle_s[i][k]; } @@ -868,7 +868,7 @@ void FixGLE::unpack_restart(int nlocal, int nth) fixes on a given processor. ------------------------------------------------------------------------- */ -int FixGLE::size_restart(int nlocal) +int FixGLE::size_restart(int /*nlocal*/) { return 3*ns+1; } diff --git a/src/USER-MISC/fix_grem.cpp b/src/USER-MISC/fix_grem.cpp index a5f8c344488864f80eb160d44c26c21b9ae7890a..635acf705c93bfc758bde45dc14b1e77276ae22a 100644 --- a/src/USER-MISC/fix_grem.cpp +++ b/src/USER-MISC/fix_grem.cpp @@ -256,7 +256,7 @@ void FixGrem::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixGrem::post_force(int vflag) +void FixGrem::post_force(int /*vflag*/) { double **f = atom->f; int *mask = atom->mask; diff --git a/src/USER-MISC/fix_imd.cpp b/src/USER-MISC/fix_imd.cpp index abf9e7cb0ba59629d5d1f65524dbea82b2f0db74..1c3eafdc46cf1ca42b451bd33e5b2e8f3e058890 100644 --- a/src/USER-MISC/fix_imd.cpp +++ b/src/USER-MISC/fix_imd.cpp @@ -811,7 +811,7 @@ void FixIMD::ioworker() /* ---------------------------------------------------------------------- */ /* Main IMD protocol handler: * Send coodinates, energies, and add IMD forces to atoms. */ -void FixIMD::post_force(int vflag) +void FixIMD::post_force(int /*vflag*/) { /* check for reconnect */ if (imd_inactive) { @@ -1153,7 +1153,7 @@ void FixIMD::post_force(int vflag) } /* ---------------------------------------------------------------------- */ -void FixIMD::post_force_respa(int vflag, int ilevel, int iloop) +void FixIMD::post_force_respa(int vflag, int ilevel, int /*iloop*/) { /* only process IMD on the outmost RESPA level. */ if (ilevel == nlevels_respa-1) post_force(vflag); diff --git a/src/USER-MISC/fix_ipi.cpp b/src/USER-MISC/fix_ipi.cpp index c4750ce49e211b22c6f3b1ddc8e8d812f1843402..32892d87a8edd81945e7b613567b3998a5eb03cd 100644 --- a/src/USER-MISC/fix_ipi.cpp +++ b/src/USER-MISC/fix_ipi.cpp @@ -269,7 +269,7 @@ void FixIPI::init() neighbor->every = 1; } -void FixIPI::initial_integrate(int vflag) +void FixIPI::initial_integrate(int /*vflag*/) { /* This is called at the beginning of the integration loop, * and will be used to read positions from the socket. Then, diff --git a/src/USER-MISC/fix_nvk.cpp b/src/USER-MISC/fix_nvk.cpp index dbf7b56fe22048745d10b71dad15e8def74fa30e..2ac2a7c9fca3ad1b2218ab6127def276a8cca14d 100644 --- a/src/USER-MISC/fix_nvk.cpp +++ b/src/USER-MISC/fix_nvk.cpp @@ -94,7 +94,7 @@ void FixNVK::init() allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixNVK::initial_integrate(int vflag) +void FixNVK::initial_integrate(int /*vflag*/) { double sm; double a,b,sqtb,s,sdot; @@ -190,7 +190,7 @@ void FixNVK::final_integrate() /* ---------------------------------------------------------------------- */ -void FixNVK::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixNVK::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) { dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel]; @@ -204,7 +204,7 @@ void FixNVK::initial_integrate_respa(int vflag, int ilevel, int iloop) /* ---------------------------------------------------------------------- */ -void FixNVK::final_integrate_respa(int ilevel, int iloop) +void FixNVK::final_integrate_respa(int ilevel, int /*iloop*/) { dtf = 0.5 * step_respa[ilevel]; final_integrate(); diff --git a/src/USER-MISC/fix_pimd.cpp b/src/USER-MISC/fix_pimd.cpp index e65ae6ae28168acf3a766798f4028f5c7fca700a..eba8ed5d0c7d86477c8ba288931ef7b2357abddb 100644 --- a/src/USER-MISC/fix_pimd.cpp +++ b/src/USER-MISC/fix_pimd.cpp @@ -214,7 +214,7 @@ void FixPIMD::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixPIMD::initial_integrate(int vflag) +void FixPIMD::initial_integrate(int /*vflag*/) { nhc_update_v(); nhc_update_x(); @@ -229,7 +229,7 @@ void FixPIMD::final_integrate() /* ---------------------------------------------------------------------- */ -void FixPIMD::post_force(int flag) +void FixPIMD::post_force(int /*flag*/) { for(int i=0; inlocal; i++) for(int j=0; j<3; j++) atom->f[i][j] /= np; @@ -686,7 +686,7 @@ void FixPIMD::comm_exec(double **ptr) /* ---------------------------------------------------------------------- */ int FixPIMD::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; @@ -744,7 +744,7 @@ void FixPIMD::grow_arrays(int nmax) /* ---------------------------------------------------------------------- */ -void FixPIMD::copy_arrays(int i, int j, int delflag) +void FixPIMD::copy_arrays(int i, int j, int /*delflag*/) { int i_pos = i*3; int j_pos = j*3; @@ -832,7 +832,7 @@ int FixPIMD::maxsize_restart() /* ---------------------------------------------------------------------- */ -int FixPIMD::size_restart(int nlocal) +int FixPIMD::size_restart(int /*nlocal*/) { return size_peratom_cols+1; } diff --git a/src/USER-MISC/fix_rhok.cpp b/src/USER-MISC/fix_rhok.cpp index bbc4ce417a460d194bf3014b61cadc802c763a8d..78d63b79a82fbd39c78c3100b5460fae971d5e76 100644 --- a/src/USER-MISC/fix_rhok.cpp +++ b/src/USER-MISC/fix_rhok.cpp @@ -144,7 +144,7 @@ FixRhok::min_setup( int inVFlag ) // Modify the forces calculated in the main force loop of ordinary MD void -FixRhok::post_force( int inVFlag ) +FixRhok::post_force( int /*inVFlag*/ ) { double **x = atom->x; double **f = atom->f; @@ -206,7 +206,7 @@ FixRhok::post_force( int inVFlag ) // Forces in RESPA loop void -FixRhok::post_force_respa( int inVFlag, int inILevel, int inILoop ) +FixRhok::post_force_respa( int inVFlag, int inILevel, int /*inILoop*/ ) { if( inILevel == mNLevelsRESPA - 1 ) post_force( inVFlag ); diff --git a/src/USER-MISC/fix_smd.cpp b/src/USER-MISC/fix_smd.cpp index a42690c280f960d55ef482f4f7d9c85a04af0d31..cbebdebdbf920bce5ba705ff4630f24892f32b23 100644 --- a/src/USER-MISC/fix_smd.cpp +++ b/src/USER-MISC/fix_smd.cpp @@ -461,7 +461,7 @@ void FixSMD::restart(char *buf) /* ---------------------------------------------------------------------- */ -void FixSMD::post_force_respa(int vflag, int ilevel, int iloop) +void FixSMD::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/USER-MISC/fix_srp.cpp b/src/USER-MISC/fix_srp.cpp index e4d85e867418b3d3173b1883d79aa567d7129278..ebc161ff99b31c32431df6cfbf21f478f3276014 100644 --- a/src/USER-MISC/fix_srp.cpp +++ b/src/USER-MISC/fix_srp.cpp @@ -145,7 +145,7 @@ void FixSRP::init() insert bond particles ------------------------------------------------------------------------- */ -void FixSRP::setup_pre_force(int zz) +void FixSRP::setup_pre_force(int /*zz*/) { double **x = atom->x; double **xold; @@ -394,7 +394,7 @@ void FixSRP::grow_arrays(int nmax) called when move to new proc ------------------------------------------------------------------------- */ -void FixSRP::copy_arrays(int i, int j, int delflag) +void FixSRP::copy_arrays(int i, int j, int /*delflag*/) { for (int m = 0; m < 2; m++) array[j][m] = array[i][m]; @@ -589,7 +589,7 @@ int FixSRP::maxsize_restart() size of atom nlocal's restart data ------------------------------------------------------------------------- */ -int FixSRP::size_restart(int nlocal) +int FixSRP::size_restart(int /*nlocal*/) { return 3; } @@ -632,7 +632,7 @@ void FixSRP::restart(char *buf) pair srp sets the bond type in this fix ------------------------------------------------------------------------- */ -int FixSRP::modify_param(int narg, char **arg) +int FixSRP::modify_param(int /*narg*/, char **arg) { if (strcmp(arg[0],"btype") == 0) { btype = atoi(arg[1]); diff --git a/src/USER-MISC/fix_ti_spring.cpp b/src/USER-MISC/fix_ti_spring.cpp index 5812142763f82c44e9b9cab16595d579e5483701..305e29e0339ea754984caa3977b07ccf32ea9732 100644 --- a/src/USER-MISC/fix_ti_spring.cpp +++ b/src/USER-MISC/fix_ti_spring.cpp @@ -167,7 +167,7 @@ void FixTISpring::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixTISpring::post_force(int vflag) +void FixTISpring::post_force(int /*vflag*/) { // do not calculate forces during equilibration if ((update->ntimestep - t0) < t_equil) return; @@ -200,7 +200,7 @@ void FixTISpring::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixTISpring::post_force_respa(int vflag, int ilevel, int iloop) +void FixTISpring::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_force(vflag); } @@ -214,7 +214,7 @@ void FixTISpring::min_post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixTISpring::initial_integrate(int vflag) +void FixTISpring::initial_integrate(int /*vflag*/) { // Update the coupling parameter value if needed if ((update->ntimestep - t0) < t_equil) return; @@ -278,7 +278,7 @@ void FixTISpring::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixTISpring::copy_arrays(int i, int j, int delflag) +void FixTISpring::copy_arrays(int i, int j, int /*delflag*/) { xoriginal[j][0] = xoriginal[i][0]; xoriginal[j][1] = xoriginal[i][1]; @@ -354,7 +354,7 @@ int FixTISpring::maxsize_restart() size of atom nlocal's restart data ------------------------------------------------------------------------- */ -int FixTISpring::size_restart(int nlocal) +int FixTISpring::size_restart(int /*nlocal*/) { return 4; } diff --git a/src/USER-MISC/fix_ttm_mod.cpp b/src/USER-MISC/fix_ttm_mod.cpp index 1e1e62b638595c9e2aabcb3e690c2d64517dab80..a423b510e5b5c3995aa44133d0e65f2cf92c3ffa 100644 --- a/src/USER-MISC/fix_ttm_mod.cpp +++ b/src/USER-MISC/fix_ttm_mod.cpp @@ -86,7 +86,7 @@ FixTTMMod::FixTTMMod(LAMMPS *lmp, int narg, char **arg) : FILE *fpr_2 = force->open_potential(arg[4]); if (fpr_2 == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",arg[4]); + snprintf(str,128,"Cannot open file %s",arg[4]); error->all(FLERR,str); } @@ -99,7 +99,7 @@ FixTTMMod::FixTTMMod(LAMMPS *lmp, int narg, char **arg) : FILE *fpr = force->open_potential(arg[8]); if (fpr == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",arg[8]); + snprintf(str,128,"Cannot open file %s",arg[8]); error->all(FLERR,str); } @@ -111,7 +111,7 @@ FixTTMMod::FixTTMMod(LAMMPS *lmp, int narg, char **arg) : fp = fopen(arg[10],"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix ttm/mod file %s",arg[10]); + snprintf(str,128,"Cannot open fix ttm/mod file %s",arg[10]); error->one(FLERR,str); } } @@ -357,7 +357,7 @@ void FixTTMMod::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixTTMMod::post_force(int vflag) +void FixTTMMod::post_force(int /*vflag*/) { double **x = atom->x; double **v = atom->v; @@ -451,7 +451,7 @@ void FixTTMMod::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixTTMMod::post_force_setup(int vflag) +void FixTTMMod::post_force_setup(int /*vflag*/) { double **f = atom->f; int *mask = atom->mask; @@ -468,14 +468,14 @@ void FixTTMMod::post_force_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixTTMMod::post_force_respa(int vflag, int ilevel, int iloop) +void FixTTMMod::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_force(vflag); } /* ---------------------------------------------------------------------- */ -void FixTTMMod::post_force_respa_setup(int vflag, int ilevel, int iloop) +void FixTTMMod::post_force_respa_setup(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_force_setup(vflag); } @@ -916,7 +916,7 @@ int FixTTMMod::maxsize_restart() size of atom nlocal's restart data ------------------------------------------------------------------------- */ -int FixTTMMod::size_restart(int nlocal) +int FixTTMMod::size_restart(int /*nlocal*/) { return 4; } diff --git a/src/USER-MISC/fix_wall_region_ees.cpp b/src/USER-MISC/fix_wall_region_ees.cpp index 82a78d3e73bc2d757ca2399c6a3ebc8726ad99af..33bf636e640e2aa81c795fbeb417a7341b044b50 100644 --- a/src/USER-MISC/fix_wall_region_ees.cpp +++ b/src/USER-MISC/fix_wall_region_ees.cpp @@ -149,7 +149,7 @@ void FixWallRegionEES::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixWallRegionEES::post_force(int vflag) +void FixWallRegionEES::post_force(int /*vflag*/) { //sth is needed here, but I dont know what //that is calculation of sn @@ -246,7 +246,7 @@ void FixWallRegionEES::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixWallRegionEES::post_force_respa(int vflag, int ilevel, int iloop) +void FixWallRegionEES::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_force(vflag); } diff --git a/src/USER-MISC/pair_agni.cpp b/src/USER-MISC/pair_agni.cpp index 11bf2ae01ed2790cc65b62afe79c7bb2f392ee44..0277969d151e4e0a160ec79e498bb6e17c4175b2 100644 --- a/src/USER-MISC/pair_agni.cpp +++ b/src/USER-MISC/pair_agni.cpp @@ -246,7 +246,7 @@ void PairAGNI::allocate() global settings ------------------------------------------------------------------------- */ -void PairAGNI::settings(int narg, char **arg) +void PairAGNI::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -363,7 +363,7 @@ void PairAGNI::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open AGNI potential file %s",file); + snprintf(str,128,"Cannot open AGNI potential file %s",file); error->one(FLERR,str); } } @@ -394,7 +394,7 @@ void PairAGNI::read_file(char *file) if (nwords == 0) continue; if (nwords > MAXWORD) - error->all(FLERR,"Increase MAXWORD and recompile"); + error->all(FLERR,"Increase MAXWORD and re-compile"); // words = ptrs to all words in line diff --git a/src/USER-MISC/pair_buck_mdf.cpp b/src/USER-MISC/pair_buck_mdf.cpp index 457d75bc7712907bd06caab711216947e2bcc270..61d32892fcf7b5282a3c4bdb475dde78e14e3afc 100644 --- a/src/USER-MISC/pair_buck_mdf.cpp +++ b/src/USER-MISC/pair_buck_mdf.cpp @@ -391,8 +391,8 @@ void PairBuckMDF::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairBuckMDF::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, +double PairBuckMDF::single(int /*i*/, int /*j*/, int itype, int jtype, + double rsq, double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r6inv,r,rexp,forcebuck,phibuck; diff --git a/src/USER-MISC/pair_coul_diel.cpp b/src/USER-MISC/pair_coul_diel.cpp index 3f07df3d9861dbc0cb5af1bf6a3766d5ccebb38d..0154e8973171fe2675fa349235ba50507fdb2727 100644 --- a/src/USER-MISC/pair_coul_diel.cpp +++ b/src/USER-MISC/pair_coul_diel.cpp @@ -326,7 +326,7 @@ void PairCoulDiel::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ double PairCoulDiel::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, + double rsq, double factor_coul, double /*factor_lj*/, double &fforce) { double r, rarg,forcedielec,phidielec; diff --git a/src/USER-MISC/pair_coul_shield.cpp b/src/USER-MISC/pair_coul_shield.cpp index deec7da81faaa4a2557f7e40bd21c1389c6aa0e2..11df975c1903acf861bd16c7d8749dc03bfab0f8 100644 --- a/src/USER-MISC/pair_coul_shield.cpp +++ b/src/USER-MISC/pair_coul_shield.cpp @@ -341,7 +341,7 @@ void PairCoulShield::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ double PairCoulShield::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, + double rsq, double factor_coul, double /*factor_lj*/, double &fforce) { double r, rarg,Vc,fvc,forcecoul,phishieldec; diff --git a/src/USER-MISC/pair_edip.cpp b/src/USER-MISC/pair_edip.cpp index 2976d7ad73c994fcb4237e6d05edd642f0f2c749..491268567fbdf53b6048ee7bad8c207e93b65bb8 100644 --- a/src/USER-MISC/pair_edip.cpp +++ b/src/USER-MISC/pair_edip.cpp @@ -621,7 +621,7 @@ void PairEDIP::allocate() global settings ------------------------------------------------------------------------- */ -void PairEDIP::settings(int narg, char **arg) +void PairEDIP::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -877,7 +877,7 @@ void PairEDIP::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open EDIP potential file %s",file); + snprintf(str,128,"Cannot open EDIP potential file %s",file); error->one(FLERR,str); } } diff --git a/src/USER-MISC/pair_edip_multi.cpp b/src/USER-MISC/pair_edip_multi.cpp index 6be57eee74c9c32ffb92f28f27391b225e10d6ed..f56650d2f6ccf951845b79dba9375c1a82cde9a3 100644 --- a/src/USER-MISC/pair_edip_multi.cpp +++ b/src/USER-MISC/pair_edip_multi.cpp @@ -516,7 +516,7 @@ void PairEDIPMulti::allocate() global settings ------------------------------------------------------------------------- */ -void PairEDIPMulti::settings(int narg, char **arg) +void PairEDIPMulti::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -644,7 +644,7 @@ void PairEDIPMulti::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open EDIP potential file %s",file); + snprintf(str,128,"Cannot open EDIP potential file %s",file); error->one(FLERR,str); } } diff --git a/src/USER-MISC/pair_extep.cpp b/src/USER-MISC/pair_extep.cpp index 5a8cdf28841cf2f7fa61b4f184867a2f8465ff7f..1e7d17f0409f7cac1994c1e12759998ea2d9e702 100644 --- a/src/USER-MISC/pair_extep.cpp +++ b/src/USER-MISC/pair_extep.cpp @@ -442,7 +442,7 @@ void PairExTeP::allocate() global settings ------------------------------------------------------------------------- */ -void PairExTeP::settings(int narg, char **arg) +void PairExTeP::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -591,7 +591,7 @@ void PairExTeP::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open ExTeP potential file %s",file); + snprintf(str,128,"Cannot open ExTeP potential file %s",file); error->one(FLERR,str); } } diff --git a/src/USER-MISC/pair_gauss_cut.cpp b/src/USER-MISC/pair_gauss_cut.cpp index 85f7c02887a1d0c1a9a6841d69df6c17a754b5e6..a000eff028ccb7e153f4837e04c5512905f8bad1 100644 --- a/src/USER-MISC/pair_gauss_cut.cpp +++ b/src/USER-MISC/pair_gauss_cut.cpp @@ -374,8 +374,8 @@ void PairGaussCut::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairGaussCut::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairGaussCut::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r, rexp,ugauss,phigauss; diff --git a/src/USER-MISC/pair_ilp_graphene_hbn.cpp b/src/USER-MISC/pair_ilp_graphene_hbn.cpp index 30ee2e7a5ae3c3aa42843f2ba07c1c8f36b7dbb9..f613f0aff058f70888dd12dd649f907f46202fec 100644 --- a/src/USER-MISC/pair_ilp_graphene_hbn.cpp +++ b/src/USER-MISC/pair_ilp_graphene_hbn.cpp @@ -249,11 +249,9 @@ void PairILPGrapheneHBN::compute(int eflag, int vflag) f[i][0] += fkcx - fprod1[0]*Tap; f[i][1] += fkcy - fprod1[1]*Tap; f[i][2] += fkcz - fprod1[2]*Tap; - if (newton_pair || j < nlocal) { - f[j][0] -= fkcx + fprod2[0]*Tap; - f[j][1] -= fkcy + fprod2[1]*Tap; - f[j][2] -= fkcz + fprod2[2]*Tap; - } + f[j][0] -= fkcx + fprod2[0]*Tap; + f[j][1] -= fkcy + fprod2[1]*Tap; + f[j][2] -= fkcz + fprod2[2]*Tap; // calculate the forces acted on the neighbors of atom i from atom j ILP_neighs_i = ILP_firstneigh[i]; @@ -274,15 +272,13 @@ void PairILPGrapheneHBN::compute(int eflag, int vflag) for (ll = 0; ll < ILP_numneigh[j]; ll++) { l = ILP_neighs_j[ll]; if (l == j) continue; - if (newton_pair || l < nlocal) { - // derivatives of the product of rji and nj respect to rl, l=0,1,2, where atom l is the neighbors of atom j - dprodnorm2[0] = dnormal[0][0][ll][j]*delx + dnormal[1][0][ll][j]*dely + dnormal[2][0][ll][j]*delz; - dprodnorm2[1] = dnormal[0][1][ll][j]*delx + dnormal[1][1][ll][j]*dely + dnormal[2][1][ll][j]*delz; - dprodnorm2[2] = dnormal[0][2][ll][j]*delx + dnormal[1][2][ll][j]*dely + dnormal[2][2][ll][j]*delz; - f[l][0] += (-prodnorm2*dprodnorm2[0]*fpair2)*Tap; - f[l][1] += (-prodnorm2*dprodnorm2[1]*fpair2)*Tap; - f[l][2] += (-prodnorm2*dprodnorm2[2]*fpair2)*Tap; - } + // derivatives of the product of rji and nj respect to rl, l=0,1,2, where atom l is the neighbors of atom j + dprodnorm2[0] = dnormal[0][0][ll][j]*delx + dnormal[1][0][ll][j]*dely + dnormal[2][0][ll][j]*delz; + dprodnorm2[1] = dnormal[0][1][ll][j]*delx + dnormal[1][1][ll][j]*dely + dnormal[2][1][ll][j]*delz; + dprodnorm2[2] = dnormal[0][2][ll][j]*delx + dnormal[1][2][ll][j]*dely + dnormal[2][2][ll][j]*delz; + f[l][0] += (-prodnorm2*dprodnorm2[0]*fpair2)*Tap; + f[l][1] += (-prodnorm2*dprodnorm2[1]*fpair2)*Tap; + f[l][2] += (-prodnorm2*dprodnorm2[2]*fpair2)*Tap; } if (eflag) { @@ -729,7 +725,8 @@ void PairILPGrapheneHBN::ILP_neigh() ILP_firstneigh[i] = neighptr; ILP_numneigh[i] = n; - if (n > 3) error->all(FLERR,"There are too many neighbors for some atoms, please reduce the cutoff for normals"); + if (n == 0) error->all(FLERR,"Could not build neighbor list to calculate normals, please check your configuration"); + if (n > 3) error->all(FLERR,"There are too many neighbors for some atoms, please check your configuration"); ipage->vgot(n); if (ipage->status()) error->one(FLERR,"Neighbor list overflow, boost neigh_modify one"); @@ -880,7 +877,7 @@ void PairILPGrapheneHBN::read_file(char *filename) fp = force->open_potential(filename); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open ILP potential file %s",filename); + snprintf(str,128,"Cannot open ILP potential file %s",filename); error->one(FLERR,str); } } @@ -1010,8 +1007,8 @@ void PairILPGrapheneHBN::read_file(char *filename) /* ---------------------------------------------------------------------- */ -double PairILPGrapheneHBN::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairILPGrapheneHBN::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r,r2inv,r6inv,r8inv,forcelj,philj,fpair; @@ -1047,7 +1044,7 @@ double PairILPGrapheneHBN::single(int i, int j, int itype, int jtype, double rsq /* ---------------------------------------------------------------------- */ int PairILPGrapheneHBN::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m,id,ip,l; diff --git a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp index be0e81d48d9e986e38247aae32bb60b0ac4fb377..2f868ae4183a144f6846febd36149f16c461f9af 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp @@ -249,11 +249,9 @@ void PairKolmogorovCrespiFull::compute(int eflag, int vflag) f[i][0] += fkcx - fprod1[0]*Tap; f[i][1] += fkcy - fprod1[1]*Tap; f[i][2] += fkcz - fprod1[2]*Tap; - if (newton_pair || j < nlocal) { - f[j][0] -= fkcx + fprod2[0]*Tap; - f[j][1] -= fkcy + fprod2[1]*Tap; - f[j][2] -= fkcz + fprod2[2]*Tap; - } + f[j][0] -= fkcx + fprod2[0]*Tap; + f[j][1] -= fkcy + fprod2[1]*Tap; + f[j][2] -= fkcz + fprod2[2]*Tap; // calculate the forces acted on the neighbors of atom i from atom j KC_neighs_i = KC_firstneigh[i]; @@ -274,15 +272,13 @@ void PairKolmogorovCrespiFull::compute(int eflag, int vflag) for (ll = 0; ll < KC_numneigh[j]; ll++) { l = KC_neighs_j[ll]; if (l == j) continue; - if (newton_pair || l < nlocal) { - // derivatives of the product of rji and nj respect to rl, l=0,1,2, where atom l is the neighbors of atom j - dprodnorm2[0] = dnormal[0][0][ll][j]*delx + dnormal[1][0][ll][j]*dely + dnormal[2][0][ll][j]*delz; - dprodnorm2[1] = dnormal[0][1][ll][j]*delx + dnormal[1][1][ll][j]*dely + dnormal[2][1][ll][j]*delz; - dprodnorm2[2] = dnormal[0][2][ll][j]*delx + dnormal[1][2][ll][j]*dely + dnormal[2][2][ll][j]*delz; - f[l][0] += (-prodnorm2*dprodnorm2[0]*fpair2)*Tap; - f[l][1] += (-prodnorm2*dprodnorm2[1]*fpair2)*Tap; - f[l][2] += (-prodnorm2*dprodnorm2[2]*fpair2)*Tap; - } + // derivatives of the product of rji and nj respect to rl, l=0,1,2, where atom l is the neighbors of atom j + dprodnorm2[0] = dnormal[0][0][ll][j]*delx + dnormal[1][0][ll][j]*dely + dnormal[2][0][ll][j]*delz; + dprodnorm2[1] = dnormal[0][1][ll][j]*delx + dnormal[1][1][ll][j]*dely + dnormal[2][1][ll][j]*delz; + dprodnorm2[2] = dnormal[0][2][ll][j]*delx + dnormal[1][2][ll][j]*dely + dnormal[2][2][ll][j]*delz; + f[l][0] += (-prodnorm2*dprodnorm2[0]*fpair2)*Tap; + f[l][1] += (-prodnorm2*dprodnorm2[1]*fpair2)*Tap; + f[l][2] += (-prodnorm2*dprodnorm2[2]*fpair2)*Tap; } if (eflag) { @@ -734,7 +730,8 @@ void PairKolmogorovCrespiFull::KC_neigh() KC_firstneigh[i] = neighptr; KC_numneigh[i] = n; - if (n > 3) error->all(FLERR,"There are too many neighbors for some atoms, please reduce the cutoff for normals"); + if (n == 0) error->all(FLERR,"Could not build neighbor list to calculate normals, please check your configuration"); + if (n > 3) error->all(FLERR,"There are too many neighbors for some atoms, please check your configuration"); ipage->vgot(n); if (ipage->status()) error->one(FLERR,"Neighbor list overflow, boost neigh_modify one"); @@ -885,7 +882,7 @@ void PairKolmogorovCrespiFull::read_file(char *filename) fp = force->open_potential(filename); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open KC potential file %s",filename); + snprintf(str,128,"Cannot open KC potential file %s",filename); error->one(FLERR,str); } } @@ -1015,8 +1012,8 @@ void PairKolmogorovCrespiFull::read_file(char *filename) /* ---------------------------------------------------------------------- */ -double PairKolmogorovCrespiFull::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairKolmogorovCrespiFull::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r,r2inv,r6inv,r8inv,forcelj,philj; @@ -1050,7 +1047,7 @@ double PairKolmogorovCrespiFull::single(int i, int j, int itype, int jtype, doub /* ---------------------------------------------------------------------- */ int PairKolmogorovCrespiFull::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m,l,ip,id; diff --git a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp index fb7d5ae40eda1bc857c5c29f6f9955973e358f43..b39b9fdb7204ef07142f6bd4363fcc551dfa6759 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp @@ -315,7 +315,7 @@ void PairKolmogorovCrespiZ::read_file(char *filename) fp = force->open_potential(filename); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open KC potential file %s",filename); + snprintf(str,128,"Cannot open KC potential file %s",filename); error->one(FLERR,str); } } diff --git a/src/USER-MISC/pair_lennard_mdf.cpp b/src/USER-MISC/pair_lennard_mdf.cpp index f6e7f7f56b0084b8fe5115e0424fce3909bde8c4..45d0da4d83e03d2bea53c7ab2ca62f57ede9c802 100644 --- a/src/USER-MISC/pair_lennard_mdf.cpp +++ b/src/USER-MISC/pair_lennard_mdf.cpp @@ -352,9 +352,9 @@ void PairLJ_AB_MDF::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJ_AB_MDF::single(int i, int j, int itype, int jtype, +double PairLJ_AB_MDF::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r6inv,forcelj,philj; diff --git a/src/USER-MISC/pair_lj_mdf.cpp b/src/USER-MISC/pair_lj_mdf.cpp index d43a6c30862165ea7cd6d0a801e7e285902feb0c..891239016bc09c5829aa53566da2c4fe55a2ab2a 100644 --- a/src/USER-MISC/pair_lj_mdf.cpp +++ b/src/USER-MISC/pair_lj_mdf.cpp @@ -352,9 +352,9 @@ void PairLJMDF::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJMDF::single(int i, int j, int itype, int jtype, +double PairLJMDF::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r6inv,forcelj,philj; diff --git a/src/USER-MISC/pair_meam_spline.cpp b/src/USER-MISC/pair_meam_spline.cpp index 750f6ac5bbaee20ffcdffbaf8dccecf28576701b..0300e2c7a28ba1a2271e955d2941beacf82dd14b 100644 --- a/src/USER-MISC/pair_meam_spline.cpp +++ b/src/USER-MISC/pair_meam_spline.cpp @@ -360,7 +360,7 @@ void PairMEAMSpline::allocate() global settings ------------------------------------------------------------------------- */ -void PairMEAMSpline::settings(int narg, char **arg) +void PairMEAMSpline::settings(int narg, char **/*arg*/) { if(narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -439,7 +439,7 @@ void PairMEAMSpline::read_file(const char* filename) FILE *fp = force->open_potential(filename); if(fp == NULL) { char str[1024]; - sprintf(str,"Cannot open spline MEAM potential file %s", filename); + snprintf(str,128,"Cannot open spline MEAM potential file %s", filename); error->one(FLERR,str); } @@ -592,7 +592,7 @@ void PairMEAMSpline::init_list(int id, NeighList *ptr) /* ---------------------------------------------------------------------- init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairMEAMSpline::init_one(int i, int j) +double PairMEAMSpline::init_one(int /*i*/, int /*j*/) { return cutoff; } @@ -600,7 +600,7 @@ double PairMEAMSpline::init_one(int i, int j) /* ---------------------------------------------------------------------- */ int PairMEAMSpline::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int* list_iter = list; int* list_iter_end = list + n; @@ -618,14 +618,14 @@ void PairMEAMSpline::unpack_forward_comm(int n, int first, double *buf) /* ---------------------------------------------------------------------- */ -int PairMEAMSpline::pack_reverse_comm(int n, int first, double *buf) +int PairMEAMSpline::pack_reverse_comm(int /*n*/, int /*first*/, double * /*buf*/) { return 0; } /* ---------------------------------------------------------------------- */ -void PairMEAMSpline::unpack_reverse_comm(int n, int *list, double *buf) +void PairMEAMSpline::unpack_reverse_comm(int /*n*/, int * /*list*/, double * /*buf*/) { } diff --git a/src/USER-MISC/pair_meam_sw_spline.cpp b/src/USER-MISC/pair_meam_sw_spline.cpp index f6b7212f9cfd9ee124eed653d2cf588b77d502a0..e17c13865de93c3eea5a53e46fd59aea52fb26d2 100644 --- a/src/USER-MISC/pair_meam_sw_spline.cpp +++ b/src/USER-MISC/pair_meam_sw_spline.cpp @@ -372,7 +372,7 @@ void PairMEAMSWSpline::allocate() global settings ------------------------------------------------------------------------- */ -void PairMEAMSWSpline::settings(int narg, char **arg) +void PairMEAMSWSpline::settings(int narg, char **/*arg*/) { if(narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -462,64 +462,64 @@ void PairMEAMSWSpline::coeff(int narg, char **arg) void PairMEAMSWSpline::read_file(const char* filename) { - if(comm->me == 0) { - FILE *fp = force->open_potential(filename); - if(fp == NULL) { - char str[1024]; - sprintf(str,"Cannot open spline MEAM potential file %s", filename); - error->one(FLERR,str); - } + if(comm->me == 0) { + FILE *fp = force->open_potential(filename); + if(fp == NULL) { + char str[1024]; + snprintf(str,1024,"Cannot open spline MEAM potential file %s", filename); + error->one(FLERR,str); + } - // Skip first line of file. - char line[MAXLINE]; - fgets(line, MAXLINE, fp); + // Skip first line of file. + char line[MAXLINE]; + fgets(line, MAXLINE, fp); - // Parse spline functions. - phi.parse(fp, error); - F.parse(fp, error); - G.parse(fp, error); - rho.parse(fp, error); - U.parse(fp, error); - f.parse(fp, error); - g.parse(fp, error); + // Parse spline functions. + phi.parse(fp, error); + F.parse(fp, error); + G.parse(fp, error); + rho.parse(fp, error); + U.parse(fp, error); + f.parse(fp, error); + g.parse(fp, error); - fclose(fp); - } + fclose(fp); + } - // Transfer spline functions from master processor to all other processors. - phi.communicate(world, comm->me); - rho.communicate(world, comm->me); - f.communicate(world, comm->me); - U.communicate(world, comm->me); - g.communicate(world, comm->me); - F.communicate(world, comm->me); - G.communicate(world, comm->me); - - // Calculate 'zero-point energy' of single atom in vacuum. - zero_atom_energy = U.eval(0.0); - - // Determine maximum cutoff radius of all relevant spline functions. - cutoff = 0.0; - if(phi.cutoff() > cutoff) cutoff = phi.cutoff(); - if(rho.cutoff() > cutoff) cutoff = rho.cutoff(); - if(f.cutoff() > cutoff) cutoff = f.cutoff(); - if(F.cutoff() > cutoff) cutoff = F.cutoff(); - - // Set LAMMPS pair interaction flags. - for(int i = 1; i <= atom->ntypes; i++) { - for(int j = 1; j <= atom->ntypes; j++) { - setflag[i][j] = 1; - cutsq[i][j] = cutoff; - } - } + // Transfer spline functions from master processor to all other processors. + phi.communicate(world, comm->me); + rho.communicate(world, comm->me); + f.communicate(world, comm->me); + U.communicate(world, comm->me); + g.communicate(world, comm->me); + F.communicate(world, comm->me); + G.communicate(world, comm->me); + + // Calculate 'zero-point energy' of single atom in vacuum. + zero_atom_energy = U.eval(0.0); + + // Determine maximum cutoff radius of all relevant spline functions. + cutoff = 0.0; + if(phi.cutoff() > cutoff) cutoff = phi.cutoff(); + if(rho.cutoff() > cutoff) cutoff = rho.cutoff(); + if(f.cutoff() > cutoff) cutoff = f.cutoff(); + if(F.cutoff() > cutoff) cutoff = F.cutoff(); + + // Set LAMMPS pair interaction flags. + for(int i = 1; i <= atom->ntypes; i++) { + for(int j = 1; j <= atom->ntypes; j++) { + setflag[i][j] = 1; + cutsq[i][j] = cutoff; + } + } - // phi.writeGnuplot("phi.gp", "Phi(r)"); - // rho.writeGnuplot("rho.gp", "Rho(r)"); - // f.writeGnuplot("f.gp", "f(r)"); - // U.writeGnuplot("U.gp", "U(rho)"); - // g.writeGnuplot("g.gp", "g(x)"); - // F.writeGnuplot("F.gp", "F(r)"); - // G.writeGnuplot("G.gp", "G(x)"); + // phi.writeGnuplot("phi.gp", "Phi(r)"); + // rho.writeGnuplot("rho.gp", "Rho(r)"); + // f.writeGnuplot("f.gp", "f(r)"); + // U.writeGnuplot("U.gp", "U(rho)"); + // g.writeGnuplot("g.gp", "g(x)"); + // F.writeGnuplot("F.gp", "F(r)"); + // G.writeGnuplot("G.gp", "G(x)"); } /* ---------------------------------------------------------------------- @@ -552,7 +552,7 @@ void PairMEAMSWSpline::init_list(int id, NeighList *ptr) /* ---------------------------------------------------------------------- init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairMEAMSWSpline::init_one(int i, int j) +double PairMEAMSWSpline::init_one(int /*i*/, int /*j*/) { return cutoff; } @@ -560,7 +560,7 @@ double PairMEAMSWSpline::init_one(int i, int j) /* ---------------------------------------------------------------------- */ int PairMEAMSWSpline::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int* list_iter = list; int* list_iter_end = list + n; @@ -578,14 +578,14 @@ void PairMEAMSWSpline::unpack_forward_comm(int n, int first, double *buf) /* ---------------------------------------------------------------------- */ -int PairMEAMSWSpline::pack_reverse_comm(int n, int first, double *buf) +int PairMEAMSWSpline::pack_reverse_comm(int /*n*/, int /*first*/, double * /*buf*/) { return 0; } /* ---------------------------------------------------------------------- */ -void PairMEAMSWSpline::unpack_reverse_comm(int n, int *list, double *buf) +void PairMEAMSWSpline::unpack_reverse_comm(int /*n*/, int * /*list*/, double * /*buf*/) { } diff --git a/src/USER-MISC/pair_momb.cpp b/src/USER-MISC/pair_momb.cpp index 12a40bb08beb6ce981920f5dbba5dc041564deb8..927181ebf6362a0982de2ad8875fbd7dba85bb83 100644 --- a/src/USER-MISC/pair_momb.cpp +++ b/src/USER-MISC/pair_momb.cpp @@ -365,8 +365,8 @@ void PairMomb::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairMomb::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairMomb::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r,dr,dexp,phi,r2inv,r6inv,ddexp,invexp; diff --git a/src/USER-MISC/pair_morse_smooth_linear.cpp b/src/USER-MISC/pair_morse_smooth_linear.cpp index 8a9c89cf6945afbba59a7509d936f0ecf526c4a8..a88e7a1a274dd852dccb871c2828acc64d687706 100644 --- a/src/USER-MISC/pair_morse_smooth_linear.cpp +++ b/src/USER-MISC/pair_morse_smooth_linear.cpp @@ -30,7 +30,6 @@ using namespace LAMMPS_NS; PairMorseSmoothLinear::PairMorseSmoothLinear(LAMMPS *lmp) : Pair(lmp) { writedata = 1; - } /* ---------------------------------------------------------------------- */ @@ -117,7 +116,7 @@ void PairMorseSmoothLinear::compute(int eflag, int vflag) if (eflag) { evdwl = d0[itype][jtype] * (dexp*dexp - 2.0*dexp) - - offset[itype][jtype]; + offset[itype][jtype]; evdwl -= ( r - cut[itype][jtype] ) * der_at_cutoff[itype][jtype]; evdwl *= factor_lj; } @@ -203,6 +202,14 @@ void PairMorseSmoothLinear::coeff(int narg, char **arg) alpha[i][j] = alpha_one; r0[i][j] = r0_one; cut[i][j] = cut_one; + + morse1[i][j] = 2.0*d0[i][j]*alpha[i][j]; + + double alpha_dr = -alpha[i][j] * (cut[i][j] - r0[i][j]); + + offset[i][j] = d0[i][j] * (exp(2.0*alpha_dr) - 2.0*exp(alpha_dr)); + der_at_cutoff[i][j] = -2.0*alpha[i][j]*d0[i][j] * (exp(2.0*alpha_dr) - exp(alpha_dr)); + setflag[i][j] = 1; count++; } @@ -222,17 +229,13 @@ double PairMorseSmoothLinear::init_one(int i, int j) morse1[i][j] = 2.0*d0[i][j]*alpha[i][j]; - double alpha_dr = -alpha[i][j] * (cut[i][j] - r0[i][j]); - - offset[i][j] = d0[i][j] * (exp(2.0*alpha_dr) - 2.0*exp(alpha_dr)); - der_at_cutoff[i][j] = -2.0*alpha[i][j]*d0[i][j] * (exp(2.0*alpha_dr) - exp(alpha_dr)); - d0[j][i] = d0[i][j]; alpha[j][i] = alpha[i][j]; r0[j][i] = r0[i][j]; morse1[j][i] = morse1[i][j]; der_at_cutoff[j][i] = der_at_cutoff[i][j]; offset[j][i] = offset[i][j]; + cut[j][i] = cut[i][j]; return cut[i][j]; } @@ -337,8 +340,8 @@ void PairMorseSmoothLinear::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairMorseSmoothLinear::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairMorseSmoothLinear::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r,dr,dexp,phi; diff --git a/src/USER-MISC/pair_tersoff_table.cpp b/src/USER-MISC/pair_tersoff_table.cpp index c2362b8de9ce0c186636d91d324f406b5bdadfd4..d1044cc3362f0c292acef9235d05ed3fd8b4c8fd 100644 --- a/src/USER-MISC/pair_tersoff_table.cpp +++ b/src/USER-MISC/pair_tersoff_table.cpp @@ -719,7 +719,7 @@ void PairTersoffTable::allocate() global settings ------------------------------------------------------------------------- */ -void PairTersoffTable::settings(int narg, char **arg) +void PairTersoffTable::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); } @@ -845,7 +845,7 @@ void PairTersoffTable::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open Tersoff potential file %s",file); + snprintf(str,128,"Cannot open Tersoff potential file %s",file); error->one(FLERR,str); } } diff --git a/src/USER-MOFFF/angle_cosine_buck6d.cpp b/src/USER-MOFFF/angle_cosine_buck6d.cpp index b5800db2beb9a398eaa2fd8d314a8ae5566df1a9..3f87aeb7574a00b0fa5b83e8a76d038202fc329d 100644 --- a/src/USER-MOFFF/angle_cosine_buck6d.cpp +++ b/src/USER-MOFFF/angle_cosine_buck6d.cpp @@ -56,7 +56,7 @@ AngleCosineBuck6d::~AngleCosineBuck6d() void AngleCosineBuck6d::compute(int eflag, int vflag) { - int i,i1,i2,i3,n,type,itype,jtype; + int i1,i2,i3,n,type,itype,jtype; double delx1,dely1,delz1,delx2,dely2,delz2; double eangle,f1[3],f3[3]; double rsq1,rsq2,r1,r2,c,s,a,a11,a12,a22; @@ -309,7 +309,7 @@ void AngleCosineBuck6d::init_style() /* ---------------------------------------------------------------------- */ -double AngleCosineBuck6d::equilibrium_angle(int i) +double AngleCosineBuck6d::equilibrium_angle(int /*i*/) { return MY_PI; } diff --git a/src/USER-MOFFF/improper_inversion_harmonic.cpp b/src/USER-MOFFF/improper_inversion_harmonic.cpp index 53a7b4729a990c6adacf7b69c8a57558e586e465..9608d58054fa49d99443f915dbe5c78af055d34a 100644 --- a/src/USER-MOFFF/improper_inversion_harmonic.cpp +++ b/src/USER-MOFFF/improper_inversion_harmonic.cpp @@ -139,7 +139,6 @@ void ImproperInversionHarmonic::invang(const int &i1,const int &i2, double upx,upy,upz,upn,rup,umx,umy,umz,umn,rum,wwr; double rucb,rudb,rvcb,rvdb,rupupn,rumumn; - double **x = atom->x; double **f = atom->f; int nlocal = atom->nlocal; int newton_bond = force->newton_bond; @@ -242,7 +241,7 @@ void ImproperInversionHarmonic::invang(const int &i1,const int &i2, f[i4][2] += f4[2]; } - double rb1x, rb1y, rb1z, rb2x, rb2y, rb2z, rb3x, rb3y, rb3z; + double rb3x, rb3y, rb3z; if (evflag) rb3x = vb1x - vb2x; @@ -253,7 +252,7 @@ void ImproperInversionHarmonic::invang(const int &i1,const int &i2, vb3x,vb3y,vb3z, vb2x,vb2y,vb2z, rb3x,rb3y,rb3z); - } +} /* ---------------------------------------------------------------------- */ diff --git a/src/USER-MOLFILE/reader_molfile.cpp b/src/USER-MOLFILE/reader_molfile.cpp index 6348009d8fd9ca866909f0994920a42a1a997258..8e49f56d5c171b28cac0147f16776b72e815cbc0 100644 --- a/src/USER-MOLFILE/reader_molfile.cpp +++ b/src/USER-MOLFILE/reader_molfile.cpp @@ -113,12 +113,12 @@ void ReaderMolfile::open_file(const char *file) rv = mf->open(file,&natoms); if (rv != MFI::E_NONE) { - sprintf(str,"Cannot open file %s",file); + snprintf(str,1024,"Cannot open file %s",file); error->one(FLERR,str); } if (natoms < 1) { - sprintf(str,"No atoms in file %s",file); + snprintf(str,1024,"No atoms in file %s",file); error->one(FLERR,str); } diff --git a/src/USER-OMP/fix_omp.cpp b/src/USER-OMP/fix_omp.cpp index 8d54d5b4516f109c2202868d985ca47e62893ce2..8be54caada2d4b92f4e5f8ba524b088cbd87bd09 100644 --- a/src/USER-OMP/fix_omp.cpp +++ b/src/USER-OMP/fix_omp.cpp @@ -318,8 +318,11 @@ void FixOMP::set_neighbor_omp() const int neigh_omp = _neighbor ? 1 : 0; const int nrequest = neighbor->nrequest; + // flag *all* neighbor list requests as USER-OMP threaded, + // but skip lists already flagged as USER-INTEL threaded for (int i = 0; i < nrequest; ++i) - neighbor->requests[i]->omp = neigh_omp; + if (! neighbor->requests[i]->intel) + neighbor->requests[i]->omp = neigh_omp; } /* ---------------------------------------------------------------------- */ diff --git a/src/USER-OMP/pair_eam_alloy_omp.cpp b/src/USER-OMP/pair_eam_alloy_omp.cpp index bbb3b03b020cffdf39327c6b556b26e165983699..78b4735863d8a58f0c49bfbe00c836a28a697f3f 100644 --- a/src/USER-OMP/pair_eam_alloy_omp.cpp +++ b/src/USER-OMP/pair_eam_alloy_omp.cpp @@ -126,7 +126,7 @@ void PairEAMAlloyOMP::read_file(char *filename) fptr = force->open_potential(filename); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); + snprintf(str,128,"Cannot open EAM potential file %s",filename); error->one(FLERR,str); } } diff --git a/src/USER-OMP/pair_cdeam_omp.cpp b/src/USER-OMP/pair_eam_cd_omp.cpp similarity index 97% rename from src/USER-OMP/pair_cdeam_omp.cpp rename to src/USER-OMP/pair_eam_cd_omp.cpp index c3a9454567cccc0cb0c075f635e61c247ef9c476..68c01c83d21b48137b2d04c494f46fef4a1c9943 100644 --- a/src/USER-OMP/pair_cdeam_omp.cpp +++ b/src/USER-OMP/pair_eam_cd_omp.cpp @@ -15,7 +15,7 @@ #include #include -#include "pair_cdeam_omp.h" +#include "pair_eam_cd_omp.h" #include "atom.h" #include "comm.h" #include "error.h" @@ -44,8 +44,8 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairCDEAMOMP::PairCDEAMOMP(LAMMPS *lmp, int _cdeamVersion) : - PairEAM(lmp), PairCDEAM(lmp,_cdeamVersion), ThrOMP(lmp, THR_PAIR) +PairEAMCDOMP::PairEAMCDOMP(LAMMPS *lmp, int _cdeamVersion) : + PairEAM(lmp), PairEAMCD(lmp,_cdeamVersion), ThrOMP(lmp, THR_PAIR) { suffix_flag |= Suffix::OMP; respa_enable = 0; @@ -53,7 +53,7 @@ PairCDEAMOMP::PairCDEAMOMP(LAMMPS *lmp, int _cdeamVersion) : /* ---------------------------------------------------------------------- */ -void PairCDEAMOMP::compute(int eflag, int vflag) +void PairEAMCDOMP::compute(int eflag, int vflag) { if (eflag || vflag) { ev_setup(eflag,vflag); @@ -143,7 +143,7 @@ void PairCDEAMOMP::compute(int eflag, int vflag) } template -void PairCDEAMOMP::eval(int iifrom, int iito, ThrData * const thr) +void PairEAMCDOMP::eval(int iifrom, int iito, ThrData * const thr) { int i,j,ii,jj,jnum,itype,jtype; double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair; @@ -534,10 +534,10 @@ void PairCDEAMOMP::eval(int iifrom, int iito, ThrData * const thr) /* ---------------------------------------------------------------------- */ -double PairCDEAMOMP::memory_usage() +double PairEAMCDOMP::memory_usage() { double bytes = memory_usage_thr(); - bytes += PairCDEAM::memory_usage(); + bytes += PairEAMCD::memory_usage(); return bytes; } diff --git a/src/USER-OMP/pair_cdeam_omp.h b/src/USER-OMP/pair_eam_cd_omp.h similarity index 71% rename from src/USER-OMP/pair_cdeam_omp.h rename to src/USER-OMP/pair_eam_cd_omp.h index 2839ab0ed0088166d9badea7a9b7df29aaa6ab49..d46a5383f5bc612799da71b27f15d0fd9afb911c 100644 --- a/src/USER-OMP/pair_cdeam_omp.h +++ b/src/USER-OMP/pair_eam_cd_omp.h @@ -17,23 +17,23 @@ #ifdef PAIR_CLASS -PairStyle(eam/cd/omp,PairCDEAM_OneSiteOMP) -PairStyle(eam/cd/old/omp,PairCDEAM_TwoSiteOMP) +PairStyle(eam/cd/omp,PairEAMCD_OneSiteOMP) +PairStyle(eam/cd/old/omp,PairEAMCD_TwoSiteOMP) #else -#ifndef LMP_PAIR_CDEAM_OMP_H -#define LMP_PAIR_CDEAM_OMP_H +#ifndef LMP_PAIR_EAM_CD_OMP_H +#define LMP_PAIR_EAM_CD_OMP_H -#include "pair_cdeam.h" +#include "pair_eam_cd.h" #include "thr_omp.h" namespace LAMMPS_NS { -class PairCDEAMOMP : public PairCDEAM, public ThrOMP { +class PairEAMCDOMP : public PairEAMCD, public ThrOMP { public: - PairCDEAMOMP(class LAMMPS *, int); + PairEAMCDOMP(class LAMMPS *, int); virtual void compute(int, int); virtual double memory_usage(); @@ -44,19 +44,19 @@ class PairCDEAMOMP : public PairCDEAM, public ThrOMP { }; /// The one-site concentration formulation of CD-EAM. - class PairCDEAM_OneSiteOMP : public PairCDEAMOMP + class PairEAMCD_OneSiteOMP : public PairEAMCDOMP { public: /// Constructor. - PairCDEAM_OneSiteOMP(class LAMMPS* lmp) : PairEAM(lmp), PairCDEAMOMP(lmp, 1) {} + PairEAMCD_OneSiteOMP(class LAMMPS* lmp) : PairEAM(lmp), PairEAMCDOMP(lmp, 1) {} }; /// The two-site concentration formulation of CD-EAM. - class PairCDEAM_TwoSiteOMP : public PairCDEAMOMP + class PairEAMCD_TwoSiteOMP : public PairEAMCDOMP { public: /// Constructor. - PairCDEAM_TwoSiteOMP(class LAMMPS* lmp) : PairEAM(lmp), PairCDEAMOMP(lmp, 2) {} + PairEAMCD_TwoSiteOMP(class LAMMPS* lmp) : PairEAM(lmp), PairEAMCDOMP(lmp, 2) {} }; } diff --git a/src/USER-OMP/pair_eam_fs_omp.cpp b/src/USER-OMP/pair_eam_fs_omp.cpp index a678c887a0726ce23d3c5e9468cf8e77581ae5af..17fecf9b4f1bf122d7f81642c8bfacdb8195c7ef 100644 --- a/src/USER-OMP/pair_eam_fs_omp.cpp +++ b/src/USER-OMP/pair_eam_fs_omp.cpp @@ -126,7 +126,7 @@ void PairEAMFSOMP::read_file(char *filename) fptr = force->open_potential(filename); if (fptr == NULL) { char str[128]; - sprintf(str,"Cannot open EAM potential file %s",filename); + snprintf(str,128,"Cannot open EAM potential file %s",filename); error->one(FLERR,str); } } diff --git a/src/USER-OMP/pair_nb3b_harmonic_omp.cpp b/src/USER-OMP/pair_nb3b_harmonic_omp.cpp deleted file mode 100644 index 2ab96c43a0c8d2e6c056365ea771f5a6392d7e30..0000000000000000000000000000000000000000 --- a/src/USER-OMP/pair_nb3b_harmonic_omp.cpp +++ /dev/null @@ -1,170 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - This software is distributed under the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- - Contributing author: Axel Kohlmeyer (Temple U) -------------------------------------------------------------------------- */ - -#include -#include "pair_nb3b_harmonic_omp.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" - -#include "suffix.h" -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -PairNb3bHarmonicOMP::PairNb3bHarmonicOMP(LAMMPS *lmp) : - PairNb3bHarmonic(lmp), ThrOMP(lmp, THR_PAIR) -{ - suffix_flag |= Suffix::OMP; - respa_enable = 0; -} - -/* ---------------------------------------------------------------------- */ - -void PairNb3bHarmonicOMP::compute(int eflag, int vflag) -{ - if (eflag || vflag) { - ev_setup(eflag,vflag); - } else evflag = vflag_fdotr = 0; - - const int nall = atom->nlocal + atom->nghost; - const int nthreads = comm->nthreads; - const int inum = list->inum; - -#if defined(_OPENMP) -#pragma omp parallel default(none) shared(eflag,vflag) -#endif - { - int ifrom, ito, tid; - - loop_setup_thr(ifrom, ito, tid, inum, nthreads); - ThrData *thr = fix->get_thr(tid); - thr->timer(Timer::START); - ev_setup_thr(eflag, vflag, nall, eatom, vatom, thr); - - if (evflag) { - if (eflag) { - eval<1,1>(ifrom, ito, thr); - } else { - eval<1,0>(ifrom, ito, thr); - } - } else eval<0,0>(ifrom, ito, thr); - - thr->timer(Timer::PAIR); - reduce_thr(this, eflag, vflag, thr); - } // end of omp parallel region -} - -template -void PairNb3bHarmonicOMP::eval(int iifrom, int iito, ThrData * const thr) -{ - int i,j,k,ii,jj,kk,jnum,jnumm1; - int itype,jtype,ktype,ijparam,ikparam,ijkparam; - double xtmp,ytmp,ztmp,evdwl; - double rsq1,rsq2; - double delr1[3],delr2[3],fj[3],fk[3]; - int *ilist,*jlist,*numneigh,**firstneigh; - - evdwl = 0.0; - - const dbl3_t * _noalias const x = (dbl3_t *) atom->x[0]; - dbl3_t * _noalias const f = (dbl3_t *) thr->get_f()[0]; - const int * _noalias const type = atom->type; - - ilist = list->ilist; - numneigh = list->numneigh; - firstneigh = list->firstneigh; - - double fxtmp,fytmp,fztmp; - - // loop over full neighbor list of my atoms - - for (ii = iifrom; ii < iito; ++ii) { - - i = ilist[ii]; - itype = map[type[i]]; - xtmp = x[i].x; - ytmp = x[i].y; - ztmp = x[i].z; - fxtmp = fytmp = fztmp = 0.0; - - // two-body interactions, skip half of them - - jlist = firstneigh[i]; - jnum = numneigh[i]; - jnumm1 = jnum - 1; - - for (jj = 0; jj < jnumm1; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - jtype = map[type[j]]; - ijparam = elem2param[itype][jtype][jtype]; - delr1[0] = x[j].x - xtmp; - delr1[1] = x[j].y - ytmp; - delr1[2] = x[j].z - ztmp; - rsq1 = delr1[0]*delr1[0] + delr1[1]*delr1[1] + delr1[2]*delr1[2]; - if (rsq1 > params[ijparam].cutsq) continue; - - double fjxtmp,fjytmp,fjztmp; - fjxtmp = fjytmp = fjztmp = 0.0; - - for (kk = jj+1; kk < jnum; kk++) { - k = jlist[kk]; - k &= NEIGHMASK; - ktype = map[type[k]]; - ikparam = elem2param[itype][ktype][ktype]; - ijkparam = elem2param[itype][jtype][ktype]; - - delr2[0] = x[k].x - xtmp; - delr2[1] = x[k].y - ytmp; - delr2[2] = x[k].z - ztmp; - rsq2 = delr2[0]*delr2[0] + delr2[1]*delr2[1] + delr2[2]*delr2[2]; - if (rsq2 > params[ikparam].cutsq) continue; - - threebody(¶ms[ijparam],¶ms[ikparam],¶ms[ijkparam], - rsq1,rsq2,delr1,delr2,fj,fk,EFLAG,evdwl); - - fxtmp -= fj[0] + fk[0]; - fytmp -= fj[1] + fk[1]; - fztmp -= fj[2] + fk[2]; - fjxtmp += fj[0]; - fjytmp += fj[1]; - fjztmp += fj[2]; - f[k].x += fk[0]; - f[k].y += fk[1]; - f[k].z += fk[2]; - - if (EVFLAG) ev_tally3_thr(this,i,j,k,evdwl,0.0,fj,fk,delr1,delr2,thr); - } - f[j].x += fjxtmp; - f[j].y += fjytmp; - f[j].z += fjztmp; - } - f[i].x += fxtmp; - f[i].y += fytmp; - f[i].z += fztmp; - } -} - -/* ---------------------------------------------------------------------- */ - -double PairNb3bHarmonicOMP::memory_usage() -{ - double bytes = memory_usage_thr(); - bytes += PairNb3bHarmonic::memory_usage(); - - return bytes; -} diff --git a/src/USER-OMP/pair_tersoff_zbl_omp.cpp b/src/USER-OMP/pair_tersoff_zbl_omp.cpp index ce3e6fea75320dcae3e5884df13a1b23efd8661f..096a42b1a8da87ac396e8ceb991af1dd858af07f 100644 --- a/src/USER-OMP/pair_tersoff_zbl_omp.cpp +++ b/src/USER-OMP/pair_tersoff_zbl_omp.cpp @@ -97,7 +97,7 @@ void PairTersoffZBLOMP::read_file(char *file) fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open Tersoff potential file %s",file); + snprintf(str,128,"Cannot open Tersoff potential file %s",file); error->one(FLERR,str); } } diff --git a/src/USER-PHONON/fix_phonon.cpp b/src/USER-PHONON/fix_phonon.cpp index 3a37c67a3871f1e044ba568e256c8c57a56620c8..cdbe4068bc9d96de79e52b02c4f6a09bacf5d23d 100644 --- a/src/USER-PHONON/fix_phonon.cpp +++ b/src/USER-PHONON/fix_phonon.cpp @@ -299,7 +299,7 @@ void FixPhonon::init() /* ---------------------------------------------------------------------- */ -void FixPhonon::setup(int flag) +void FixPhonon::setup(int /*flag*/) { // initialize accumulating variables for (int i = 0; i < sysdim; ++i) TempSum[i] = 0.; diff --git a/src/USER-PTM/LICENSE b/src/USER-PTM/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..dc1e0a5e7edd510aa8aaa9865ce08f5874fb8224 --- /dev/null +++ b/src/USER-PTM/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2016 PM Larsen + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/USER-PTM/compute_ptm_atom.cpp b/src/USER-PTM/compute_ptm_atom.cpp new file mode 100644 index 0000000000000000000000000000000000000000..eb0138de26c3165ac97c8111b19303d14151bbfc --- /dev/null +++ b/src/USER-PTM/compute_ptm_atom.cpp @@ -0,0 +1,307 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed +under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: PM Larsen (MIT) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include + +#include "atom.h" +#include "comm.h" +#include "compute_ptm_atom.h" +#include "error.h" +#include "force.h" +#include "memory.h" +#include "modify.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" +#include "pair.h" +#include "update.h" + +#include "ptm_functions.h" + +#define MAX_NEIGHBORS 30 +#define NUM_COLUMNS 7 +#define UNKNOWN 0 +#define OTHER 8 + +using namespace LAMMPS_NS; + +static const char cite_user_ptm_package[] = + "USER-PTM package:\n\n" + "@Article{larsen2016ptm,\n" + " author={Larsen, Peter Mahler and Schmidt, S{\\o}ren and Schi{\\o}tz, " + "Jakob},\n" + " title={Robust structural identification via polyhedral template " + "matching},\n" + " journal={Modelling~Simul.~Mater.~Sci.~Eng.},\n" + " year={2016},\n" + " number={5},\n" + " volume={24},\n" + " pages={055007},\n" + " DOI = {10.1088/0965-0393/24/5/055007}" + "}\n\n"; + +/* ---------------------------------------------------------------------- */ + +ComputePTMAtom::ComputePTMAtom(LAMMPS *lmp, int narg, char **arg) + : Compute(lmp, narg, arg), list(NULL), output(NULL) { + if (narg != 5) + error->all(FLERR, "Illegal compute ptm/atom command"); + + char *structures = arg[3]; + char *ptr = structures; + + const char *strings[] = {"fcc", "hcp", "bcc", "ico", "sc", + "dcub", "dhex", "all", "default"}; + int32_t flags[] = { + PTM_CHECK_FCC, + PTM_CHECK_HCP, + PTM_CHECK_BCC, + PTM_CHECK_ICO, + PTM_CHECK_SC, + PTM_CHECK_DCUB, + PTM_CHECK_DHEX, + PTM_CHECK_ALL, + PTM_CHECK_FCC | PTM_CHECK_HCP | PTM_CHECK_BCC | PTM_CHECK_ICO}; + + input_flags = 0; + while (*ptr != '\0') { + + bool found = false; + for (int i = 0; i < 9; i++) { + int len = strlen(strings[i]); + if (strncmp(ptr, strings[i], len) == 0) { + input_flags |= flags[i]; + ptr += len; + found = true; + break; + } + } + + if (!found) + error->all(FLERR, + "Illegal compute ptm/atom command (invalid structure type)"); + + if (*ptr == '\0') + break; + + if (*ptr != '-') + error->all(FLERR, + "Illegal compute ptm/atom command (invalid structure type)"); + + ptr++; + } + + double threshold = force->numeric(FLERR, arg[4]); + if (threshold < 0.0) + error->all(FLERR, + "Illegal compute ptm/atom command (threshold is negative)"); + rmsd_threshold = threshold; + if (rmsd_threshold == 0) + rmsd_threshold = INFINITY; + + peratom_flag = 1; + size_peratom_cols = NUM_COLUMNS; + create_attribute = 1; + nmax = 0; +} + +/* ---------------------------------------------------------------------- */ + +ComputePTMAtom::~ComputePTMAtom() { memory->destroy(output); } + +/* ---------------------------------------------------------------------- */ + +void ComputePTMAtom::init() { + if (force->pair == NULL) + error->all(FLERR, "Compute ptm/atom requires a pair style be defined"); + + int count = 0; + for (int i = 0; i < modify->ncompute; i++) + if (strcmp(modify->compute[i]->style, "ptm/atom") == 0) + count++; + if (count > 1 && comm->me == 0) + error->warning(FLERR, "More than one compute ptm/atom defined"); + + // need an occasional full neighbor list + + int irequest = neighbor->request(this, instance_me); + neighbor->requests[irequest]->pair = 0; + neighbor->requests[irequest]->compute = 1; + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + neighbor->requests[irequest]->occasional = 1; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePTMAtom::init_list(int id, NeighList *ptr) { list = ptr; } + +/* ---------------------------------------------------------------------- */ + +typedef struct { + int index; + double d; +} ptmnbr_t; + +static bool sorthelper_compare(ptmnbr_t const &a, ptmnbr_t const &b) { + return a.d < b.d; +} + +static int get_neighbors(double *pos, int jnum, int *jlist, double **x, + double (*nbr)[3]) { + + ptmnbr_t *nbr_order = new ptmnbr_t[jnum]; + + for (int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + j &= NEIGHMASK; + + double dx = pos[0] - x[j][0]; + double dy = pos[1] - x[j][1]; + double dz = pos[2] - x[j][2]; + double rsq = dx * dx + dy * dy + dz * dz; + + nbr_order[jj].index = j; + nbr_order[jj].d = rsq; + } + + std::sort(nbr_order, nbr_order + jnum, &sorthelper_compare); + int num_nbrs = std::min(MAX_NEIGHBORS, jnum); + + nbr[0][0] = nbr[0][1] = nbr[0][2] = 0; + for (int jj = 0; jj < num_nbrs; jj++) { + + int j = nbr_order[jj].index; + nbr[jj + 1][0] = x[j][0] - pos[0]; + nbr[jj + 1][1] = x[j][1] - pos[1]; + nbr[jj + 1][2] = x[j][2] - pos[2]; + } + + delete[] nbr_order; + return num_nbrs; +} + +void ComputePTMAtom::compute_peratom() { + // PTM global initialization. If already initialized this function does + // nothing. + ptm_initialize_global(); + + // initialize PTM local storage + ptm_local_handle_t local_handle = ptm_initialize_local(); + + invoked_peratom = update->ntimestep; + + // grow arrays if necessary + if (atom->nmax > nmax) { + memory->destroy(output); + nmax = atom->nmax; + + memory->create(output, nmax, NUM_COLUMNS, "ptm:ptm_output"); + array_atom = output; + } + + // invoke full neighbor list (will copy or build if necessary) + neighbor->build_one(list); + + int inum = list->inum; + int *ilist = list->ilist; + int *numneigh = list->numneigh; + int **firstneigh = list->firstneigh; + + double **x = atom->x; + int *mask = atom->mask; + int nlocal = atom->nlocal; + + for (int ii = 0; ii < inum; ii++) { + + int i = ilist[ii]; + output[i][0] = UNKNOWN; + if (!(mask[i] & groupbit)) + continue; + + double *pos = x[i]; + + int *jlist = firstneigh[i]; + int jnum = numneigh[i]; + if (jnum <= 0) + continue; + + // get neighbours ordered by increasing distance + double nbr[MAX_NEIGHBORS + 1][3]; + int num_nbrs = get_neighbors(pos, jnum, jlist, x, nbr); + + // check that we have enough neighbours for the desired structure types + int32_t flags = 0; + if (num_nbrs >= PTM_NUM_NBRS_SC && (input_flags & PTM_CHECK_SC)) + flags |= PTM_CHECK_SC; + if (num_nbrs >= PTM_NUM_NBRS_FCC && (input_flags & PTM_CHECK_FCC)) + flags |= PTM_CHECK_FCC; + if (num_nbrs >= PTM_NUM_NBRS_HCP && (input_flags & PTM_CHECK_HCP)) + flags |= PTM_CHECK_HCP; + if (num_nbrs >= PTM_NUM_NBRS_ICO && (input_flags & PTM_CHECK_ICO)) + flags |= PTM_CHECK_ICO; + if (num_nbrs >= PTM_NUM_NBRS_BCC && (input_flags & PTM_CHECK_BCC)) + flags |= PTM_CHECK_BCC; + if (num_nbrs >= PTM_NUM_NBRS_DCUB && (input_flags & PTM_CHECK_DCUB)) + flags |= PTM_CHECK_DCUB; + if (num_nbrs >= PTM_NUM_NBRS_DHEX && (input_flags & PTM_CHECK_DHEX)) + flags |= PTM_CHECK_DHEX; + + // now run PTM + int8_t mapping[MAX_NEIGHBORS + 1]; + int32_t type, alloy_type; + double scale, rmsd, interatomic_distance, lattice_constant; + double q[4], F[9], F_res[3], U[9], P[9]; + ptm_index(local_handle, flags, num_nbrs + 1, nbr, NULL, true, &type, + &alloy_type, &scale, &rmsd, q, F, F_res, U, P, mapping, + &interatomic_distance, &lattice_constant); + + if (rmsd > rmsd_threshold) { + type = PTM_MATCH_NONE; + } + + // printf("%d type=%d rmsd=%f\n", i, type, rmsd); + + if (type == PTM_MATCH_NONE) + type = OTHER; + + output[i][0] = type; + output[i][1] = rmsd; + output[i][2] = interatomic_distance; + output[i][3] = q[0]; + output[i][4] = q[1]; + output[i][5] = q[2]; + output[i][6] = q[3]; + } + + // printf("finished ptm analysis\n"); + ptm_uninitialize_local(local_handle); +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based array +------------------------------------------------------------------------- */ + +double ComputePTMAtom::memory_usage() { + double bytes = nmax * NUM_COLUMNS * sizeof(double); + bytes += nmax * sizeof(double); + return bytes; +} diff --git a/src/USER-OMP/pair_nb3b_harmonic_omp.h b/src/USER-PTM/compute_ptm_atom.h similarity index 50% rename from src/USER-OMP/pair_nb3b_harmonic_omp.h rename to src/USER-PTM/compute_ptm_atom.h index 6b8fbd8897ddb16169b767d1dbbd65daf45f8f05..5c10e0c44322776e1486f10d2376dafca26e715d 100644 --- a/src/USER-OMP/pair_nb3b_harmonic_omp.h +++ b/src/USER-PTM/compute_ptm_atom.h @@ -11,39 +11,38 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -/* ---------------------------------------------------------------------- - Contributing author: Axel Kohlmeyer (Temple U) -------------------------------------------------------------------------- */ - -#ifdef PAIR_CLASS +#ifdef COMPUTE_CLASS -//PairStyle(nb3b/harmonic/omp,PairNb3bHarmonicOMP) -PairStyle(disabled,PairNb3bHarmonicOMP) +ComputeStyle(ptm/atom,ComputePTMAtom) #else -#ifndef LMP_PAIR_NB3BHARMONIC_OMP_H -#define LMP_PAIR_NB3BHARMONIC_OMP_H +#ifndef LMP_COMPUTE_PTM_ATOM_H +#define LMP_COMPUTE_PTM_ATOM_H -#include "pair_nb3b_harmonic.h" -#include "thr_omp.h" +#include "compute.h" namespace LAMMPS_NS { -class PairNb3bHarmonicOMP : public PairNb3bHarmonic, public ThrOMP { - +class ComputePTMAtom : public Compute { public: - PairNb3bHarmonicOMP(class LAMMPS *); - - virtual void compute(int, int); - virtual double memory_usage(); + ComputePTMAtom(class LAMMPS *, int, char **); + ~ComputePTMAtom(); + void init(); + void init_list(int, class NeighList *); + void compute_peratom(); + double memory_usage(); private: - template - void eval(int ifrom, int ito, ThrData * const thr); + int nmax; + int32_t input_flags; + double rmsd_threshold; + class NeighList *list; + double **output; }; } #endif #endif + diff --git a/src/USER-PTM/ptm_alloy_types.cpp b/src/USER-PTM/ptm_alloy_types.cpp new file mode 100644 index 0000000000000000000000000000000000000000..151de3e5b852438e93c977154d80c8da0b9e7199 --- /dev/null +++ b/src/USER-PTM/ptm_alloy_types.cpp @@ -0,0 +1,104 @@ +#include +#include "ptm_constants.h" +#include "ptm_initialize_data.h" + +namespace ptm { + +#define NUM_ALLOY_TYPES 3 +static uint32_t typedata[NUM_ALLOY_TYPES][3] = { + {PTM_MATCH_FCC, PTM_ALLOY_L10, 0x000001fe}, + {PTM_MATCH_FCC, PTM_ALLOY_L12_CU, 0x0000001e}, + {PTM_MATCH_FCC, PTM_ALLOY_L12_AU, 0x00001ffe}, +}; + +static bool test_pure(int num_nbrs, int32_t* numbers) +{ + for (int i=1;inum_nbrs+1;i++) + binary[i] = numbers[mapping[i]] == numbers[0] ? 0 : 1; + + for (int i=1;inum_nbrs+1;i++) + if (binary[i] != binary[0]) + return false; + + return true; +} + +static int32_t canonical_alloy_representation(const refdata_t* ref, int8_t* mapping, int32_t* numbers) +{ + int8_t binary[PTM_MAX_POINTS]; + for (int i=0;inum_nbrs+1;i++) + binary[i] = numbers[mapping[i]] == numbers[0] ? 0 : 1; + + int8_t temp[PTM_MAX_POINTS]; + uint32_t best = 0xFFFFFFFF; + for (int j=0;jnum_mappings;j++) + { + for (int i=0;inum_nbrs+1;i++) + temp[ref->mapping[j][i]] = binary[i]; + + uint32_t code = 0; + for (int i=0;inum_nbrs+1;i++) + code |= (temp[i] << i); + + best = std::min(best, code); + } + + return best; +} + +int32_t find_alloy_type(const refdata_t* ref, int8_t* mapping, int32_t* numbers) +{ + if (test_pure(ref->num_nbrs, numbers)) + return PTM_ALLOY_PURE; + + if (!test_binary(ref->num_nbrs, numbers)) + return PTM_ALLOY_NONE; + + uint32_t code = canonical_alloy_representation(ref, mapping, numbers); + for (int i=0;itype == typedata[i][0] && code == typedata[i][2]) + return typedata[i][1]; + + if (ref->type == PTM_MATCH_BCC) + if (test_shell_structure(ref, mapping, numbers, 8)) + return PTM_ALLOY_B2; + + if (ref->type == PTM_MATCH_DCUB || ref->type == PTM_MATCH_DHEX) + if (test_shell_structure(ref, mapping, numbers, 4)) + return PTM_ALLOY_SIC; + + return PTM_ALLOY_NONE; +} + +} + diff --git a/src/USER-PTM/ptm_alloy_types.h b/src/USER-PTM/ptm_alloy_types.h new file mode 100644 index 0000000000000000000000000000000000000000..559e0a749048651dfba7d9036e9b31b6b3281503 --- /dev/null +++ b/src/USER-PTM/ptm_alloy_types.h @@ -0,0 +1,13 @@ +#ifndef PTM_ALLOY_TYPES_H +#define PTM_ALLOY_TYPES_H + +#include "ptm_initialize_data.h" + +namespace ptm { + +int32_t find_alloy_type(const refdata_t* ref, int8_t* mapping, int32_t* numbers); + +} + +#endif + diff --git a/src/USER-PTM/ptm_canonical_coloured.cpp b/src/USER-PTM/ptm_canonical_coloured.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ade8f23b15f7cbb3023de9acba4afef8f17d9dca --- /dev/null +++ b/src/USER-PTM/ptm_canonical_coloured.cpp @@ -0,0 +1,170 @@ +#include +#include +#include +#include "ptm_graph_tools.h" +#include "ptm_constants.h" + +namespace ptm { + +static bool weinberg_coloured(int num_nodes, int num_edges, int8_t common[PTM_MAX_NBRS][PTM_MAX_NBRS], int8_t* colours, int8_t* best_code, int8_t* canonical_labelling, int a, int b) +{ + bool m[PTM_MAX_NBRS][PTM_MAX_NBRS]; + memset(m, 0, sizeof(bool) * PTM_MAX_NBRS * PTM_MAX_NBRS); + + int8_t index[PTM_MAX_NBRS]; + memset(index, -1, sizeof(int8_t) * PTM_MAX_NBRS); + + + int n = 0; + index[a] = colours[a] * num_nodes + n++; + if (index[a] > best_code[0]) + return false; + + bool winning = false; + if (index[a] < best_code[0]) + { + best_code[0] = index[a]; + winning = true; + } + + int c = -1; + for (int it=1;it<2*num_edges;it++) + { + bool newvertex = index[b] == -1; + + if (newvertex) + index[b] = colours[b] * num_nodes + n++; + + if (!winning && index[b] > best_code[it]) + return false; + + if (winning || index[b] < best_code[it]) + { + winning = true; + best_code[it] = index[b]; + } + + if (newvertex) + { + //When a new vertex is reached, take the right-most edge + //relative to the edge on which the vertex is reached. + + c = common[a][b]; + } + else if (m[b][a] == false) + { + //When an old vertex is reached on a new path, go back + //in the opposite direction. + + c = a; + } + else + { + //When an old vertex is reached on an old path, leave the + //vertex on the right-most edge that has not previously + //been traversed in that direction. + + c = common[a][b]; + while (m[b][c] == true) + c = common[c][b]; + } + + m[a][b] = true; + a = b; + b = c; + } + + if (winning) + { + memcpy(canonical_labelling, index, sizeof(int8_t) * num_nodes); + return true; + } + + return false; +} + +int canonical_form_coloured(int num_facets, int8_t facets[][3], int num_nodes, int8_t* degree, int8_t* colours, int8_t* canonical_labelling, int8_t* best_code, uint64_t* p_hash) +{ + int8_t common[PTM_MAX_NBRS][PTM_MAX_NBRS] = {{0}}; + int num_edges = 3 * num_facets / 2; + if (!build_facet_map(num_facets, facets, common)) + return -1; + + memset(best_code, SCHAR_MAX, sizeof(int8_t) * 2 * PTM_MAX_EDGES); + + bool equal = true; + for (int i = 1;i=0;i--) + canonical_labelling[i+1] = (canonical_labelling[i] % num_nodes) + 1; + canonical_labelling[0] = 0; + + uint64_t hash = 0; + for (int i = 0;i<2 * num_edges;i++) + { + uint64_t e = best_code[i]; + e += i % 8; + e &= 0xF; + e <<= (4 * i) % 64; + hash ^= e; + } + + *p_hash = hash; + return PTM_NO_ERROR; +} + +} + diff --git a/src/USER-PTM/ptm_canonical_coloured.h b/src/USER-PTM/ptm_canonical_coloured.h new file mode 100644 index 0000000000000000000000000000000000000000..f8e2a7af5db08031ccafacfdc0d9244fb9e3fbdb --- /dev/null +++ b/src/USER-PTM/ptm_canonical_coloured.h @@ -0,0 +1,12 @@ +#ifndef PTM_CANONICAL_COLOURED_H +#define PTM_CANONICAL_COLOURED_H + +#include + +namespace ptm { + +int canonical_form_coloured(int num_facets, int8_t facets[][3], int num_nodes, int8_t* degree, int8_t* colours, int8_t* canonical_labelling, int8_t* best_code, uint64_t* p_hash); +} + +#endif + diff --git a/src/USER-PTM/ptm_constants.h b/src/USER-PTM/ptm_constants.h new file mode 100644 index 0000000000000000000000000000000000000000..f868f51e843baf604f3f034fb3e447560bd4ac49 --- /dev/null +++ b/src/USER-PTM/ptm_constants.h @@ -0,0 +1,174 @@ +#ifndef PTM_CONSTANTS_H +#define PTM_CONSTANTS_H + +//------------------------------------ +// definitions +//------------------------------------ +#define PTM_NO_ERROR 0 + + +#define PTM_CHECK_FCC (1 << 0) +#define PTM_CHECK_HCP (1 << 1) +#define PTM_CHECK_BCC (1 << 2) +#define PTM_CHECK_ICO (1 << 3) +#define PTM_CHECK_SC (1 << 4) +#define PTM_CHECK_DCUB (1 << 5) +#define PTM_CHECK_DHEX (1 << 6) +#define PTM_CHECK_NONDIAMOND (PTM_CHECK_SC | PTM_CHECK_FCC | PTM_CHECK_HCP | PTM_CHECK_ICO | PTM_CHECK_BCC) +#define PTM_CHECK_ALL (PTM_CHECK_SC | PTM_CHECK_FCC | PTM_CHECK_HCP | PTM_CHECK_ICO | PTM_CHECK_BCC | PTM_CHECK_DCUB | PTM_CHECK_DHEX) + +#define PTM_MATCH_NONE 0 +#define PTM_MATCH_FCC 1 +#define PTM_MATCH_HCP 2 +#define PTM_MATCH_BCC 3 +#define PTM_MATCH_ICO 4 +#define PTM_MATCH_SC 5 +#define PTM_MATCH_DCUB 6 +#define PTM_MATCH_DHEX 7 + +#define PTM_ALLOY_NONE 0 +#define PTM_ALLOY_PURE 1 +#define PTM_ALLOY_L10 2 +#define PTM_ALLOY_L12_CU 3 +#define PTM_ALLOY_L12_AU 4 +#define PTM_ALLOY_B2 5 +#define PTM_ALLOY_SIC 6 + + +#define PTM_MAX_INPUT_POINTS 35 +#define PTM_MAX_NBRS 16 +#define PTM_MAX_POINTS (PTM_MAX_NBRS + 1) +#define PTM_MAX_FACETS 28 //2 * PTM_MAX_NBRS - 4 +#define PTM_MAX_EDGES 42 //3 * PTM_MAX_NBRS - 6 + + +//------------------------------------ +// number of neighbours +//------------------------------------ +#define PTM_NUM_NBRS_FCC 12 +#define PTM_NUM_NBRS_HCP 12 +#define PTM_NUM_NBRS_BCC 14 +#define PTM_NUM_NBRS_ICO 12 +#define PTM_NUM_NBRS_SC 6 +#define PTM_NUM_NBRS_DCUB 16 +#define PTM_NUM_NBRS_DHEX 16 + +#define PTM_NUM_POINTS_FCC (PTM_NUM_NBRS_FCC + 1) +#define PTM_NUM_POINTS_HCP (PTM_NUM_NBRS_HCP + 1) +#define PTM_NUM_POINTS_BCC (PTM_NUM_NBRS_BCC + 1) +#define PTM_NUM_POINTS_ICO (PTM_NUM_NBRS_ICO + 1) +#define PTM_NUM_POINTS_SC (PTM_NUM_NBRS_SC + 1) +#define PTM_NUM_POINTS_DCUB (PTM_NUM_NBRS_DCUB + 1) +#define PTM_NUM_POINTS_DHEX (PTM_NUM_NBRS_DHEX + 1) + +const int ptm_num_nbrs[8] = {0, PTM_NUM_NBRS_FCC, PTM_NUM_NBRS_HCP, PTM_NUM_NBRS_BCC, PTM_NUM_NBRS_ICO, PTM_NUM_NBRS_SC, PTM_NUM_NBRS_DCUB, PTM_NUM_NBRS_DHEX}; + +//------------------------------------ +// template structures +//------------------------------------ + +//these point sets have barycentre {0, 0, 0} and are scaled such that the mean neighbour distance is 1 + +const double ptm_template_fcc[PTM_NUM_POINTS_FCC][3] = { { 0. , 0. , 0. }, + { 0. , 0.707106781187, 0.707106781187 }, + { 0. , -0.707106781187, -0.707106781187 }, + { 0. , 0.707106781187, -0.707106781187 }, + { 0. , -0.707106781187, 0.707106781187 }, + { 0.707106781187, 0. , 0.707106781187 }, + { -0.707106781187, 0. , -0.707106781187 }, + { 0.707106781187, 0. , -0.707106781187 }, + { -0.707106781187, 0. , 0.707106781187 }, + { 0.707106781187, 0.707106781187, 0. }, + { -0.707106781187, -0.707106781187, 0. }, + { 0.707106781187, -0.707106781187, 0. }, + { -0.707106781187, 0.707106781187, 0. } }; + +const double ptm_template_hcp[PTM_NUM_POINTS_HCP][3] = { { 0. , 0. , 0. }, + { 0.707106781186, 0. , 0.707106781186 }, + { -0.235702260395, -0.942809041583, -0.235702260395 }, + { 0.707106781186, 0.707106781186, 0. }, + { -0.235702260395, -0.235702260395, -0.942809041583 }, + { 0. , 0.707106781186, 0.707106781186 }, + { -0.942809041583, -0.235702260395, -0.235702260395 }, + { -0.707106781186, 0.707106781186, 0. }, + { 0. , 0.707106781186, -0.707106781186 }, + { 0.707106781186, 0. , -0.707106781186 }, + { 0.707106781186, -0.707106781186, 0. }, + { -0.707106781186, 0. , 0.707106781186 }, + { 0. , -0.707106781186, 0.707106781186 } }; + +const double ptm_template_bcc[PTM_NUM_POINTS_BCC][3] = { { 0. , 0. , 0. }, + { -0.541451884327, -0.541451884327, -0.541451884327 }, + { 0.541451884327, 0.541451884327, 0.541451884327 }, + { 0.541451884327, -0.541451884327, -0.541451884327 }, + { -0.541451884327, 0.541451884327, 0.541451884327 }, + { -0.541451884327, 0.541451884327, -0.541451884327 }, + { 0.541451884327, -0.541451884327, 0.541451884327 }, + { -0.541451884327, -0.541451884327, 0.541451884327 }, + { 0.541451884327, 0.541451884327, -0.541451884327 }, + { 0. , 0. , -1.082903768655 }, + { 0. , 0. , 1.082903768655 }, + { 0. , -1.082903768655, 0. }, + { 0. , 1.082903768655, 0. }, + { -1.082903768655, 0. , 0. }, + { 1.082903768655, 0. , 0. } }; + +const double ptm_template_ico[PTM_NUM_POINTS_ICO][3] = { { 0. , 0. , 0. }, + { 0. , 0.525731112119, 0.850650808352 }, + { 0. , -0.525731112119, -0.850650808352 }, + { 0. , 0.525731112119, -0.850650808352 }, + { 0. , -0.525731112119, 0.850650808352 }, + { -0.525731112119, -0.850650808352, 0. }, + { 0.525731112119, 0.850650808352, 0. }, + { 0.525731112119, -0.850650808352, 0. }, + { -0.525731112119, 0.850650808352, 0. }, + { -0.850650808352, 0. , -0.525731112119 }, + { 0.850650808352, 0. , 0.525731112119 }, + { 0.850650808352, 0. , -0.525731112119 }, + { -0.850650808352, 0. , 0.525731112119 } }; + +const double ptm_template_sc[PTM_NUM_POINTS_SC][3] = { { 0. , 0. , 0. }, + { 0. , 0. , -1. }, + { 0. , 0. , 1. }, + { 0. , -1. , 0. }, + { 0. , 1. , 0. }, + { -1. , 0. , 0. }, + { 1. , 0. , 0. } }; + +const double ptm_template_dcub[PTM_NUM_POINTS_DCUB][3] = { { 0. , 0. , 0. }, + { -0.391491627053, 0.391491627053, 0.391491627053 }, + { -0.391491627053, -0.391491627053, -0.391491627053 }, + { 0.391491627053, -0.391491627053, 0.391491627053 }, + { 0.391491627053, 0.391491627053, -0.391491627053 }, + { -0.782983254107, 0. , 0.782983254107 }, + { -0.782983254107, 0.782983254107, 0. }, + { 0. , 0.782983254107, 0.782983254107 }, + { -0.782983254107, -0.782983254107, 0. }, + { -0.782983254107, 0. , -0.782983254107 }, + { 0. , -0.782983254107, -0.782983254107 }, + { 0. , -0.782983254107, 0.782983254107 }, + { 0.782983254107, -0.782983254107, 0. }, + { 0.782983254107, 0. , 0.782983254107 }, + { 0. , 0.782983254107, -0.782983254107 }, + { 0.782983254107, 0. , -0.782983254107 }, + { 0.782983254107, 0.782983254107, 0. } }; + +const double ptm_template_dhex[PTM_NUM_POINTS_DHEX][3] = { { 0. , 0. , 0. }, + { -0.391491627053, -0.391491627053, -0.391491627053 }, + { 0.391491627053, -0.391491627053, 0.391491627053 }, + { -0.391491627053, 0.391491627053, 0.391491627053 }, + { 0.391491627053, 0.391491627053, -0.391491627053 }, + { -0.260994418036, -1.043977672142, -0.260994418036 }, + { -1.043977672142, -0.260994418036, -0.260994418036 }, + { -0.260994418036, -0.260994418036, -1.043977672142 }, + { 0.782983254107, 0. , 0.782983254107 }, + { 0.782983254107, -0.782983254107, 0. }, + { 0. , -0.782983254107, 0.782983254107 }, + { 0. , 0.782983254107, 0.782983254107 }, + { -0.782983254107, 0.782983254107, 0. }, + { -0.782983254107, 0. , 0.782983254107 }, + { 0.782983254107, 0.782983254107, 0. }, + { 0. , 0.782983254107, -0.782983254107 }, + { 0.782983254107, 0. , -0.782983254107 } }; +#endif + diff --git a/src/USER-PTM/ptm_convex_hull_incremental.cpp b/src/USER-PTM/ptm_convex_hull_incremental.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7c79fd371a532f1c20b9d21767b011d60e4d0849 --- /dev/null +++ b/src/USER-PTM/ptm_convex_hull_incremental.cpp @@ -0,0 +1,366 @@ +#include +#include +#include +#include +#include +#include "ptm_convex_hull_incremental.h" +#include "ptm_constants.h" + +namespace ptm { + +#define VISIBLE 1 +#define INVISIBLE 2 +#define BOTH 3 +#define TOLERANCE 1E-8 + +static double norm_squared(double* p) +{ + double x = p[0]; + double y = p[1]; + double z = p[2]; + + return x*x + y*y + z*z; +} + +static double dot_product(const double* a, const double* b) +{ + return a[0]*b[0] + a[1]*b[1] + a[2]*b[2]; +} + +static void cross_product(double* a, double* b, double* c) +{ + c[0] = a[1] * b[2] - a[2] * b[1]; + c[1] = a[2] * b[0] - a[0] * b[2]; + c[2] = a[0] * b[1] - a[1] * b[0]; +} + +static void calculate_plane_normal(const double (*points)[3], int a, int b, int c, double* plane_normal) +{ + double u[3] = { points[b][0] - points[a][0], + points[b][1] - points[a][1], + points[b][2] - points[a][2] }; + + double v[3] = { points[c][0] - points[a][0], + points[c][1] - points[a][1], + points[c][2] - points[a][2] }; + + cross_product(u, v, plane_normal); + double norm = sqrt(norm_squared(plane_normal)); + plane_normal[0] /= norm; + plane_normal[1] /= norm; + plane_normal[2] /= norm; +} + +static double point_plane_distance(const double* w, const double* plane_point, const double* plane_cross) +{ + return plane_cross[0] * (plane_point[0] - w[0]) + + plane_cross[1] * (plane_point[1] - w[1]) + + plane_cross[2] * (plane_point[2] - w[2]); +} + +static bool calc_max_extent(int num_points, const double (*points)[3], int* min_index, int* max_index) +{ + for (int j=0;j<3;j++) + { + double dmin = DBL_MAX, dmax = -DBL_MAX; + int imin = 0, imax = 0; + + for (int i = 0;i dmax) + { + dmax = d; + imax = i; + } + } + + if (imin == imax) + return false; //degenerate point set + + min_index[j] = imin; + max_index[j] = imax; + } + + return true; +} + +static bool find_third_point(int num_points, const double (*points)[3], int a, int b, int* p_c) +{ + const double* x1 = points[a]; + const double* x2 = points[b]; + + double x2x1[3] = {x2[0] - x1[0], x2[1] - x1[1], x2[2] - x1[2]}; + double ns_x2x1 = norm_squared(x2x1); + + int bi = -1; + double max_dist = 0.0; + for (int i = 0;i max_dist) + { + max_dist = dist; + bi = i; + } + } + + *p_c = bi; + return max_dist > TOLERANCE; +} + +static bool find_fourth_point(int num_points, const double (*points)[3], int a, int b, int c, int* p_d) +{ + double plane_normal[3]; + calculate_plane_normal(points, a, b, c, plane_normal); + + + int bi = -1; + double max_dist = 0.0; + for (int i = 0;i max_dist) + { + max_dist = dist; + bi = i; + } + } + + *p_d = bi; + return max_dist > TOLERANCE; +} + +static int initial_simplex(int num_points, const double (*points)[3], int* initial_vertices) +{ + int min_index[3] = {0}; + int max_index[3] = {0}; + if (!calc_max_extent(num_points, points, min_index, max_index)) + return -1; + + int bi = -1; + double max_dist = 0.0; + for (int i = 0;i<3;i++) + { + int a = min_index[i], b = max_index[i]; + double delta[3] = { points[a][0] - points[b][0], + points[a][1] - points[b][1], + points[a][2] - points[b][2] }; + double dist = norm_squared(delta); + if (dist > max_dist) + { + bi = i; + max_dist = dist; + } + } + + //first two points are (a, b) + int a = min_index[bi], b = max_index[bi], c = -1, d = -1; + + if (!find_third_point(num_points, points, a, b, &c)) + return -2; + + if (!find_fourth_point(num_points, points, a, b, c, &d)) + return -3; + + initial_vertices[0] = a; + initial_vertices[1] = b; + initial_vertices[2] = c; + initial_vertices[3] = d; + return 0; +} + +static bool visible(const double* w, const double* plane_point, const double* plane_normal) +{ + return point_plane_distance(w, plane_point, plane_normal) > 0; +} + +void add_facet(const double (*points)[3], int a, int b, int c, int8_t* facet, double* plane_normal, double* barycentre) +{ + calculate_plane_normal(points, a, b, c, plane_normal); + if (visible(barycentre, points[a], plane_normal)) + { + plane_normal[0] = -plane_normal[0]; + plane_normal[1] = -plane_normal[1]; + plane_normal[2] = -plane_normal[2]; + + facet[0] = b; + facet[1] = a; + facet[2] = c; + } + else + { + facet[0] = a; + facet[1] = b; + facet[2] = c; + } +} + +static int initialize_convex_hull(int num_points, const double (*points)[3], int8_t facets[][3], double plane_normal[][3], bool* processed, int* initial_vertices, double* barycentre) +{ + memset(processed, 0, PTM_MAX_POINTS * sizeof(bool)); + memset(barycentre, 0, 3 * sizeof(double)); + int ret = initial_simplex(num_points, points, initial_vertices); + if (ret != 0) + return ret; + + for (int i = 0;i<4;i++) + { + int a = initial_vertices[i]; + processed[a] = true; + + barycentre[0] += points[a][0]; + barycentre[1] += points[a][1]; + barycentre[2] += points[a][2]; + } + barycentre[0] /= 4; + barycentre[1] /= 4; + barycentre[2] /= 4; + + add_facet(points, initial_vertices[0], initial_vertices[1], initial_vertices[2], facets[0], plane_normal[0], barycentre); + add_facet(points, initial_vertices[0], initial_vertices[1], initial_vertices[3], facets[1], plane_normal[1], barycentre); + add_facet(points, initial_vertices[0], initial_vertices[2], initial_vertices[3], facets[2], plane_normal[2], barycentre); + add_facet(points, initial_vertices[1], initial_vertices[2], initial_vertices[3], facets[3], plane_normal[3], barycentre); + return 0; +} + +int get_convex_hull(int num_points, const double (*points)[3], convexhull_t* ch, int8_t simplex[][3]) +{ + assert( num_points == PTM_NUM_POINTS_FCC + || num_points == PTM_NUM_POINTS_HCP + || num_points == PTM_NUM_POINTS_BCC + || num_points == PTM_NUM_POINTS_ICO + || num_points == PTM_NUM_POINTS_SC + || num_points == PTM_NUM_POINTS_DCUB + || num_points == PTM_NUM_POINTS_DHEX); + + int ret = 0; + int num_prev = ch->num_prev; + ch->num_prev = num_points; + if (!ch->ok || 0) + { + ret = initialize_convex_hull(num_points, points, ch->facets, ch->plane_normal, ch->processed, ch->initial_vertices, ch->barycentre); + if (ret != 0) + return ret; + + ch->num_facets = 4; + num_prev = 0; + } + + for (int i = num_prev;iprocessed[i]) + continue; + ch->processed[i] = true; + + int num_to_add = 0; + int8_t to_add[PTM_MAX_FACETS][3]; + int8_t edge_visible[PTM_MAX_POINTS][PTM_MAX_POINTS]; + memset(edge_visible, 0, sizeof(int8_t) * PTM_MAX_POINTS * PTM_MAX_POINTS); + for (int j = 0;jnum_facets;j++) + { + int a = ch->facets[j][0]; + int b = ch->facets[j][1]; + int c = ch->facets[j][2]; + + int u = 0, v = 0, w = 0; + + double distance = point_plane_distance(points[i], points[a], ch->plane_normal[j]); + bool vis = distance > TOLERANCE; + if (vis) + { + u = edge_visible[a][b] |= VISIBLE; + edge_visible[b][a] |= VISIBLE; + + v = edge_visible[b][c] |= VISIBLE; + edge_visible[c][b] |= VISIBLE; + + w = edge_visible[c][a] |= VISIBLE; + edge_visible[a][c] |= VISIBLE; + + memcpy(ch->facets[j], ch->facets[ch->num_facets-1], 3 * sizeof(int8_t)); + memcpy(ch->plane_normal[j], ch->plane_normal[ch->num_facets-1], 3 * sizeof(double)); + ch->num_facets--; + j--; + } + else + { + u = edge_visible[a][b] |= INVISIBLE; + edge_visible[b][a] |= INVISIBLE; + + v = edge_visible[b][c] |= INVISIBLE; + edge_visible[c][b] |= INVISIBLE; + + w = edge_visible[c][a] |= INVISIBLE; + edge_visible[a][c] |= INVISIBLE; + } + + if (u == BOTH) + { + to_add[num_to_add][0] = i; + to_add[num_to_add][1] = a; + to_add[num_to_add][2] = b; + num_to_add++; + } + + if (v == BOTH) + { + to_add[num_to_add][0] = i; + to_add[num_to_add][1] = b; + to_add[num_to_add][2] = c; + num_to_add++; + } + + if (w == BOTH) + { + to_add[num_to_add][0] = i; + to_add[num_to_add][1] = c; + to_add[num_to_add][2] = a; + num_to_add++; + } + } + + for (int j = 0;jnum_facets >= PTM_MAX_FACETS) + return -4; + + add_facet(points, to_add[j][0], to_add[j][1], to_add[j][2], ch->facets[ch->num_facets], ch->plane_normal[ch->num_facets], ch->barycentre); ch->num_facets++; + } + } + + for (int i=0;inum_facets;i++) + { + int a = ch->facets[i][0]; + int b = ch->facets[i][1]; + int c = ch->facets[i][2]; + if (a == 0 || b == 0 || c == 0) + return 1; //central atom contained in convex hull + + simplex[i][0] = a - 1; + simplex[i][1] = b - 1; + simplex[i][2] = c - 1; + } + + return ret; +} + +} + diff --git a/src/USER-PTM/ptm_convex_hull_incremental.h b/src/USER-PTM/ptm_convex_hull_incremental.h new file mode 100644 index 0000000000000000000000000000000000000000..6474723907086652d084d8914a63fbea799650e2 --- /dev/null +++ b/src/USER-PTM/ptm_convex_hull_incremental.h @@ -0,0 +1,30 @@ +#ifndef PTM_CONVEX_HULL_INCREMENTAL_H +#define PTM_CONVEX_HULL_INCREMENTAL_H + + +#include +#include +#include "ptm_constants.h" + +namespace ptm { + +typedef struct +{ + int8_t facets[PTM_MAX_FACETS][3]; + double plane_normal[PTM_MAX_FACETS][3]; + bool processed[PTM_MAX_POINTS]; + int initial_vertices[4]; + double barycentre[3]; + int num_facets; + int num_prev; + bool ok; + +} convexhull_t; + +void add_facet(const double (*points)[3], int a, int b, int c, int8_t* facet, double* plane_normal, double* barycentre); +int get_convex_hull(int num_points, const double (*points)[3], convexhull_t* ch, int8_t simplex[][3]); + +} + +#endif + diff --git a/src/USER-PTM/ptm_deformation_gradient.cpp b/src/USER-PTM/ptm_deformation_gradient.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fc851920a6854f8dfeeb7ae59215567644ba111c --- /dev/null +++ b/src/USER-PTM/ptm_deformation_gradient.cpp @@ -0,0 +1,40 @@ +#include "ptm_deformation_gradient.h" + +namespace ptm { + +void calculate_deformation_gradient(int num_points, const double (*ideal_points)[3], int8_t* mapping, double (*normalized)[3], const double (*penrose)[3], double* F, double* res) +{ + for (int i = 0;i<3;i++) + { + for (int j = 0;j<3;j++) + { + double acc = 0.0; + for (int k = 0;k +#include "ptm_constants.h" + +namespace ptm { + +void calculate_deformation_gradient(int num_points, const double (*ideal_points)[3], int8_t* mapping, double (*normalized)[3], const double (*penrose)[3], double* F, double* res); + +//sc +#define k_sc 0.5 +const double penrose_sc[PTM_NUM_POINTS_SC][3] = { + {0, 0, 0}, + {0, 0, -k_sc}, + {0, 0, k_sc}, + {0, -k_sc, 0}, + {0, k_sc, 0}, + {-k_sc, 0, 0}, + {k_sc, 0, 0}, + }; + +//fcc +#define k_fcc 0.17677669529663678216 +const double penrose_fcc[PTM_NUM_POINTS_FCC][3] = { + {0, 0, 0}, + {0, k_fcc, k_fcc}, + {0, -k_fcc, -k_fcc}, + {0, k_fcc, -k_fcc}, + {0, -k_fcc, k_fcc}, + {k_fcc, 0, k_fcc}, + {-k_fcc, 0, -k_fcc}, + {k_fcc, 0, -k_fcc}, + {-k_fcc, 0, k_fcc}, + {k_fcc, k_fcc, -0}, + {-k_fcc, -k_fcc, 0}, + {k_fcc, -k_fcc, 0}, + {-k_fcc, k_fcc, -0}, + }; + +//hcp +#define k_hcp 0.17677669529663678216 +const double penrose_hcp[PTM_NUM_POINTS_HCP][3] = { + {0, 0, 0}, + {k_hcp, 0, k_hcp}, + {-k_hcp/3, -4*k_hcp/3, -k_hcp/3}, + {k_hcp, k_hcp, 0}, + {-k_hcp/3, -k_hcp/3, -4*k_hcp/3}, + {0, k_hcp, k_hcp}, + {-4*k_hcp/3, -k_hcp/3, -k_hcp/3}, + {-k_hcp, k_hcp, -0}, + {0, k_hcp, -k_hcp}, + {k_hcp, 0, -k_hcp}, + {k_hcp, -k_hcp, 0}, + {-k_hcp, 0, k_hcp}, + {0, -k_hcp, k_hcp}, + }; + +//ico +#define k_ico 0.13143277802974323576 +#define phi 1.61803398874989490253 +//((1.0 + sqrt(5)) / 2) +const double penrose_ico[PTM_NUM_POINTS_ICO][3] = { + {0, 0, 0}, + {0, k_ico, phi*k_ico}, + {0, -k_ico, -phi*k_ico}, + {0, k_ico, -phi*k_ico}, + {0, -k_ico, phi*k_ico}, + {-k_ico, -phi*k_ico, -0}, + {k_ico, phi*k_ico, 0}, + {k_ico, -phi*k_ico, 0}, + {-k_ico, phi*k_ico, -0}, + {-phi*k_ico, 0, -k_ico}, + {phi*k_ico, 0, k_ico}, + {phi*k_ico, 0, -k_ico}, + {-phi*k_ico, 0, k_ico}, + }; + +//bcc +#define k_bcc 0.11543038598460284017 +const double penrose_bcc[PTM_NUM_POINTS_BCC][3] = { + {0, 0, 0}, + {-k_bcc, -k_bcc, -k_bcc}, + {k_bcc, k_bcc, k_bcc}, + {k_bcc, -k_bcc, -k_bcc}, + {-k_bcc, k_bcc, k_bcc}, + {-k_bcc, k_bcc, -k_bcc}, + {k_bcc, -k_bcc, k_bcc}, + {-k_bcc, -k_bcc, k_bcc}, + {k_bcc, k_bcc, -k_bcc}, + {0, 0, -2*k_bcc}, + {0, 0, 2*k_bcc}, + {0, -2*k_bcc, 0}, + {0, 2*k_bcc, 0}, + {-2*k_bcc, 0, 0}, + {2*k_bcc, 0, -0}, + }; + +//dcub +#define kdcub 0.07095369570691034689 +const double penrose_dcub[PTM_NUM_POINTS_DCUB][3] = { + { 0, 0, 0 }, + { -kdcub, kdcub, kdcub }, + { -kdcub, -kdcub, -kdcub }, + { kdcub, -kdcub, kdcub }, + { kdcub, kdcub, -kdcub }, + { -2 * kdcub, 0, 2 * kdcub }, + { -2 * kdcub, 2 * kdcub, 0 }, + { 0, 2 * kdcub, 2 * kdcub }, + { -2 * kdcub, -2 * kdcub, 0 }, + { -2 * kdcub, 0, -2 * kdcub }, + { 0, -2 * kdcub, -2 * kdcub }, + { 0, -2 * kdcub, 2 * kdcub }, + { 2 * kdcub, -2 * kdcub, 0 }, + { 2 * kdcub, 0, 2 * kdcub }, + { 0, 2 * kdcub, -2 * kdcub }, + { 2 * kdcub, 0, -2 * kdcub }, + { 2 * kdcub, 2 * kdcub, 0 }, + }; + + +#define kdhex 0.04730246380471011397 +const double penrose_dhex[PTM_NUM_POINTS_DHEX][3] = { + { 0, 0, 0 }, + { -kdcub, -kdcub, -kdcub }, + { kdcub, -kdcub, kdcub }, + { -kdcub, kdcub, kdcub }, + { kdcub, kdcub, -kdcub }, + { -kdhex, -4 * kdhex, -kdhex }, + { -4 * kdhex, -kdhex, -kdhex }, + { -kdhex, -kdhex, -4 * kdhex }, + { 2 * kdcub, 0, 2 * kdcub }, + { 2 * kdcub, -2 * kdcub, 0 }, + { 0, -2 * kdcub, 2 * kdcub }, + { 0, 2 * kdcub, 2 * kdcub }, + { -2 * kdcub, 2 * kdcub, 0 }, + { -2 * kdcub, 0, 2 * kdcub }, + { 2 * kdcub, 2 * kdcub, 0 }, + { 0, 2 * kdcub, -2 * kdcub }, + { 2 * kdcub, 0, -2 * kdcub }, + }; +} + +#endif + + diff --git a/src/USER-PTM/ptm_functions.h b/src/USER-PTM/ptm_functions.h new file mode 100644 index 0000000000000000000000000000000000000000..cd67d4940d6d2fabab31a726a1041926b18364c8 --- /dev/null +++ b/src/USER-PTM/ptm_functions.h @@ -0,0 +1,27 @@ +#ifndef PTM_FUNCTIONS_H +#define PTM_FUNCTIONS_H + +#include +#include +#include "ptm_initialize_data.h" +#include "ptm_constants.h" + + +//------------------------------------ +// function declarations +//------------------------------------ +#ifdef __cplusplus +extern "C" { +#endif + + +int ptm_index( ptm_local_handle_t local_handle, int32_t flags, int num_points, double (*atomic_positions)[3], int32_t* atomic_numbers, bool topological_ordering, //inputs + int32_t* p_type, int32_t* p_alloy_type, double* p_scale, double* p_rmsd, double* q, double* F, double* F_res, double* U, double* P, int8_t* mapping, double* p_interatomic_distance, double* p_lattice_constant); //outputs + + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/src/USER-PTM/ptm_fundamental_mappings.h b/src/USER-PTM/ptm_fundamental_mappings.h new file mode 100644 index 0000000000000000000000000000000000000000..35fae7f08834cd303065591e0a54ad83f0480d93 --- /dev/null +++ b/src/USER-PTM/ptm_fundamental_mappings.h @@ -0,0 +1,183 @@ +#ifndef PTM_FUNDAMENTAL_MAPPINGS_H +#define PTM_FUNDAMENTAL_MAPPINGS_H + +#include + +namespace ptm { + +#define NUM_CUBIC_MAPPINGS 24 +#define NUM_ICO_MAPPINGS 60 +#define NUM_HEX_MAPPINGS 6 +#define NUM_DCUB_MAPPINGS 12 +#define NUM_DHEX_MAPPINGS 3 + +const int8_t mapping_sc[NUM_CUBIC_MAPPINGS][PTM_MAX_POINTS] = { + {0, 1, 2, 3, 4, 5, 6}, + {0, 2, 1, 4, 3, 5, 6}, + {0, 2, 1, 3, 4, 6, 5}, + {0, 1, 2, 4, 3, 6, 5}, + {0, 3, 4, 5, 6, 1, 2}, + {0, 5, 6, 2, 1, 4, 3}, + {0, 6, 5, 1, 2, 4, 3}, + {0, 4, 3, 5, 6, 2, 1}, + {0, 5, 6, 1, 2, 3, 4}, + {0, 4, 3, 6, 5, 1, 2}, + {0, 3, 4, 6, 5, 2, 1}, + {0, 6, 5, 2, 1, 3, 4}, + {0, 3, 4, 2, 1, 5, 6}, + {0, 6, 5, 3, 4, 1, 2}, + {0, 1, 2, 5, 6, 4, 3}, + {0, 4, 3, 1, 2, 5, 6}, + {0, 5, 6, 3, 4, 2, 1}, + {0, 1, 2, 6, 5, 3, 4}, + {0, 2, 1, 5, 6, 3, 4}, + {0, 5, 6, 4, 3, 1, 2}, + {0, 3, 4, 1, 2, 6, 5}, + {0, 2, 1, 6, 5, 4, 3}, + {0, 6, 5, 4, 3, 2, 1}, + {0, 4, 3, 2, 1, 6, 5} }; + +const int8_t mapping_fcc[NUM_CUBIC_MAPPINGS][PTM_MAX_POINTS] = { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, + {0, 2, 1, 4, 3, 7, 8, 5, 6, 11, 12, 9, 10}, + {0, 3, 4, 1, 2, 6, 5, 8, 7, 12, 11, 10, 9}, + {0, 4, 3, 2, 1, 8, 7, 6, 5, 10, 9, 12, 11}, + {0, 9, 10, 11, 12, 1, 2, 4, 3, 5, 6, 8, 7}, + {0, 7, 8, 6, 5, 11, 12, 10, 9, 2, 1, 4, 3}, + {0, 8, 7, 5, 6, 10, 9, 11, 12, 4, 3, 2, 1}, + {0, 11, 12, 9, 10, 2, 1, 3, 4, 7, 8, 6, 5}, + {0, 5, 6, 8, 7, 9, 10, 12, 11, 1, 2, 3, 4}, + {0, 10, 9, 12, 11, 4, 3, 1, 2, 8, 7, 5, 6}, + {0, 12, 11, 10, 9, 3, 4, 2, 1, 6, 5, 7, 8}, + {0, 6, 5, 7, 8, 12, 11, 9, 10, 3, 4, 1, 2}, + {0, 3, 4, 2, 1, 9, 10, 11, 12, 7, 8, 5, 6}, + {0, 12, 11, 9, 10, 8, 7, 5, 6, 1, 2, 4, 3}, + {0, 5, 6, 7, 8, 4, 3, 2, 1, 11, 12, 10, 9}, + {0, 4, 3, 1, 2, 11, 12, 9, 10, 5, 6, 7, 8}, + {0, 9, 10, 12, 11, 7, 8, 6, 5, 3, 4, 2, 1}, + {0, 8, 7, 6, 5, 1, 2, 3, 4, 12, 11, 9, 10}, + {0, 7, 8, 5, 6, 3, 4, 1, 2, 9, 10, 12, 11}, + {0, 11, 12, 10, 9, 5, 6, 8, 7, 4, 3, 1, 2}, + {0, 1, 2, 4, 3, 12, 11, 10, 9, 8, 7, 6, 5}, + {0, 6, 5, 8, 7, 2, 1, 4, 3, 10, 9, 11, 12}, + {0, 10, 9, 11, 12, 6, 5, 7, 8, 2, 1, 3, 4}, + {0, 2, 1, 3, 4, 10, 9, 12, 11, 6, 5, 8, 7} }; + +const int8_t mapping_bcc[NUM_CUBIC_MAPPINGS][PTM_MAX_POINTS] = { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, + {0, 4, 3, 2, 1, 7, 8, 5, 6, 10, 9, 12, 11, 13, 14}, + {0, 6, 5, 7, 8, 2, 1, 3, 4, 10, 9, 11, 12, 14, 13}, + {0, 8, 7, 5, 6, 3, 4, 2, 1, 9, 10, 12, 11, 14, 13}, + {0, 1, 2, 7, 8, 3, 4, 5, 6, 11, 12, 13, 14, 9, 10}, + {0, 4, 3, 7, 8, 5, 6, 2, 1, 13, 14, 10, 9, 12, 11}, + {0, 8, 7, 3, 4, 2, 1, 5, 6, 14, 13, 9, 10, 12, 11}, + {0, 4, 3, 5, 6, 2, 1, 7, 8, 12, 11, 13, 14, 10, 9}, + {0, 1, 2, 5, 6, 7, 8, 3, 4, 13, 14, 9, 10, 11, 12}, + {0, 8, 7, 2, 1, 5, 6, 3, 4, 12, 11, 14, 13, 9, 10}, + {0, 6, 5, 3, 4, 7, 8, 2, 1, 11, 12, 14, 13, 10, 9}, + {0, 6, 5, 2, 1, 3, 4, 7, 8, 14, 13, 10, 9, 11, 12}, + {0, 7, 8, 6, 5, 1, 2, 4, 3, 11, 12, 10, 9, 13, 14}, + {0, 3, 4, 6, 5, 8, 7, 1, 2, 14, 13, 11, 12, 9, 10}, + {0, 5, 6, 1, 2, 8, 7, 4, 3, 9, 10, 13, 14, 12, 11}, + {0, 5, 6, 8, 7, 4, 3, 1, 2, 12, 11, 9, 10, 13, 14}, + {0, 7, 8, 1, 2, 4, 3, 6, 5, 13, 14, 11, 12, 10, 9}, + {0, 3, 4, 8, 7, 1, 2, 6, 5, 9, 10, 14, 13, 11, 12}, + {0, 7, 8, 4, 3, 6, 5, 1, 2, 10, 9, 13, 14, 11, 12}, + {0, 5, 6, 4, 3, 1, 2, 8, 7, 13, 14, 12, 11, 9, 10}, + {0, 3, 4, 1, 2, 6, 5, 8, 7, 11, 12, 9, 10, 14, 13}, + {0, 2, 1, 6, 5, 4, 3, 8, 7, 10, 9, 14, 13, 12, 11}, + {0, 2, 1, 8, 7, 6, 5, 4, 3, 14, 13, 12, 11, 10, 9}, + {0, 2, 1, 4, 3, 8, 7, 6, 5, 12, 11, 10, 9, 14, 13} }; + +const int8_t mapping_ico[NUM_ICO_MAPPINGS][PTM_MAX_POINTS] = { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, + {0, 10, 9, 8, 7, 5, 6, 2, 1, 12, 11, 3, 4}, + {0, 1, 2, 9, 10, 7, 8, 11, 12, 5, 6, 3, 4}, + {0, 4, 3, 8, 7, 2, 1, 11, 12, 9, 10, 6, 5}, + {0, 6, 5, 9, 10, 4, 3, 7, 8, 12, 11, 2, 1}, + {0, 12, 11, 3, 4, 7, 8, 10, 9, 2, 1, 6, 5}, + {0, 4, 3, 6, 5, 9, 10, 2, 1, 8, 7, 11, 12}, + {0, 8, 7, 2, 1, 4, 3, 10, 9, 5, 6, 11, 12}, + {0, 10, 9, 3, 4, 12, 11, 5, 6, 8, 7, 2, 1}, + {0, 12, 11, 6, 5, 2, 1, 7, 8, 3, 4, 10, 9}, + {0, 1, 2, 11, 12, 9, 10, 5, 6, 3, 4, 7, 8}, + {0, 8, 7, 11, 12, 5, 6, 4, 3, 2, 1, 10, 9}, + {0, 6, 5, 2, 1, 12, 11, 4, 3, 9, 10, 7, 8}, + {0, 3, 4, 5, 6, 1, 2, 10, 9, 12, 11, 7, 8}, + {0, 3, 4, 7, 8, 12, 11, 1, 2, 5, 6, 10, 9}, + {0, 6, 5, 7, 8, 9, 10, 12, 11, 2, 1, 4, 3}, + {0, 9, 10, 11, 12, 4, 3, 1, 2, 7, 8, 6, 5}, + {0, 11, 12, 9, 10, 1, 2, 4, 3, 8, 7, 5, 6}, + {0, 8, 7, 5, 6, 10, 9, 11, 12, 4, 3, 2, 1}, + {0, 10, 9, 2, 1, 8, 7, 12, 11, 3, 4, 5, 6}, + {0, 12, 11, 2, 1, 10, 9, 6, 5, 7, 8, 3, 4}, + {0, 9, 10, 6, 5, 7, 8, 4, 3, 11, 12, 1, 2}, + {0, 8, 7, 10, 9, 2, 1, 5, 6, 11, 12, 4, 3}, + {0, 6, 5, 12, 11, 7, 8, 2, 1, 4, 3, 9, 10}, + {0, 11, 12, 8, 7, 4, 3, 5, 6, 1, 2, 9, 10}, + {0, 4, 3, 11, 12, 8, 7, 9, 10, 6, 5, 2, 1}, + {0, 4, 3, 9, 10, 11, 12, 6, 5, 2, 1, 8, 7}, + {0, 12, 11, 10, 9, 3, 4, 2, 1, 6, 5, 7, 8}, + {0, 5, 6, 8, 7, 11, 12, 10, 9, 3, 4, 1, 2}, + {0, 7, 8, 6, 5, 12, 11, 9, 10, 1, 2, 3, 4}, + {0, 10, 9, 12, 11, 2, 1, 3, 4, 5, 6, 8, 7}, + {0, 7, 8, 1, 2, 9, 10, 3, 4, 12, 11, 6, 5}, + {0, 5, 6, 1, 2, 3, 4, 11, 12, 8, 7, 10, 9}, + {0, 7, 8, 12, 11, 3, 4, 6, 5, 9, 10, 1, 2}, + {0, 1, 2, 5, 6, 11, 12, 3, 4, 7, 8, 9, 10}, + {0, 11, 12, 1, 2, 5, 6, 9, 10, 4, 3, 8, 7}, + {0, 5, 6, 3, 4, 10, 9, 1, 2, 11, 12, 8, 7}, + {0, 5, 6, 10, 9, 8, 7, 3, 4, 1, 2, 11, 12}, + {0, 3, 4, 12, 11, 10, 9, 7, 8, 1, 2, 5, 6}, + {0, 9, 10, 7, 8, 1, 2, 6, 5, 4, 3, 11, 12}, + {0, 9, 10, 1, 2, 11, 12, 7, 8, 6, 5, 4, 3}, + {0, 7, 8, 3, 4, 1, 2, 12, 11, 6, 5, 9, 10}, + {0, 11, 12, 5, 6, 8, 7, 1, 2, 9, 10, 4, 3}, + {0, 1, 2, 7, 8, 3, 4, 9, 10, 11, 12, 5, 6}, + {0, 3, 4, 10, 9, 5, 6, 12, 11, 7, 8, 1, 2}, + {0, 2, 1, 4, 3, 8, 7, 6, 5, 12, 11, 10, 9}, + {0, 2, 1, 12, 11, 6, 5, 10, 9, 8, 7, 4, 3}, + {0, 9, 10, 4, 3, 6, 5, 11, 12, 1, 2, 7, 8}, + {0, 11, 12, 4, 3, 9, 10, 8, 7, 5, 6, 1, 2}, + {0, 2, 1, 10, 9, 12, 11, 8, 7, 4, 3, 6, 5}, + {0, 5, 6, 11, 12, 1, 2, 8, 7, 10, 9, 3, 4}, + {0, 10, 9, 5, 6, 3, 4, 8, 7, 2, 1, 12, 11}, + {0, 12, 11, 7, 8, 6, 5, 3, 4, 10, 9, 2, 1}, + {0, 7, 8, 9, 10, 6, 5, 1, 2, 3, 4, 12, 11}, + {0, 2, 1, 8, 7, 10, 9, 4, 3, 6, 5, 12, 11}, + {0, 8, 7, 4, 3, 11, 12, 2, 1, 10, 9, 5, 6}, + {0, 6, 5, 4, 3, 2, 1, 9, 10, 7, 8, 12, 11}, + {0, 2, 1, 6, 5, 4, 3, 12, 11, 10, 9, 8, 7}, + {0, 3, 4, 1, 2, 7, 8, 5, 6, 10, 9, 12, 11}, + {0, 4, 3, 2, 1, 6, 5, 8, 7, 11, 12, 9, 10} }; + +const int8_t mapping_hcp[NUM_HEX_MAPPINGS][PTM_MAX_POINTS] = { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, + {0, 5, 6, 1, 2, 3, 4, 9, 10, 12, 11, 8, 7}, + {0, 3, 4, 5, 6, 1, 2, 12, 11, 7, 8, 10, 9}, + {0, 4, 3, 2, 1, 6, 5, 11, 12, 10, 9, 7, 8}, + {0, 2, 1, 6, 5, 4, 3, 8, 7, 11, 12, 9, 10}, + {0, 6, 5, 4, 3, 2, 1, 10, 9, 8, 7, 12, 11} }; + +const int8_t mapping_dcub[NUM_DCUB_MAPPINGS][PTM_MAX_POINTS] = { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, + {0, 2, 1, 4, 3, 9, 8, 10, 6, 5, 7, 14, 16, 15, 11, 13, 12}, + {0, 4, 3, 2, 1, 15, 16, 14, 12, 13, 11, 10, 8, 9, 7, 5, 6}, + {0, 3, 4, 1, 2, 13, 12, 11, 16, 15, 14, 7, 6, 5, 10, 9, 8}, + {0, 4, 2, 1, 3, 14, 15, 16, 9, 10, 8, 6, 5, 7, 12, 11, 13}, + {0, 4, 1, 3, 2, 16, 14, 15, 7, 6, 5, 13, 11, 12, 9, 8, 10}, + {0, 1, 4, 2, 3, 6, 7, 5, 14, 16, 15, 9, 10, 8, 13, 12, 11}, + {0, 3, 1, 2, 4, 11, 13, 12, 5, 7, 6, 8, 9, 10, 16, 14, 15}, + {0, 3, 2, 4, 1, 12, 11, 13, 10, 8, 9, 15, 14, 16, 5, 6, 7}, + {0, 2, 4, 3, 1, 10, 9, 8, 15, 14, 16, 12, 13, 11, 6, 7, 5}, + {0, 1, 3, 4, 2, 7, 5, 6, 13, 11, 12, 16, 15, 14, 8, 10, 9}, + {0, 2, 3, 1, 4, 8, 10, 9, 11, 12, 13, 5, 7, 6, 15, 16, 14} }; + +const int8_t mapping_dhex[NUM_DHEX_MAPPINGS][PTM_MAX_POINTS] = { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, + {0, 1, 3, 4, 2, 6, 7, 5, 11, 13, 12, 14, 16, 15, 8, 9, 10}, + {0, 1, 4, 2, 3, 7, 5, 6, 14, 15, 16, 8, 10, 9, 11, 13, 12} }; +} + +#endif + diff --git a/src/USER-PTM/ptm_graph_data.cpp b/src/USER-PTM/ptm_graph_data.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a742c8b3398c7c7a7eeb5862d8507756043fb078 --- /dev/null +++ b/src/USER-PTM/ptm_graph_data.cpp @@ -0,0 +1,2063 @@ +#include "ptm_graph_data.h" + + +namespace ptm { + +int8_t automorphisms[65][17] = { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, -1, -1}, + { 0, 4, 3, 10, 9, 5, 6, 12, 11, 8, 7, 1, 2, -1, -1, -1, -1}, + { 0, 5, 6, 11, 12, 8, 7, 2, 1, 4, 3, 10, 9, -1, -1, -1, -1}, + { 0, 8, 7, 1, 2, 4, 3, 9, 10, 5, 6, 11, 12, -1, -1, -1, -1}, + { 0, 8, 7, 10, 9, 1, 2, 6, 5, 12, 11, 3, 4, -1, -1, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, -1, -1}, + { 0, 12, 3, 2, 7, 10, 8, 4, 6, 11, 5, 9, 1, -1, -1, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, -1, -1}, + { 0, 4, 11, 8, 1, 9, 12, 10, 3, 5, 7, 2, 6, -1, -1, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, -1, -1}, + { 0, 2, 1, 6, 5, 4, 3, 9, 8, 7, 11, 10, 12, -1, -1, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, -1, -1}, + { 0, 1, 7, 10, 11, 9, 6, 4, 2, 12, 5, 8, 3, -1, -1, -1, -1}, + { 0, 1, 11, 9, 2, 3, 6, 8, 4, 10, 12, 7, 5, -1, -1, -1, -1}, + { 0, 3, 6, 1, 11, 9, 2, 10, 12, 5, 7, 4, 8, -1, -1, -1, -1}, + { 0, 3, 11, 9, 12, 8, 2, 4, 10, 1, 5, 6, 7, -1, -1, -1, -1}, + { 0, 8, 2, 3, 11, 9, 12, 1, 5, 7, 6, 10, 4, -1, -1, -1, -1}, + { 0, 9, 2, 3, 6, 1, 11, 5, 7, 8, 4, 12, 10, -1, -1, -1, -1}, + { 0, 9, 6, 1, 7, 10, 11, 12, 5, 3, 8, 2, 4, -1, -1, -1, -1}, + { 0, 9, 12, 8, 2, 3, 11, 7, 6, 4, 10, 5, 1, -1, -1, -1, -1}, + { 0, 10, 11, 9, 6, 1, 7, 3, 8, 4, 2, 5, 12, -1, -1, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, -1, -1}, + { 0, 3, 2, 8, 6, 5, 12, 11, 7, 4, 9, 1, 10, -1, -1, -1, -1}, + { 0, 3, 11, 10, 6, 9, 7, 4, 2, 12, 1, 8, 5, -1, -1, -1, -1}, + { 0, 3, 12, 9, 6, 8, 11, 7, 4, 2, 10, 5, 1, -1, -1, -1, -1}, + { 0, 5, 12, 3, 2, 8, 6, 4, 9, 10, 1, 7, 11, -1, -1, -1, -1}, + { 0, 8, 6, 5, 12, 3, 2, 10, 1, 11, 7, 9, 4, -1, -1, -1, -1}, + { 0, 8, 11, 3, 12, 9, 6, 2, 10, 1, 5, 4, 7, -1, -1, -1, -1}, + { 0, 9, 6, 8, 11, 3, 12, 1, 5, 7, 4, 10, 2, -1, -1, -1, -1}, + { 0, 9, 7, 3, 11, 10, 6, 12, 1, 5, 8, 2, 4, -1, -1, -1, -1}, + { 0, 10, 6, 9, 7, 3, 11, 5, 8, 4, 2, 1, 12, -1, -1, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1}, + { 0, 3, 4, 6, 5, 2, 1, 9, 10, 14, 13, 11, 12, 8, 7, -1, -1}, + { 0, 4, 3, 1, 2, 5, 6, 10, 9, 13, 14, 7, 8, 12, 11, -1, -1}, + { 0, 6, 5, 1, 2, 4, 3, 14, 13, 7, 8, 11, 12, 10, 9, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1}, + { 0, 12, 11, 10, 9, 13, 14, 8, 7, 4, 3, 2, 1, 5, 6, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1}, + { 0, 9, 10, 13, 14, 11, 12, 8, 7, 1, 2, 5, 6, 3, 4, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1}, + { 0, 6, 5, 4, 3, 2, 1, 11, 12, 10, 9, 7, 8, 14, 13, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1}, + { 0, 12, 11, 10, 9, 13, 14, 8, 7, 4, 3, 2, 1, 5, 6, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1}, + { 0, 9, 10, 13, 14, 11, 12, 8, 7, 1, 2, 5, 6, 3, 4, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1}, + { 0, 3, 10, 14, 5, 9, 7, 13, 2, 8, 4, 11, 12, 1, 6, -1, -1}, + { 0, 13, 8, 1, 10, 4, 14, 6, 9, 5, 2, 11, 12, 7, 3, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1}, + { 0, 11, 12, 14, 13, 9, 10, 7, 8, 3, 4, 6, 5, 1, 2, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1}, + { 0, 13, 14, 11, 12, 5, 6, 10, 9, 1, 2, 7, 8, 4, 3, -1, -1}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, + { 0, 4, 3, 2, 1, 15, 14, 16, 13, 12, 11, 10, 9, 8, 6, 5, 7}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, + { 0, 4, 1, 3, 2, 15, 14, 16, 5, 7, 6, 13, 11, 12, 10, 8, 9}, + { 0, 4, 2, 1, 3, 16, 15, 14, 10, 8, 9, 5, 6, 7, 13, 12, 11}, + { 0, 4, 3, 2, 1, 14, 16, 15, 13, 12, 11, 10, 9, 8, 5, 7, 6}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, + { 0, 3, 4, 1, 2, 12, 13, 11, 16, 14, 15, 7, 5, 6, 9, 10, 8}, + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, + { 0, 4, 1, 3, 2, 16, 15, 14, 6, 5, 7, 13, 11, 12, 10, 8, 9}, + { 0, 4, 2, 1, 3, 14, 16, 15, 10, 8, 9, 6, 7, 5, 13, 12, 11}, + { 0, 4, 3, 2, 1, 15, 14, 16, 13, 12, 11, 10, 9, 8, 6, 5, 7}, +}; + +graph_t graphs_sc[NUM_SC_GRAPHS] = { + +{0, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,4},{1,3,5},{0,3,4},{0,3,5},{1,2,5},{1,2,4},{0,2,4},{0,2,5}}}, + +}; + +graph_t graphs_ico[NUM_ICO_GRAPHS] = { + +{0, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{0,5,9},{1,2,8},{0,5,7},{2,7,8},{2,5,7},{1,4,8},{1,2,10},{5,9,10},{2,5,10},{4,8,11},{7,8,11},{0,7,11},{0,3,9},{0,3,11},{3,4,11},{3,6,9},{3,4,6},{6,9,10},{1,4,6},{1,6,10}}}, + +}; + +graph_t graphs_fcc[NUM_FCC_GRAPHS] = { + +{0, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{0,4,8},{3,7,9},{2,5,11},{0,7,11},{1,5,9},{2,6,8},{3,4,10},{1,6,10},{3,4,7},{0,4,7},{0,2,11},{0,2,8},{5,7,11},{5,7,9},{1,2,6},{1,2,5},{1,3,10},{1,3,9},{4,6,10},{4,6,8}}}, + +{1, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{0,4,8},{3,7,9},{2,5,11},{0,7,11},{1,5,9},{2,6,8},{3,4,10},{1,6,10},{3,4,7},{0,4,7},{0,2,11},{0,2,8},{5,7,11},{5,7,9},{1,2,6},{1,2,5},{1,3,10},{1,3,9},{6,8,10},{4,8,10}}}, + +{2, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{0,4,8},{3,7,9},{2,5,11},{0,7,11},{1,5,9},{2,6,8},{3,4,10},{1,6,10},{3,4,7},{0,4,7},{0,2,11},{0,2,8},{5,7,11},{5,7,9},{1,2,6},{1,2,5},{3,9,10},{1,9,10},{6,8,10},{4,8,10}}}, + +{3, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{0,4,8},{3,7,9},{2,5,11},{0,7,11},{1,5,9},{2,6,8},{3,4,10},{1,6,10},{3,4,7},{0,4,7},{0,2,11},{0,2,8},{5,7,11},{5,7,9},{2,5,6},{1,5,6},{1,3,10},{1,3,9},{4,6,10},{4,6,8}}}, + +{4, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{0,4,8},{3,7,9},{2,5,11},{0,7,11},{1,5,9},{2,6,8},{3,4,10},{1,6,10},{3,4,7},{0,4,7},{0,2,11},{0,2,8},{5,7,11},{5,7,9},{2,5,6},{1,5,6},{1,3,10},{1,3,9},{6,8,10},{4,8,10}}}, + +{5, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{0,4,8},{3,7,9},{2,5,11},{0,7,11},{1,5,9},{2,6,8},{3,4,10},{1,6,10},{3,4,7},{0,4,7},{0,2,11},{0,2,8},{5,7,11},{5,7,9},{2,5,6},{1,5,6},{3,9,10},{1,9,10},{4,6,10},{4,6,8}}}, + +{6, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{0,4,8},{3,7,9},{2,5,11},{0,7,11},{1,5,9},{2,6,8},{3,4,10},{1,6,10},{3,4,7},{0,4,7},{0,2,11},{0,2,8},{7,9,11},{5,9,11},{1,2,6},{1,2,5},{3,9,10},{1,9,10},{4,6,10},{4,6,8}}}, + +{7, +0, +1, +5, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{0,4,8},{3,7,9},{2,5,11},{0,7,11},{1,5,9},{2,6,8},{3,4,10},{1,6,10},{3,4,7},{0,4,7},{0,2,11},{0,2,8},{7,9,11},{5,9,11},{2,5,6},{1,5,6},{1,3,10},{1,3,9},{6,8,10},{4,8,10}}}, + +}; + +graph_t graphs_hcp[NUM_HCP_GRAPHS] = { + +{0, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{3,8,9},{1,3,9},{2,8,9},{0,2,9},{0,10,11},{0,4,10},{2,6,7},{2,4,6}}}, + +{1, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{3,8,9},{1,3,9},{2,8,9},{0,2,9},{0,10,11},{0,4,10},{4,6,7},{2,4,7}}}, + +{2, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{3,8,9},{1,3,9},{2,8,9},{0,2,9},{4,10,11},{0,4,11},{2,6,7},{2,4,6}}}, + +{3, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{3,8,9},{1,3,9},{2,8,9},{0,2,9},{4,10,11},{0,4,11},{4,6,7},{2,4,7}}}, + +{4, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{3,8,9},{1,3,9},{0,8,9},{0,2,8},{0,10,11},{0,4,10},{2,6,7},{2,4,6}}}, + +{5, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{3,8,9},{1,3,9},{0,8,9},{0,2,8},{0,10,11},{0,4,10},{4,6,7},{2,4,7}}}, + +{6, +0, +6, +2, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{3,8,9},{1,3,9},{0,8,9},{0,2,8},{4,10,11},{0,4,11},{2,6,7},{2,4,6}}}, + +{7, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{3,8,9},{1,3,9},{0,8,9},{0,2,8},{4,10,11},{0,4,11},{4,6,7},{2,4,7}}}, + +{8, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{1,8,9},{1,3,8},{2,8,9},{0,2,9},{0,10,11},{0,4,10},{2,6,7},{2,4,6}}}, + +{9, +0, +8, +2, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{1,8,9},{1,3,8},{2,8,9},{0,2,9},{0,10,11},{0,4,10},{4,6,7},{2,4,7}}}, + +{10, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{1,8,9},{1,3,8},{2,8,9},{0,2,9},{4,10,11},{0,4,11},{4,6,7},{2,4,7}}}, + +{11, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{1,8,9},{1,3,8},{0,8,9},{0,2,8},{0,10,11},{0,4,10},{4,6,7},{2,4,7}}}, + +{12, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{3,6,7},{3,5,6},{1,8,9},{1,3,8},{0,8,9},{0,2,8},{4,10,11},{0,4,11},{2,6,7},{2,4,6}}}, + +{13, +0, +10, +2, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{5,6,7},{3,5,7},{3,8,9},{1,3,9},{2,8,9},{0,2,9},{0,10,11},{0,4,10},{4,6,7},{2,4,7}}}, + +{14, +0, +12, +10, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{1,10,11},{1,5,10},{5,6,7},{3,5,7},{3,8,9},{1,3,9},{0,8,9},{0,2,8},{4,10,11},{0,4,11},{2,6,7},{2,4,6}}}, + +{15, +0, +22, +10, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,5},{5,6,10},{0,9,11},{1,9,11},{3,7,8},{2,7,8},{4,6,10},{0,2,4},{5,10,11},{1,5,11},{3,6,7},{3,5,6},{1,8,9},{1,3,8},{2,8,9},{0,2,9},{0,10,11},{0,4,10},{4,6,7},{2,4,7}}}, + +}; + +graph_t graphs_bcc[NUM_BCC_GRAPHS] = { + +{0, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{1, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{2, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{3, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{4, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{5, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{6, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{7, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{8, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{9, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{10, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{11, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{12, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{13, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{14, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{15, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{16, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{17, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{18, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{19, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{20, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{21, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{22, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{23, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{24, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{25, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{26, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{27, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{28, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{29, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{30, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{31, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{32, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{33, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{34, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{35, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{36, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{37, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{38, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{39, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{40, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{41, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{42, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{43, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{44, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{45, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{46, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{47, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{48, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{49, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{50, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{51, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{52, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{53, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{54, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{55, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{56, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{57, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{58, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{59, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{60, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{7,8,11},{4,8,11},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{61, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{62, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{63, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{64, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{65, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{66, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{67, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{68, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{69, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{70, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{71, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{72, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{73, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{74, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{75, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{76, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{77, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{78, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{79, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{80, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{81, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{82, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{83, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{84, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{85, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{86, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{87, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{88, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{89, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{90, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{91, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{92, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{93, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{94, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{95, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{96, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{97, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{98, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{99, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{100, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{101, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{102, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{103, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{104, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{105, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{106, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{107, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{108, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{109, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{110, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{111, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{112, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{113, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{114, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{115, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{116, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{117, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{118, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{119, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{120, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{121, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{122, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{123, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{124, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{125, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{126, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{127, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{128, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{129, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{130, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{131, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{132, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{133, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{134, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{135, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{136, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{137, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{138, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{139, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{140, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{141, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{142, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{143, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{144, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{145, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{146, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{147, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{148, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{149, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{150, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{151, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{152, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{153, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{154, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{155, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{156, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{157, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{158, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{159, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{160, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{161, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{162, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{163, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{164, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{165, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{7,11,13},{1,11,13},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{166, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{167, +0, +32, +4, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{168, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{169, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{170, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{171, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{172, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{173, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{174, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{175, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{176, +0, +36, +2, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{5,9,13},{1,9,13},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{177, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{178, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{179, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{180, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{6,9,12},{3,9,12},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{181, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{182, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{183, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{184, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{185, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{186, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{187, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{188, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{189, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{190, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{191, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{192, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{193, +0, +38, +2, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{194, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{195, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{196, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{197, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{198, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{199, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{200, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{201, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{202, +0, +40, +2, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{2,8,10},{0,8,10}}}, + +{203, +0, +42, +2, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{204, +0, +44, +2, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{205, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{4,11,12},{3,11,12},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{206, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{3,4,12},{3,4,11},{1,7,13},{1,7,11},{7,8,11},{4,8,11},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{207, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{3,4,12},{3,4,11},{1,7,13},{1,7,11},{7,8,11},{4,8,11},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{6,9,10},{5,9,10},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{208, +0, +46, +3, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{3,4,12},{3,4,11},{1,7,13},{1,7,11},{7,8,11},{4,8,11},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{209, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{3,4,12},{3,4,11},{1,7,13},{1,7,11},{7,8,11},{4,8,11},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{210, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{3,4,12},{3,4,11},{1,7,13},{1,7,11},{7,8,11},{4,8,11},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{211, +0, +49, +2, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{3,4,12},{3,4,11},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{5,10,13},{2,10,13},{0,2,10},{0,2,8}}}, + +{212, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{3,4,12},{3,4,11},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{4,8,12},{0,8,12},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{213, +0, +51, +2, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{3,4,12},{3,4,11},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{7,8,13},{2,8,13},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{214, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{3,4,12},{3,4,11},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{6,10,12},{0,10,12},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{215, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{3,4,12},{3,4,11},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{2,8,10},{0,8,10}}}, + +{216, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{3,9,11},{1,9,11},{3,4,12},{3,4,11},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +{217, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{1,3,11},{1,3,9},{3,4,12},{3,4,11},{1,7,13},{1,7,11},{4,7,11},{4,7,8},{1,5,13},{1,5,9},{3,6,12},{3,6,9},{5,6,10},{5,6,9},{0,4,12},{0,4,8},{0,6,12},{0,6,10},{2,7,13},{2,7,8},{2,5,13},{2,5,10},{0,2,10},{0,2,8}}}, + +}; + +graph_t graphs_dcub[NUM_DCUB_GRAPHS] = { + +{0, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{4,7,10},{0,5,6},{0,4,5},{0,4,6},{2,11,12},{2,10,12},{2,10,11},{1,7,8},{1,8,9},{1,7,9},{6,12,15},{5,8,13},{3,13,15},{3,13,14},{9,11,14},{3,14,15},{5,7,8},{4,5,7},{6,10,12},{4,6,10},{7,10,11},{7,9,11},{5,13,15},{5,6,15},{9,13,14},{8,9,13},{11,14,15},{11,12,15}}}, + +{1, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{4,7,10},{0,5,6},{0,4,5},{0,4,6},{2,11,12},{2,10,12},{2,10,11},{1,7,8},{1,8,9},{1,7,9},{6,12,15},{5,8,13},{3,13,15},{3,13,14},{9,11,14},{3,14,15},{5,7,8},{4,5,7},{6,10,12},{4,6,10},{7,10,11},{7,9,11},{5,13,15},{5,6,15},{9,13,14},{8,9,13},{12,14,15},{11,12,14}}}, + +{2, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{4,7,10},{0,5,6},{0,4,5},{0,4,6},{2,11,12},{2,10,12},{2,10,11},{1,7,8},{1,8,9},{1,7,9},{6,12,15},{5,8,13},{3,13,15},{3,13,14},{9,11,14},{3,14,15},{5,7,8},{4,5,7},{6,10,12},{4,6,10},{7,10,11},{7,9,11},{5,13,15},{5,6,15},{8,13,14},{8,9,14},{11,14,15},{11,12,15}}}, + +{3, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{4,7,10},{0,5,6},{0,4,5},{0,4,6},{2,11,12},{2,10,12},{2,10,11},{1,7,8},{1,8,9},{1,7,9},{6,12,15},{5,8,13},{3,13,15},{3,13,14},{9,11,14},{3,14,15},{5,7,8},{4,5,7},{6,10,12},{4,6,10},{7,10,11},{7,9,11},{5,13,15},{5,6,15},{8,13,14},{8,9,14},{12,14,15},{11,12,14}}}, + +{4, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{4,7,10},{0,5,6},{0,4,5},{0,4,6},{2,11,12},{2,10,12},{2,10,11},{1,7,8},{1,8,9},{1,7,9},{6,12,15},{5,8,13},{3,13,15},{3,13,14},{9,11,14},{3,14,15},{5,7,8},{4,5,7},{6,10,12},{4,6,10},{7,10,11},{7,9,11},{6,13,15},{5,6,13},{9,13,14},{8,9,13},{11,14,15},{11,12,15}}}, + +{5, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{4,7,10},{0,5,6},{0,4,5},{0,4,6},{2,11,12},{2,10,12},{2,10,11},{1,7,8},{1,8,9},{1,7,9},{6,12,15},{5,8,13},{3,13,15},{3,13,14},{9,11,14},{3,14,15},{5,7,8},{4,5,7},{6,10,12},{4,6,10},{7,10,11},{7,9,11},{6,13,15},{5,6,13},{8,13,14},{8,9,14},{11,14,15},{11,12,15}}}, + +{6, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{4,7,10},{0,5,6},{0,4,5},{0,4,6},{2,11,12},{2,10,12},{2,10,11},{1,7,8},{1,8,9},{1,7,9},{6,12,15},{5,8,13},{3,13,15},{3,13,14},{9,11,14},{3,14,15},{5,7,8},{4,5,7},{6,10,12},{4,6,10},{7,10,11},{7,9,11},{6,13,15},{5,6,13},{8,13,14},{8,9,14},{12,14,15},{11,12,14}}}, + +{7, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{4,7,10},{0,5,6},{0,4,5},{0,4,6},{2,11,12},{2,10,12},{2,10,11},{1,7,8},{1,8,9},{1,7,9},{6,12,15},{5,8,13},{3,13,15},{3,13,14},{9,11,14},{3,14,15},{5,7,8},{4,5,7},{6,10,12},{4,6,10},{9,10,11},{7,9,10},{5,13,15},{5,6,15},{8,13,14},{8,9,14},{12,14,15},{11,12,14}}}, + +{8, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{4,7,10},{0,5,6},{0,4,5},{0,4,6},{2,11,12},{2,10,12},{2,10,11},{1,7,8},{1,8,9},{1,7,9},{6,12,15},{5,8,13},{3,13,15},{3,13,14},{9,11,14},{3,14,15},{5,7,8},{4,5,7},{6,10,12},{4,6,10},{9,10,11},{7,9,10},{6,13,15},{5,6,13},{9,13,14},{8,9,13},{11,14,15},{11,12,15}}}, + +{9, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{4,7,10},{0,5,6},{0,4,5},{0,4,6},{2,11,12},{2,10,12},{2,10,11},{1,7,8},{1,8,9},{1,7,9},{6,12,15},{5,8,13},{3,13,15},{3,13,14},{9,11,14},{3,14,15},{5,7,8},{4,5,7},{6,10,12},{4,6,10},{9,10,11},{7,9,10},{6,13,15},{5,6,13},{8,13,14},{8,9,14},{11,14,15},{11,12,15}}}, + +{10, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{4,7,10},{0,5,6},{0,4,5},{0,4,6},{2,11,12},{2,10,12},{2,10,11},{1,7,8},{1,8,9},{1,7,9},{6,12,15},{5,8,13},{3,13,15},{3,13,14},{9,11,14},{3,14,15},{5,7,8},{4,5,7},{4,10,12},{4,6,12},{9,10,11},{7,9,10},{6,13,15},{5,6,13},{8,13,14},{8,9,14},{11,14,15},{11,12,15}}}, + +{11, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{4,7,10},{0,5,6},{0,4,5},{0,4,6},{2,11,12},{2,10,12},{2,10,11},{1,7,8},{1,8,9},{1,7,9},{6,12,15},{5,8,13},{3,13,15},{3,13,14},{9,11,14},{3,14,15},{4,7,8},{4,5,8},{6,10,12},{4,6,10},{7,10,11},{7,9,11},{5,13,15},{5,6,15},{9,13,14},{8,9,13},{12,14,15},{11,12,14}}}, + +}; + +graph_t graphs_dhex[NUM_DHEX_GRAPHS] = { + +{0, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{11,13,14},{10,11,13},{6,11,14},{5,6,11},{4,8,15},{4,6,15},{7,13,15},{7,8,15}}}, + +{1, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{11,13,14},{10,11,13},{6,11,14},{5,6,11},{4,8,15},{4,6,15},{8,13,15},{7,8,13}}}, + +{2, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{11,13,14},{10,11,13},{6,11,14},{5,6,11},{6,8,15},{4,6,8},{7,13,15},{7,8,15}}}, + +{3, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{11,13,14},{10,11,13},{6,11,14},{5,6,11},{6,8,15},{4,6,8},{8,13,15},{7,8,13}}}, + +{4, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{11,13,14},{10,11,13},{5,11,14},{5,6,14},{4,8,15},{4,6,15},{8,13,15},{7,8,13}}}, + +{5, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{11,13,14},{10,11,13},{5,11,14},{5,6,14},{6,8,15},{4,6,8},{7,13,15},{7,8,15}}}, + +{6, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{11,13,14},{10,11,13},{5,11,14},{5,6,14},{6,8,15},{4,6,8},{8,13,15},{7,8,13}}}, + +{7, +0, +53, +2, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{10,13,14},{10,11,14},{6,11,14},{5,6,11},{4,8,15},{4,6,15},{8,13,15},{7,8,13}}}, + +{8, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{10,13,14},{10,11,14},{6,11,14},{5,6,11},{6,8,15},{4,6,8},{7,13,15},{7,8,15}}}, + +{9, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{10,13,14},{10,11,14},{6,11,14},{5,6,11},{6,8,15},{4,6,8},{8,13,15},{7,8,13}}}, + +{10, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{10,13,14},{10,11,14},{5,11,14},{5,6,14},{4,8,15},{4,6,15},{8,13,15},{7,8,13}}}, + +{11, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{10,13,14},{10,11,14},{5,11,14},{5,6,14},{6,8,15},{4,6,8},{7,13,15},{7,8,15}}}, + +{12, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{5,9,12},{4,5,9},{10,13,14},{10,11,14},{5,11,14},{5,6,14},{6,8,15},{4,6,8},{8,13,15},{7,8,13}}}, + +{13, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{4,9,12},{4,5,12},{11,13,14},{10,11,13},{5,11,14},{5,6,14},{4,8,15},{4,6,15},{8,13,15},{7,8,13}}}, + +{14, +0, +55, +4, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{4,9,12},{4,5,12},{11,13,14},{10,11,13},{5,11,14},{5,6,14},{6,8,15},{4,6,8},{7,13,15},{7,8,15}}}, + +{15, +0, +59, +2, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{4,9,12},{4,5,12},{11,13,14},{10,11,13},{5,11,14},{5,6,14},{6,8,15},{4,6,8},{8,13,15},{7,8,13}}}, + +{16, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{4,9,12},{4,5,12},{10,13,14},{10,11,14},{6,11,14},{5,6,11},{4,8,15},{4,6,15},{8,13,15},{7,8,13}}}, + +{17, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{4,9,12},{4,5,12},{10,13,14},{10,11,14},{6,11,14},{5,6,11},{6,8,15},{4,6,8},{8,13,15},{7,8,13}}}, + +{18, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{4,9,12},{4,5,12},{10,13,14},{10,11,14},{5,11,14},{5,6,14},{4,8,15},{4,6,15},{8,13,15},{7,8,13}}}, + +{19, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{9,10,12},{7,9,10},{4,9,12},{4,5,12},{10,13,14},{10,11,14},{5,11,14},{5,6,14},{6,8,15},{4,6,8},{8,13,15},{7,8,13}}}, + +{20, +0, +61, +4, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{7,10,12},{7,9,12},{5,9,12},{4,5,9},{10,13,14},{10,11,14},{6,11,14},{5,6,11},{4,8,15},{4,6,15},{8,13,15},{7,8,13}}}, + +{21, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{7,10,12},{7,9,12},{5,9,12},{4,5,9},{10,13,14},{10,11,14},{6,11,14},{5,6,11},{6,8,15},{4,6,8},{8,13,15},{7,8,13}}}, + +{22, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{7,10,12},{7,9,12},{5,9,12},{4,5,9},{10,13,14},{10,11,14},{5,11,14},{5,6,14},{6,8,15},{4,6,8},{8,13,15},{7,8,13}}}, + +{23, +0, +0, +1, +{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +{{7,10,13},{5,11,12},{6,14,15},{0,4,5},{0,5,6},{0,4,6},{4,8,9},{2,10,12},{2,10,11},{2,11,12},{3,13,14},{3,13,15},{3,14,15},{1,7,9},{1,7,8},{1,8,9},{7,10,12},{7,9,12},{4,9,12},{4,5,12},{10,13,14},{10,11,14},{5,11,14},{5,6,14},{6,8,15},{4,6,8},{8,13,15},{7,8,13}}}, + +}; + +} + diff --git a/src/USER-PTM/ptm_graph_data.h b/src/USER-PTM/ptm_graph_data.h new file mode 100644 index 0000000000000000000000000000000000000000..251c82d2f5b2381a19188709bca6ae6cbc87ad4d --- /dev/null +++ b/src/USER-PTM/ptm_graph_data.h @@ -0,0 +1,40 @@ +#ifndef PTM_GRAPH_DATA_H +#define PTM_GRAPH_DATA_H + +#include +#include "ptm_constants.h" + +namespace ptm { + +typedef struct +{ + int id; + uint64_t hash; + int automorphism_index; + int num_automorphisms; + int8_t canonical_labelling[PTM_MAX_POINTS]; + int8_t facets[PTM_MAX_FACETS][3]; +} graph_t; + +#define NUM_SC_GRAPHS 1 +#define NUM_ICO_GRAPHS 1 +#define NUM_FCC_GRAPHS 8 +#define NUM_HCP_GRAPHS 16 +#define NUM_BCC_GRAPHS 218 +#define NUM_DCUB_GRAPHS 12 +#define NUM_DHEX_GRAPHS 24 + +extern int8_t automorphisms[][PTM_MAX_POINTS]; + +extern graph_t graphs_sc[NUM_SC_GRAPHS]; +extern graph_t graphs_fcc[NUM_FCC_GRAPHS]; +extern graph_t graphs_hcp[NUM_HCP_GRAPHS]; +extern graph_t graphs_ico[NUM_ICO_GRAPHS]; +extern graph_t graphs_bcc[NUM_BCC_GRAPHS]; +extern graph_t graphs_dcub[NUM_DCUB_GRAPHS]; +extern graph_t graphs_dhex[NUM_DHEX_GRAPHS]; + +} + +#endif + diff --git a/src/USER-PTM/ptm_graph_tools.cpp b/src/USER-PTM/ptm_graph_tools.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f6fd34d097a19167896615f442ec818adc650fe0 --- /dev/null +++ b/src/USER-PTM/ptm_graph_tools.cpp @@ -0,0 +1,56 @@ +#include +#include +#include "ptm_graph_tools.h" +#include "ptm_constants.h" + + +namespace ptm { + +bool build_facet_map(int num_facets, int8_t facets[][3], int8_t common[PTM_MAX_NBRS][PTM_MAX_NBRS]) +{ + memset(common, -1, sizeof(int8_t) * PTM_MAX_NBRS * PTM_MAX_NBRS); + + for (int i = 0;i +#include "ptm_constants.h" + +namespace ptm { + +bool build_facet_map(int num_facets, int8_t facets[][3], int8_t common[PTM_MAX_NBRS][PTM_MAX_NBRS]); +int graph_degree(int num_facets, int8_t facets[][3], int num_nodes, int8_t* degree); + +} + +#endif + diff --git a/src/USER-PTM/ptm_index.cpp b/src/USER-PTM/ptm_index.cpp new file mode 100644 index 0000000000000000000000000000000000000000..24998dadd0a440048740cd2ff30fdbf9eb244e57 --- /dev/null +++ b/src/USER-PTM/ptm_index.cpp @@ -0,0 +1,218 @@ +#include +#include +#include +#include +#include +#include +#include +#include "ptm_convex_hull_incremental.h" +#include "ptm_graph_data.h" +#include "ptm_deformation_gradient.h" +#include "ptm_alloy_types.h" +#include "ptm_neighbour_ordering.h" +#include "ptm_normalize_vertices.h" +#include "ptm_quat.h" +#include "ptm_polar.h" +#include "ptm_initialize_data.h" +#include "ptm_structure_matcher.h" +#include "ptm_functions.h" +#include "ptm_constants.h" + + +//todo: verify that c == norm(template[1]) +static double calculate_interatomic_distance(int type, double scale) +{ + assert(type >= 1 && type <= 7); + double c[8] = {0, 1, 1, (7. - 3.5 * sqrt(3)), 1, 1, sqrt(3) * 4. / (6 * sqrt(2) + sqrt(3)), sqrt(3) * 4. / (6 * sqrt(2) + sqrt(3))}; + return c[type] / scale; +} + +static double calculate_lattice_constant(int type, double interatomic_distance) +{ + assert(type >= 1 && type <= 7); + double c[8] = {0, 2 / sqrt(2), 2 / sqrt(2), 2. / sqrt(3), 2 / sqrt(2), 1, 4 / sqrt(3), 4 / sqrt(3)}; + return c[type] * interatomic_distance; +} + +static int rotate_into_fundamental_zone(int type, double* q) +{ + if (type == PTM_MATCH_SC) return ptm::rotate_quaternion_into_cubic_fundamental_zone(q); + if (type == PTM_MATCH_FCC) return ptm::rotate_quaternion_into_cubic_fundamental_zone(q); + if (type == PTM_MATCH_BCC) return ptm::rotate_quaternion_into_cubic_fundamental_zone(q); + if (type == PTM_MATCH_ICO) return ptm::rotate_quaternion_into_icosahedral_fundamental_zone(q); + if (type == PTM_MATCH_HCP) return ptm::rotate_quaternion_into_hcp_fundamental_zone(q); + if (type == PTM_MATCH_DCUB) return ptm::rotate_quaternion_into_diamond_cubic_fundamental_zone(q); + if (type == PTM_MATCH_DHEX) return ptm::rotate_quaternion_into_diamond_hexagonal_fundamental_zone(q); + return -1; +} + +static void order_points(ptm_local_handle_t local_handle, int num_points, double (*unpermuted_points)[3], int32_t* unpermuted_numbers, bool topological_ordering, + int8_t* ordering, double (*points)[3], int32_t* numbers) +{ + if (topological_ordering) + { + double normalized_points[PTM_MAX_INPUT_POINTS][3]; + ptm::normalize_vertices(num_points, unpermuted_points, normalized_points); + int ret = ptm::calculate_neighbour_ordering((void*)local_handle, num_points, (const double (*)[3])normalized_points, ordering); + if (ret != 0) + topological_ordering = false; + } + + if (!topological_ordering) + for (int i=0;iref_struct; + if (ref == NULL) + return; + + *p_type = ref->type; + if (p_alloy_type != NULL && unpermuted_numbers != NULL) + *p_alloy_type = ptm::find_alloy_type(ref, res->mapping, numbers); + + int bi = rotate_into_fundamental_zone(ref->type, res->q); + int8_t temp[PTM_MAX_POINTS]; + for (int i=0;inum_nbrs+1;i++) + temp[ref->mapping[bi][i]] = res->mapping[i]; + + memcpy(res->mapping, temp, (ref->num_nbrs+1) * sizeof(int8_t)); + + if (F != NULL && F_res != NULL) + { + double scaled_points[PTM_MAX_INPUT_POINTS][3]; + + ptm::subtract_barycentre(ref->num_nbrs + 1, points, scaled_points); + for (int i = 0;inum_nbrs + 1;i++) + { + scaled_points[i][0] *= res->scale; + scaled_points[i][1] *= res->scale; + scaled_points[i][2] *= res->scale; + } + ptm::calculate_deformation_gradient(ref->num_nbrs + 1, ref->points, res->mapping, scaled_points, ref->penrose, F, F_res); + + if (P != NULL && U != NULL) + ptm::polar_decomposition_3x3(F, false, U, P); + } + + if (mapping != NULL) + for (int i=0;inum_nbrs + 1;i++) + mapping[i] = ordering[res->mapping[i]]; + + double interatomic_distance = calculate_interatomic_distance(ref->type, res->scale); + double lattice_constant = calculate_lattice_constant(ref->type, interatomic_distance); + + if (p_interatomic_distance != NULL) + *p_interatomic_distance = interatomic_distance; + + if (p_lattice_constant != NULL) + *p_lattice_constant = lattice_constant; + + *p_rmsd = res->rmsd; + *p_scale = res->scale; + memcpy(q, res->q, 4 * sizeof(double)); +} + + +extern bool ptm_initialized; + +int ptm_index( ptm_local_handle_t local_handle, int32_t flags, + int num_points, double (*unpermuted_points)[3], int32_t* unpermuted_numbers, bool topological_ordering, + int32_t* p_type, int32_t* p_alloy_type, double* p_scale, double* p_rmsd, double* q, double* F, double* F_res, + double* U, double* P, int8_t* mapping, double* p_interatomic_distance, double* p_lattice_constant) +{ + assert(ptm_initialized); + assert(num_points <= PTM_MAX_INPUT_POINTS); + + if (flags & PTM_CHECK_SC) + assert(num_points >= PTM_NUM_POINTS_SC); + + if (flags & PTM_CHECK_BCC) + assert(num_points >= PTM_NUM_POINTS_BCC); + + if (flags & (PTM_CHECK_FCC | PTM_CHECK_HCP | PTM_CHECK_ICO)) + assert(num_points >= PTM_NUM_POINTS_FCC); + + if (flags & (PTM_CHECK_DCUB | PTM_CHECK_DHEX)) + assert(num_points >= PTM_NUM_POINTS_DCUB); + + int ret = 0; + ptm::result_t res; + res.ref_struct = NULL; + res.rmsd = INFINITY; + + int8_t ordering[PTM_MAX_INPUT_POINTS]; + double points[PTM_MAX_POINTS][3]; + int32_t numbers[PTM_MAX_POINTS]; + + int8_t dordering[PTM_MAX_INPUT_POINTS]; + double dpoints[PTM_MAX_POINTS][3]; + int32_t dnumbers[PTM_MAX_POINTS]; + + ptm::convexhull_t ch; + double ch_points[PTM_MAX_INPUT_POINTS][3]; + + if (flags & (PTM_CHECK_SC | PTM_CHECK_FCC | PTM_CHECK_HCP | PTM_CHECK_ICO | PTM_CHECK_BCC)) + { + int num_lpoints = std::min(std::min(PTM_MAX_POINTS, 20), num_points); + order_points(local_handle, num_lpoints, unpermuted_points, unpermuted_numbers, topological_ordering, ordering, points, numbers); + ptm::normalize_vertices(num_lpoints, points, ch_points); + ch.ok = false; + + if (flags & PTM_CHECK_SC) + ret = match_general(&ptm::structure_sc, ch_points, points, &ch, &res); + + if (flags & (PTM_CHECK_FCC | PTM_CHECK_HCP | PTM_CHECK_ICO)) + ret = match_fcc_hcp_ico(ch_points, points, flags, &ch, &res); + + if (flags & PTM_CHECK_BCC) + ret = match_general(&ptm::structure_bcc, ch_points, points, &ch, &res); + } + + if (flags & (PTM_CHECK_DCUB | PTM_CHECK_DHEX)) + { + ret = ptm::calculate_diamond_neighbour_ordering(num_points, unpermuted_points, unpermuted_numbers, dordering, dpoints, dnumbers); + if (ret == 0) + { + ptm::normalize_vertices(PTM_NUM_NBRS_DCUB + 1, dpoints, ch_points); + ch.ok = false; + + ret = match_dcub_dhex(ch_points, dpoints, flags, &ch, &res); + } + } + + if (res.ref_struct != NULL && (res.ref_struct->type == PTM_MATCH_DCUB || res.ref_struct->type == PTM_MATCH_DHEX)) + { + output_data( &res, num_points, unpermuted_numbers, dpoints, dnumbers, dordering, + p_type, p_alloy_type, p_scale, p_rmsd, q, F, F_res, + U, P, mapping, p_interatomic_distance, p_lattice_constant); + } + else + { + output_data( &res, num_points, unpermuted_numbers, points, numbers, ordering, + p_type, p_alloy_type, p_scale, p_rmsd, q, F, F_res, + U, P, mapping, p_interatomic_distance, p_lattice_constant); + } + + return PTM_NO_ERROR; +} + diff --git a/src/USER-PTM/ptm_initialize_data.cpp b/src/USER-PTM/ptm_initialize_data.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8d96e2a2b77b877cdc020213cc98dd5934596824 --- /dev/null +++ b/src/USER-PTM/ptm_initialize_data.cpp @@ -0,0 +1,71 @@ +#include +#include +#include +#include +#include +#include +#include +#include "ptm_initialize_data.h" + + +static void make_facets_clockwise(int num_facets, int8_t (*facets)[3], const double (*points)[3]) +{ + double plane_normal[3]; + double origin[3] = {0, 0, 0}; + + for (int i = 0;inum_graphs;i++) + { + int8_t code[2 * PTM_MAX_EDGES]; + int8_t degree[PTM_MAX_NBRS]; + int _max_degree = ptm::graph_degree(s->num_facets, s->graphs[i].facets, s->num_nbrs, degree); + assert(_max_degree <= s->max_degree); + + make_facets_clockwise(s->num_facets, s->graphs[i].facets, &s->points[1]); + int ret = ptm::canonical_form_coloured(s->num_facets, s->graphs[i].facets, s->num_nbrs, degree, colours, s->graphs[i].canonical_labelling, (int8_t*)&code[0], &s->graphs[i].hash); + if (ret != 0) + return ret; + } + + return PTM_NO_ERROR; +} + +bool ptm_initialized = false; +int ptm_initialize_global() +{ + if (ptm_initialized) + return PTM_NO_ERROR; + + int8_t colours[PTM_MAX_POINTS] = {0}; + int8_t dcolours[PTM_MAX_POINTS] = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + + int ret = initialize_graphs(&ptm::structure_sc, colours); + ret |= initialize_graphs(&ptm::structure_fcc, colours); + ret |= initialize_graphs(&ptm::structure_hcp, colours); + ret |= initialize_graphs(&ptm::structure_ico, colours); + ret |= initialize_graphs(&ptm::structure_bcc, colours); + ret |= initialize_graphs(&ptm::structure_dcub, dcolours); + ret |= initialize_graphs(&ptm::structure_dhex, dcolours); + + if (ret == PTM_NO_ERROR) + ptm_initialized = true; + + return ret; +} + +ptm_local_handle_t ptm_initialize_local() +{ + assert(ptm_initialized); + return (ptm_local_handle_t)ptm::voronoi_initialize_local(); +} + +void ptm_uninitialize_local(ptm_local_handle_t ptr) +{ + ptm::voronoi_uninitialize_local(ptr); +} + diff --git a/src/USER-PTM/ptm_initialize_data.h b/src/USER-PTM/ptm_initialize_data.h new file mode 100644 index 0000000000000000000000000000000000000000..5374fbf7d0212ede7278c635e654d258680d650e --- /dev/null +++ b/src/USER-PTM/ptm_initialize_data.h @@ -0,0 +1,64 @@ +#ifndef PTM_INITIALIZE_DATA_H +#define PTM_INITIALIZE_DATA_H + + +#include "ptm_graph_data.h" +#include "ptm_graph_tools.h" +#include "ptm_deformation_gradient.h" +#include "ptm_fundamental_mappings.h" +#include "ptm_neighbour_ordering.h" +#include "ptm_canonical_coloured.h" +#include "ptm_convex_hull_incremental.h" + + +namespace ptm { + +typedef struct +{ + int type; + int num_nbrs; + int num_facets; + int max_degree; + int num_graphs; + int num_mappings; + graph_t* graphs; + const double (*points)[3]; + const double (*penrose)[3]; + const int8_t (*mapping)[PTM_MAX_POINTS]; +} refdata_t; + + +//refdata_t structure_sc = { .type = PTM_MATCH_SC, .num_nbrs = 6, .num_facets = 8, .max_degree = 4, .num_graphs = NUM_SC_GRAPHS, .graphs = graphs_sc, .points = ptm_template_sc, .penrose = penrose_sc , .mapping = mapping_sc }; +const refdata_t structure_sc = { PTM_MATCH_SC, 6, 8, 4, NUM_SC_GRAPHS, NUM_CUBIC_MAPPINGS, graphs_sc, ptm_template_sc, penrose_sc, mapping_sc }; +const refdata_t structure_fcc = { PTM_MATCH_FCC, 12, 20, 6, NUM_FCC_GRAPHS, NUM_CUBIC_MAPPINGS, graphs_fcc, ptm_template_fcc, penrose_fcc, mapping_fcc }; +const refdata_t structure_hcp = { PTM_MATCH_HCP, 12, 20, 6, NUM_HCP_GRAPHS, NUM_HEX_MAPPINGS, graphs_hcp, ptm_template_hcp, penrose_hcp, mapping_hcp }; +const refdata_t structure_ico = { PTM_MATCH_ICO, 12, 20, 6, NUM_ICO_GRAPHS, NUM_ICO_MAPPINGS, graphs_ico, ptm_template_ico, penrose_ico, mapping_ico }; +const refdata_t structure_bcc = { PTM_MATCH_BCC, 14, 24, 8, NUM_BCC_GRAPHS, NUM_CUBIC_MAPPINGS, graphs_bcc, ptm_template_bcc, penrose_bcc, mapping_bcc }; +const refdata_t structure_dcub = { PTM_MATCH_DCUB, 16, 28, 8, NUM_DCUB_GRAPHS, NUM_DCUB_MAPPINGS, graphs_dcub, ptm_template_dcub, penrose_dcub, mapping_dcub }; +const refdata_t structure_dhex = { PTM_MATCH_DHEX, 16, 28, 8, NUM_DHEX_GRAPHS, NUM_DHEX_MAPPINGS, graphs_dhex, ptm_template_dhex, penrose_dhex, mapping_dhex }; + +} + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ptm_local_handle* ptm_local_handle_t; +ptm_local_handle_t ptm_initialize_local(); +void ptm_uninitialize_local(ptm_local_handle_t ptr); + +int ptm_initialize_global(); + +//------------------------------------ +// global initialization switch +//------------------------------------ +extern bool ptm_initialized; + + +#ifdef __cplusplus +} +#endif + + +#endif + diff --git a/src/USER-PTM/ptm_neighbour_ordering.cpp b/src/USER-PTM/ptm_neighbour_ordering.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c77a779c6885fdaf435f955f0a156b35e6484134 --- /dev/null +++ b/src/USER-PTM/ptm_neighbour_ordering.cpp @@ -0,0 +1,205 @@ +#include +#include +#include +#include +#include +#include "ptm_constants.h" +#include "ptm_voronoi_cell.h" + + +namespace ptm { + +typedef struct +{ + double area; + double dist; + int index; +} sorthelper_t; + +static bool sorthelper_compare(sorthelper_t const& a, sorthelper_t const& b) +{ + if (a.area > b.area) + return true; + + if (a.area < b.area) + return false; + + if (a.dist < b.dist) + return true; + + return false; +} + +//todo: change voronoi code to return errors rather than exiting +static int calculate_voronoi_face_areas(int num_points, const double (*_points)[3], double* normsq, double max_norm, ptm_voro::voronoicell_neighbor* v, std::vector& nbr_indices, std::vector& face_areas) +{ + const double k = 1000 * max_norm; //todo: reduce this constant + v->init(-k,k,-k,k,-k,k); + + for (int i=1;inplane(x,y,z,normsq[i],i); + } + + v->neighbors(nbr_indices); + v->face_areas(face_areas); + return 0; +} + +int calculate_neighbour_ordering(void* _voronoi_handle, int num_points, const double (*_points)[3], int8_t* ordering) +{ + assert(num_points <= PTM_MAX_INPUT_POINTS); + + ptm_voro::voronoicell_neighbor* voronoi_handle = (ptm_voro::voronoicell_neighbor*)_voronoi_handle; + + double max_norm = 0; + double points[PTM_MAX_INPUT_POINTS][3]; + double normsq[PTM_MAX_INPUT_POINTS]; + for (int i = 0;i nbr_indices(num_points + 6); + std::vector face_areas(num_points + 6); + int ret = calculate_voronoi_face_areas(num_points, points, normsq, max_norm, voronoi_handle, nbr_indices, face_areas); + if (ret != 0) + return ret; + + double areas[PTM_MAX_INPUT_POINTS]; + memset(areas, 0, num_points * sizeof(double)); + areas[0] = INFINITY; + for (size_t i=0;i 0) + areas[index] = face_areas[i]; + } + + sorthelper_t data[PTM_MAX_INPUT_POINTS]; + for (int i=0;i= 3) + continue; + + ordering[1 + 4 + 3 * p + counts[p]] = q; + counts[p]++; + index++; + num_found++; + if (num_found >= 12) + break; + } + + if (num_found != 12) + return -1; + + for (int i=0;i + +namespace ptm { + +void subtract_barycentre(int num, double (*points)[3], double (*normalized)[3]) +{ + //calculate barycentre + double sum[3] = {0, 0, 0}; + for (int i=0;i nor the names of its contributors may be used to + * endorse or promote products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Source: started anew. + * + * Change History: + * 2009/04/13 Started source + * 2010/03/28 Modified FastCalcRMSDAndRotation() to handle tiny qsqr + * If trying all rows of the adjoint still gives too small + * qsqr, then just return identity matrix. (DLT) + * 2010/06/30 Fixed prob in assigning A[9] = 0 in InnerProduct() + * invalid mem access + * 2011/02/21 Made CenterCoords use weights + * 2011/05/02 Finally changed CenterCoords declaration in qcprot.h + * Also changed some functions to static + * 2011/07/08 put in fabs() to fix taking sqrt of small neg numbers, fp error + * 2012/07/26 minor changes to comments and main.c, more info (v.1.4) + * + * 2016/05/29 QCP method adapted for polar decomposition of a 3x3 matrix, + * for use in Polyhedral Template Matching. + * + ******************************************************************************/ + +#include +#include +#include +#include "ptm_quat.h" + + +namespace ptm { + +static void matmul_3x3(double* A, double* x, double* b) +{ + b[0] = A[0] * x[0] + A[1] * x[3] + A[2] * x[6]; + b[3] = A[3] * x[0] + A[4] * x[3] + A[5] * x[6]; + b[6] = A[6] * x[0] + A[7] * x[3] + A[8] * x[6]; + + b[1] = A[0] * x[1] + A[1] * x[4] + A[2] * x[7]; + b[4] = A[3] * x[1] + A[4] * x[4] + A[5] * x[7]; + b[7] = A[6] * x[1] + A[7] * x[4] + A[8] * x[7]; + + b[2] = A[0] * x[2] + A[1] * x[5] + A[2] * x[8]; + b[5] = A[3] * x[2] + A[4] * x[5] + A[5] * x[8]; + b[8] = A[6] * x[2] + A[7] * x[5] + A[8] * x[8]; +} + +static double matrix_determinant_3x3(double* A) +{ + return A[0] * (A[4]*A[8] - A[5]*A[7]) + - A[1] * (A[3]*A[8] - A[5]*A[6]) + + A[2] * (A[3]*A[7] - A[4]*A[6]); +} + +static void flip_matrix(double* A) +{ + for (int i=0;i<9;i++) + A[i] = -A[i]; +} + +static bool optimal_quaternion(double* A, bool polar, double E0, double* p_nrmsdsq, double* qopt) +{ + const double evecprec = 1e-6; + const double evalprec = 1e-11; + + double Sxx = A[0], Sxy = A[1], Sxz = A[2], + Syx = A[3], Syy = A[4], Syz = A[5], + Szx = A[6], Szy = A[7], Szz = A[8]; + + double Sxx2 = Sxx * Sxx, Syy2 = Syy * Syy, Szz2 = Szz * Szz, + Sxy2 = Sxy * Sxy, Syz2 = Syz * Syz, Sxz2 = Sxz * Sxz, + Syx2 = Syx * Syx, Szy2 = Szy * Szy, Szx2 = Szx * Szx; + + double fnorm_squared = Sxx2 + Syy2 + Szz2 + Sxy2 + Syz2 + Sxz2 + Syx2 + Szy2 + Szx2; + + double SyzSzymSyySzz2 = 2.0 * (Syz * Szy - Syy * Szz); + double Sxx2Syy2Szz2Syz2Szy2 = Syy2 + Szz2 - Sxx2 + Syz2 + Szy2; + double SxzpSzx = Sxz + Szx; + double SyzpSzy = Syz + Szy; + double SxypSyx = Sxy + Syx; + double SyzmSzy = Syz - Szy; + double SxzmSzx = Sxz - Szx; + double SxymSyx = Sxy - Syx; + double SxxpSyy = Sxx + Syy; + double SxxmSyy = Sxx - Syy; + double Sxy2Sxz2Syx2Szx2 = Sxy2 + Sxz2 - Syx2 - Szx2; + + double C[3]; + C[0] = Sxy2Sxz2Syx2Szx2 * Sxy2Sxz2Syx2Szx2 + + (Sxx2Syy2Szz2Syz2Szy2 + SyzSzymSyySzz2) * (Sxx2Syy2Szz2Syz2Szy2 - SyzSzymSyySzz2) + + (-(SxzpSzx)*(SyzmSzy)+(SxymSyx)*(SxxmSyy-Szz)) * (-(SxzmSzx)*(SyzpSzy)+(SxymSyx)*(SxxmSyy+Szz)) + + (-(SxzpSzx)*(SyzpSzy)-(SxypSyx)*(SxxpSyy-Szz)) * (-(SxzmSzx)*(SyzmSzy)-(SxypSyx)*(SxxpSyy+Szz)) + + (+(SxypSyx)*(SyzpSzy)+(SxzpSzx)*(SxxmSyy+Szz)) * (-(SxymSyx)*(SyzmSzy)+(SxzpSzx)*(SxxpSyy+Szz)) + + (+(SxypSyx)*(SyzmSzy)+(SxzmSzx)*(SxxmSyy-Szz)) * (-(SxymSyx)*(SyzpSzy)+(SxzmSzx)*(SxxpSyy-Szz)); + + C[1] = 8.0 * (Sxx*Syz*Szy + Syy*Szx*Sxz + Szz*Sxy*Syx - Sxx*Syy*Szz - Syz*Szx*Sxy - Szy*Syx*Sxz); + C[2] = -2.0 * fnorm_squared; + + //Newton-Raphson + double mxEigenV = polar ? sqrt(3 * fnorm_squared) : E0; + if (mxEigenV > evalprec) + { + for (int i=0;i<50;i++) + { + double oldg = mxEigenV; + double x2 = mxEigenV*mxEigenV; + double b = (x2 + C[2])*mxEigenV; + double a = b + C[1]; + double delta = ((a * mxEigenV + C[0]) / (2 * x2 * mxEigenV + b + a)); + mxEigenV -= delta; + if (fabs(mxEigenV - oldg) < fabs(evalprec * mxEigenV)) + break; + } + } + else + { + mxEigenV = 0.0; + } + + (*p_nrmsdsq) = std::max(0.0, 2.0 * (E0 - mxEigenV)); + + double a11 = SxxpSyy + Szz - mxEigenV; + double a12 = SyzmSzy; + double a13 = -SxzmSzx; + double a14 = SxymSyx; + + double a21 = SyzmSzy; + double a22 = SxxmSyy - Szz -mxEigenV; + double a23 = SxypSyx; + double a24 = SxzpSzx; + + double a31 = a13; + double a32 = a23; + double a33 = Syy - Sxx - Szz - mxEigenV; + double a34 = SyzpSzy; + + double a41 = a14; + double a42 = a24; + double a43 = a34; + double a44 = Szz - SxxpSyy - mxEigenV; + + double a3344_4334 = a33 * a44 - a43 * a34; + double a3244_4234 = a32 * a44 - a42 * a34; + double a3243_4233 = a32 * a43 - a42 * a33; + double a3143_4133 = a31 * a43 - a41 * a33; + double a3144_4134 = a31 * a44 - a41 * a34; + double a3142_4132 = a31 * a42 - a41 * a32; + double a1324_1423 = a13 * a24 - a14 * a23; + double a1224_1422 = a12 * a24 - a14 * a22; + double a1223_1322 = a12 * a23 - a13 * a22; + double a1124_1421 = a11 * a24 - a14 * a21; + double a1123_1321 = a11 * a23 - a13 * a21; + double a1122_1221 = a11 * a22 - a12 * a21; + + double q[4][4]; + q[0][0] = a12 * a3344_4334 - a13 * a3244_4234 + a14 * a3243_4233; + q[0][1] = -a11 * a3344_4334 + a13 * a3144_4134 - a14 * a3143_4133; + q[0][2] = a11 * a3244_4234 - a12 * a3144_4134 + a14 * a3142_4132; + q[0][3] = -a11 * a3243_4233 + a12 * a3143_4133 - a13 * a3142_4132; + + q[1][0] = a22 * a3344_4334 - a23 * a3244_4234 + a24 * a3243_4233; + q[1][1] = -a21 * a3344_4334 + a23 * a3144_4134 - a24 * a3143_4133; + q[1][2] = a21 * a3244_4234 - a22 * a3144_4134 + a24 * a3142_4132; + q[1][3] = -a21 * a3243_4233 + a22 * a3143_4133 - a23 * a3142_4132; + + q[2][0] = a32 * a1324_1423 - a33 * a1224_1422 + a34 * a1223_1322; + q[2][1] = -a31 * a1324_1423 + a33 * a1124_1421 - a34 * a1123_1321; + q[2][2] = a31 * a1224_1422 - a32 * a1124_1421 + a34 * a1122_1221; + q[2][3] = -a31 * a1223_1322 + a32 * a1123_1321 - a33 * a1122_1221; + + q[3][0] = a42 * a1324_1423 - a43 * a1224_1422 + a44 * a1223_1322; + q[3][1] = -a41 * a1324_1423 + a43 * a1124_1421 - a44 * a1123_1321; + q[3][2] = a41 * a1224_1422 - a42 * a1124_1421 + a44 * a1122_1221; + q[3][3] = -a41 * a1223_1322 + a42 * a1123_1321 - a43 * a1122_1221; + + double qsqr[4]; + for (int i=0;i<4;i++) + qsqr[i] = q[i][0]*q[i][0] + q[i][1]*q[i][1] + q[i][2]*q[i][2] + q[i][3]*q[i][3]; + + int bi = 0; + double max = 0; + for (int i=0;i<4;i++) + { + if (qsqr[i] > max) + { + bi = i; + max = qsqr[i]; + } + } + + bool too_small = false; + if (qsqr[bi] < evecprec) + { + //if qsqr is still too small, return the identity rotation. + q[bi][0] = 1; + q[bi][1] = 0; + q[bi][2] = 0; + q[bi][3] = 0; + too_small = true; + } + else + { + double normq = sqrt(qsqr[bi]); + q[bi][0] /= normq; + q[bi][1] /= normq; + q[bi][2] /= normq; + q[bi][3] /= normq; + } + + memcpy(qopt, q[bi], 4 * sizeof(double)); + return !too_small; +} + +int polar_decomposition_3x3(double* _A, bool right_sided, double* U, double* P) +{ + double A[9]; + memcpy(A, _A, 9 * sizeof(double)); + + double det = matrix_determinant_3x3(A); + if (det < 0) + flip_matrix(A); + + double q[4]; + double nrmsdsq = 0; + optimal_quaternion(A, true, -1, &nrmsdsq, q); + q[0] = -q[0]; + quaternion_to_rotation_matrix(q, U); + + if (det < 0) + flip_matrix(U); + + double UT[9] = {U[0], U[3], U[6], U[1], U[4], U[7], U[2], U[5], U[8]}; + + if (right_sided) + matmul_3x3(UT, _A, P); + else + matmul_3x3(_A, UT, P); + + return 0; +} + +void InnerProduct(double *A, int num, const double (*coords1)[3], double (*coords2)[3], int8_t* permutation) +{ + A[0] = A[1] = A[2] = A[3] = A[4] = A[5] = A[6] = A[7] = A[8] = 0.0; + + for (int i = 0; i < num; ++i) + { + double x1 = coords1[i][0]; + double y1 = coords1[i][1]; + double z1 = coords1[i][2]; + + double x2 = coords2[permutation[i]][0]; + double y2 = coords2[permutation[i]][1]; + double z2 = coords2[permutation[i]][2]; + + A[0] += x1 * x2; + A[1] += x1 * y2; + A[2] += x1 * z2; + + A[3] += y1 * x2; + A[4] += y1 * y2; + A[5] += y1 * z2; + + A[6] += z1 * x2; + A[7] += z1 * y2; + A[8] += z1 * z2; + } +} + +int FastCalcRMSDAndRotation(double *A, double E0, double *p_nrmsdsq, double *q, double* U) +{ + optimal_quaternion(A, false, E0, p_nrmsdsq, q); + quaternion_to_rotation_matrix(q, U); + return 0; +} + +} + diff --git a/src/USER-PTM/ptm_polar.h b/src/USER-PTM/ptm_polar.h new file mode 100644 index 0000000000000000000000000000000000000000..15d1f185b77749bf2207a3d44f7382e57b38f057 --- /dev/null +++ b/src/USER-PTM/ptm_polar.h @@ -0,0 +1,16 @@ +#ifndef PTM_POLAR_H +#define PTM_POLAR_H + +#include +#include + +namespace ptm { + +int polar_decomposition_3x3(double* _A, bool right_sided, double* U, double* P); +void InnerProduct(double *A, int num, const double (*coords1)[3], double (*coords2)[3], int8_t* permutation); +int FastCalcRMSDAndRotation(double *A, double E0, double *p_nrmsdsq, double *q, double* U); + +} + +#endif + diff --git a/src/USER-PTM/ptm_quat.cpp b/src/USER-PTM/ptm_quat.cpp new file mode 100644 index 0000000000000000000000000000000000000000..376cc749015ead94a7f1ce79a10438e0c1829e49 --- /dev/null +++ b/src/USER-PTM/ptm_quat.cpp @@ -0,0 +1,400 @@ +#include +#include +#include + + +namespace ptm { + +#define SIGN(x) (x >= 0 ? 1 : -1) +#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y)) +#define MAX(X, Y) (((X) > (Y)) ? (X) : (Y)) + + +#define SQRT_2 1.4142135623730951454746218587388284504414 +#define HALF_SQRT_2 0.7071067811865474617150084668537601828575 + +#define PHI 1.6180339887498949025257388711906969547272 +#define HALF_PHI 0.8090169943749474512628694355953484773636 + +#define INV_PHI 0.6180339887498947915034364086750429123640 +#define HALF_INV_PHI 0.3090169943749473957517182043375214561820 + +#define SQRT_5_ 2.23606797749978969640917366873127623544061835961152572427089 +#define SQRT_2_3 0.8164965809277260344600790631375275552273 +#define SQRT_1_6 0.4082482904638630172300395315687637776136 + + +double generator_cubic[24][4] = { {1, 0, 0, 0 }, + {0, 1, 0, 0 }, + {0, 0, 1, 0 }, + {0, 0, 0, 1 }, + {0.5, 0.5, 0.5, 0.5 }, + {0.5, 0.5, -0.5, 0.5 }, + {0.5, -0.5, 0.5, 0.5 }, + {0.5, -0.5, -0.5, 0.5 }, + {-0.5, 0.5, 0.5, 0.5 }, + {-0.5, 0.5, -0.5, 0.5 }, + {-0.5, -0.5, 0.5, 0.5 }, + {-0.5, -0.5, -0.5, 0.5 }, + {HALF_SQRT_2, HALF_SQRT_2, 0, 0 }, + {HALF_SQRT_2, 0, HALF_SQRT_2, 0 }, + {HALF_SQRT_2, 0, 0, HALF_SQRT_2 }, + {-HALF_SQRT_2, HALF_SQRT_2, 0, 0 }, + {-HALF_SQRT_2, 0, HALF_SQRT_2, 0 }, + {-HALF_SQRT_2, 0, 0, HALF_SQRT_2 }, + {0, HALF_SQRT_2, HALF_SQRT_2, 0 }, + {0, HALF_SQRT_2, 0, HALF_SQRT_2 }, + {0, 0, HALF_SQRT_2, HALF_SQRT_2 }, + {0, -HALF_SQRT_2, HALF_SQRT_2, 0 }, + {0, -HALF_SQRT_2, 0, HALF_SQRT_2 }, + {0, 0, -HALF_SQRT_2, HALF_SQRT_2 } }; + +double generator_diamond_cubic[12][4] = { {1, 0, 0, 0 }, + {0, 1, 0, 0 }, + {0, 0, 1, 0 }, + {0, 0, 0, 1 }, + {0.5, 0.5, 0.5, 0.5 }, + {0.5, 0.5, -0.5, 0.5 }, + {0.5, -0.5, 0.5, 0.5 }, + {0.5, -0.5, -0.5, 0.5 }, + {-0.5, 0.5, 0.5, 0.5 }, + {-0.5, 0.5, -0.5, 0.5 }, + {-0.5, -0.5, 0.5, 0.5 }, + {-0.5, -0.5, -0.5, 0.5 } }; + +double generator_hcp[6][4] = { {1, 0, 0, 0}, + {0.5, 0.5, 0.5, 0.5}, + {0.5, -0.5, -0.5, -0.5}, + {0, SQRT_2_3, -SQRT_1_6, -SQRT_1_6}, + {0, SQRT_1_6, -SQRT_2_3, SQRT_1_6}, + {0, SQRT_1_6, SQRT_1_6, -SQRT_2_3} }; + +double generator_diamond_hexagonal[3][4] = { {1, 0, 0, 0}, + {0.5, 0.5, 0.5, 0.5}, + {0.5, -0.5, -0.5, -0.5} }; + +double generator_icosahedral[60][4] = { {1, 0, 0, 0}, + {HALF_PHI, -HALF_INV_PHI, -0.5, 0}, + {HALF_PHI, 0, -HALF_INV_PHI, -0.5}, + {HALF_PHI, -0.5, 0, -HALF_INV_PHI}, + {HALF_PHI, HALF_INV_PHI, -0.5, 0}, + {HALF_PHI, 0, HALF_INV_PHI, -0.5}, + {HALF_PHI, -0.5, 0, HALF_INV_PHI}, + {HALF_PHI, 0.5, 0, -HALF_INV_PHI}, + {HALF_PHI, 0, -HALF_INV_PHI, 0.5}, + {HALF_PHI, -HALF_INV_PHI, 0.5, 0}, + {HALF_PHI, 0, HALF_INV_PHI, 0.5}, + {HALF_PHI, HALF_INV_PHI, 0.5, 0}, + {HALF_PHI, 0.5, 0, HALF_INV_PHI}, + {0.5, HALF_PHI, -HALF_INV_PHI, 0}, + {0.5, HALF_PHI, HALF_INV_PHI, 0}, + {0.5, 0.5, 0.5, 0.5}, + {0.5, 0.5, 0.5, -0.5}, + {0.5, 0.5, -0.5, 0.5}, + {0.5, 0.5, -0.5, -0.5}, + {0.5, HALF_INV_PHI, 0, HALF_PHI}, + {0.5, HALF_INV_PHI, 0, -HALF_PHI}, + {0.5, 0, HALF_PHI, -HALF_INV_PHI}, + {0.5, 0, HALF_PHI, HALF_INV_PHI}, + {0.5, 0, -HALF_PHI, -HALF_INV_PHI}, + {0.5, 0, -HALF_PHI, HALF_INV_PHI}, + {0.5, -HALF_INV_PHI, 0, HALF_PHI}, + {0.5, -HALF_INV_PHI, 0, -HALF_PHI}, + {0.5, -0.5, 0.5, 0.5}, + {0.5, -0.5, 0.5, -0.5}, + {0.5, -0.5, -0.5, 0.5}, + {0.5, -0.5, -0.5, -0.5}, + {0.5, -HALF_PHI, -HALF_INV_PHI, 0}, + {0.5, -HALF_PHI, HALF_INV_PHI, 0}, + {HALF_INV_PHI, -HALF_PHI, 0, -0.5}, + {HALF_INV_PHI, 0, -0.5, -HALF_PHI}, + {HALF_INV_PHI, -0.5, -HALF_PHI, 0}, + {HALF_INV_PHI, 0, 0.5, -HALF_PHI}, + {HALF_INV_PHI, -HALF_PHI, 0, 0.5}, + {HALF_INV_PHI, 0.5, -HALF_PHI, 0}, + {HALF_INV_PHI, HALF_PHI, 0, -0.5}, + {HALF_INV_PHI, -0.5, HALF_PHI, 0}, + {HALF_INV_PHI, 0, -0.5, HALF_PHI}, + {HALF_INV_PHI, HALF_PHI, 0, 0.5}, + {HALF_INV_PHI, 0, 0.5, HALF_PHI}, + {HALF_INV_PHI, 0.5, HALF_PHI, 0}, + {0, 1, 0, 0}, + {0, HALF_PHI, -0.5, HALF_INV_PHI}, + {0, HALF_PHI, -0.5, -HALF_INV_PHI}, + {0, HALF_PHI, 0.5, HALF_INV_PHI}, + {0, HALF_PHI, 0.5, -HALF_INV_PHI}, + {0, 0.5, HALF_INV_PHI, -HALF_PHI}, + {0, 0.5, HALF_INV_PHI, HALF_PHI}, + {0, 0.5, -HALF_INV_PHI, -HALF_PHI}, + {0, 0.5, -HALF_INV_PHI, HALF_PHI}, + {0, HALF_INV_PHI, -HALF_PHI, 0.5}, + {0, HALF_INV_PHI, -HALF_PHI, -0.5}, + {0, HALF_INV_PHI, HALF_PHI, 0.5}, + {0, HALF_INV_PHI, HALF_PHI, -0.5}, + {0, 0, 1, 0}, + {0, 0, 0, 1} }; + +static void quat_rot(double* r, double* a, double* b) +{ + b[0] = (r[0] * a[0] - r[1] * a[1] - r[2] * a[2] - r[3] * a[3]); + b[1] = (r[0] * a[1] + r[1] * a[0] + r[2] * a[3] - r[3] * a[2]); + b[2] = (r[0] * a[2] - r[1] * a[3] + r[2] * a[0] + r[3] * a[1]); + b[3] = (r[0] * a[3] + r[1] * a[2] - r[2] * a[1] + r[3] * a[0]); +} + +static int rotate_quaternion_into_fundamental_zone(int num_generators, double (*generator)[4], double* q) +{ + double max = 0.0; + int i = 0, bi = -1; + for (i=0;i max) + { + max = t; + bi = i; + } + } + + double f[4]; + quat_rot(q, generator[bi], f); + memcpy(q, &f, 4 * sizeof(double)); + if (q[0] < 0) + { + q[0] = -q[0]; + q[1] = -q[1]; + q[2] = -q[2]; + q[3] = -q[3]; + } + + return bi; +} + +int rotate_quaternion_into_cubic_fundamental_zone(double* q) +{ + return rotate_quaternion_into_fundamental_zone(24, generator_cubic, q); +} + +int rotate_quaternion_into_diamond_cubic_fundamental_zone(double* q) +{ + return rotate_quaternion_into_fundamental_zone(12, generator_diamond_cubic, q); +} + +int rotate_quaternion_into_icosahedral_fundamental_zone(double* q) +{ + return rotate_quaternion_into_fundamental_zone(60, generator_icosahedral, q); +} + +int rotate_quaternion_into_hcp_fundamental_zone(double* q) +{ + return rotate_quaternion_into_fundamental_zone(6, generator_hcp, q); +} + +int rotate_quaternion_into_diamond_hexagonal_fundamental_zone(double* q) +{ + return rotate_quaternion_into_fundamental_zone(3, generator_diamond_hexagonal, q); +} + +double quat_dot(double* a, double* b) +{ + return a[0] * b[0] + + a[1] * b[1] + + a[2] * b[2] + + a[3] * b[3]; +} + +double quat_size(double* q) +{ + return sqrt(quat_dot(q, q)); +} + +void normalize_quaternion(double* q) +{ + double size = quat_size(q); + + q[0] /= size; + q[1] /= size; + q[2] /= size; + q[3] /= size; +} + +void rotation_matrix_to_quaternion(double* u, double* q) +{ + double r11 = u[0]; + double r12 = u[1]; + double r13 = u[2]; + double r21 = u[3]; + double r22 = u[4]; + double r23 = u[5]; + double r31 = u[6]; + double r32 = u[7]; + double r33 = u[8]; + + q[0] = (1.0 + r11 + r22 + r33) / 4.0; + q[1] = (1.0 + r11 - r22 - r33) / 4.0; + q[2] = (1.0 - r11 + r22 - r33) / 4.0; + q[3] = (1.0 - r11 - r22 + r33) / 4.0; + + q[0] = sqrt(MAX(0, q[0])); + q[1] = sqrt(MAX(0, q[1])); + q[2] = sqrt(MAX(0, q[2])); + q[3] = sqrt(MAX(0, q[3])); + + double m0 = MAX(q[0], q[1]); + double m1 = MAX(q[2], q[3]); + double max = MAX(m0, m1); + + int i = 0; + for (i=0;i<4;i++) + if (q[i] == max) + break; + + if (i == 0) + { + q[1] *= SIGN(r32 - r23); + q[2] *= SIGN(r13 - r31); + q[3] *= SIGN(r21 - r12); + } + else if (i == 1) + { + q[0] *= SIGN(r32 - r23); + q[2] *= SIGN(r21 + r12); + q[3] *= SIGN(r13 + r31); + } + else if (i == 2) + { + q[0] *= SIGN(r13 - r31); + q[1] *= SIGN(r21 + r12); + q[3] *= SIGN(r32 + r23); + } + else if (i == 3) + { + q[0] *= SIGN(r21 - r12); + q[1] *= SIGN(r31 + r13); + q[2] *= SIGN(r32 + r23); + } + + normalize_quaternion(q); +} + +void quaternion_to_rotation_matrix(double* q, double* u) +{ + double a = q[0]; + double b = q[1]; + double c = q[2]; + double d = q[3]; + + u[0] = a*a + b*b - c*c - d*d; + u[1] = 2*b*c - 2*a*d; + u[2] = 2*b*d + 2*a*c; + + u[3] = 2*b*c + 2*a*d; + u[4] = a*a - b*b + c*c - d*d; + u[5] = 2*c*d - 2*a*b; + + u[6] = 2*b*d - 2*a*c; + u[7] = 2*c*d + 2*a*b; + u[8] = a*a - b*b - c*c + d*d; +} + +double quat_quick_misorientation(double* q1, double* q2) +{ + double t = quat_dot(q1, q2); + t = MIN(1, MAX(-1, t)); + return 2 * t * t - 1; +} + +double quat_misorientation(double* q1, double* q2) +{ + return acos(quat_quick_misorientation(q1, q2)); +} + + +double quat_quick_disorientation_cubic(double* q0, double* q1) +{ + double qrot[4]; + double qinv[4] = {q0[0], -q0[1], -q0[2], -q0[3]}; + quat_rot(qinv, q1, qrot); + + rotate_quaternion_into_cubic_fundamental_zone(qrot); + double t = qrot[0]; + t = MIN(1, MAX(-1, t)); + return 2 * t * t - 1; +} + +double quat_disorientation_cubic(double* q0, double* q1) +{ + return acos(quat_quick_disorientation_cubic(q0, q1)); +} + +double quat_quick_disorientation_diamond_cubic(double* q0, double* q1) +{ + double qrot[4]; + double qinv[4] = {q0[0], -q0[1], -q0[2], -q0[3]}; + quat_rot(qinv, q1, qrot); + + rotate_quaternion_into_diamond_cubic_fundamental_zone(qrot); + double t = qrot[0]; + t = MIN(1, MAX(-1, t)); + return 2 * t * t - 1; +} + +double quat_disorientation_diamond_cubic(double* q0, double* q1) +{ + return acos(quat_quick_disorientation_diamond_cubic(q0, q1)); +} + +double quat_quick_disorientation_hcp(double* q0, double* q1) +{ + double qrot[4]; + double qinv[4] = {q0[0], -q0[1], -q0[2], -q0[3]}; + quat_rot(qinv, q1, qrot); + + rotate_quaternion_into_hcp_fundamental_zone(qrot); + double t = qrot[0]; + t = MIN(1, MAX(-1, t)); + return 2 * t * t - 1; +} + +double quat_disorientation_hcp(double* q0, double* q1) +{ + return acos(quat_quick_disorientation_hcp(q0, q1)); +} + +double quat_quick_disorientation_diamond_hexagonal(double* q0, double* q1) +{ + double qrot[4]; + double qinv[4] = {q0[0], -q0[1], -q0[2], -q0[3]}; + quat_rot(qinv, q1, qrot); + + rotate_quaternion_into_diamond_hexagonal_fundamental_zone(qrot); + double t = qrot[0]; + t = MIN(1, MAX(-1, t)); + return 2 * t * t - 1; +} + +double quat_disorientation_diamond_hexagonal(double* q0, double* q1) +{ + return acos(quat_quick_disorientation_diamond_hexagonal(q0, q1)); +} + +double quat_quick_disorientation_icosahedral(double* q0, double* q1) +{ + double qrot[4]; + double qinv[4] = {q0[0], -q0[1], -q0[2], -q0[3]}; + quat_rot(qinv, q1, qrot); + + rotate_quaternion_into_icosahedral_fundamental_zone(qrot); + double t = qrot[0]; + t = MIN(1, MAX(-1, t)); + return 2 * t * t - 1; +} + +double quat_disorientation_icosahedral(double* q0, double* q1) +{ + return acos(quat_quick_disorientation_icosahedral(q0, q1)); +} + +} + diff --git a/src/USER-PTM/ptm_quat.h b/src/USER-PTM/ptm_quat.h new file mode 100644 index 0000000000000000000000000000000000000000..74caa2c62c3776eee0e3953438fa6ff2da6794f8 --- /dev/null +++ b/src/USER-PTM/ptm_quat.h @@ -0,0 +1,33 @@ +#ifndef PTM_QUAT_H +#define PTM_QUAT_H + +namespace ptm { + +int rotate_quaternion_into_cubic_fundamental_zone(double* q); +int rotate_quaternion_into_diamond_cubic_fundamental_zone(double* q); +int rotate_quaternion_into_icosahedral_fundamental_zone(double* q); +int rotate_quaternion_into_hcp_fundamental_zone(double* q); +int rotate_quaternion_into_diamond_hexagonal_fundamental_zone(double* q); + +void normalize_quaternion(double* q); +void quaternion_to_rotation_matrix(double* q, double* U); +void rotation_matrix_to_quaternion(double* u, double* q); +double quat_dot(double* a, double* b); +double quat_quick_misorientation(double* q1, double* q2); +double quat_misorientation(double* q1, double* q2); + +double quat_quick_disorientation_cubic(double* q0, double* q1); +double quat_disorientation_cubic(double* q0, double* q1); +double quat_quick_disorientation_diamond_cubic(double* q0, double* q1); +double quat_disorientation_diamond_cubic(double* q0, double* q1); +double quat_quick_disorientation_hcp(double* q0, double* q1); +double quat_disorientation_hcp(double* q0, double* q1); +double quat_quick_disorientation_diamond_hexagonal(double* q0, double* q1); +double quat_disorientation_diamond_hexagonal(double* q0, double* q1); +double quat_quick_disorientation_icosahedral(double* q0, double* q1); +double quat_disorientation_icosahedral(double* q0, double* q1); + +} + +#endif + diff --git a/src/USER-PTM/ptm_structure_matcher.cpp b/src/USER-PTM/ptm_structure_matcher.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a86b3670cef6818da8386f5d250b721d9a75752d --- /dev/null +++ b/src/USER-PTM/ptm_structure_matcher.cpp @@ -0,0 +1,298 @@ +#include +#include +#include +#include +#include +#include +#include +#include "ptm_convex_hull_incremental.h" +#include "ptm_canonical_coloured.h" +#include "ptm_graph_data.h" +#include "ptm_graph_tools.h" +#include "ptm_normalize_vertices.h" +#include "ptm_polar.h" +#include "ptm_structure_matcher.h" +#include "ptm_constants.h" + + +namespace ptm { + +static double calc_rmsd(int num_points, const double (*ideal_points)[3], double (*normalized)[3], int8_t* mapping, + double G1, double G2, double E0, double* q, double* p_scale) +{ + double A0[9]; + InnerProduct(A0, num_points, ideal_points, normalized, mapping); + + double nrmsdsq, rot[9]; + FastCalcRMSDAndRotation(A0, E0, &nrmsdsq, q, rot); + + double k0 = 0; + for (int i=0;inum_nbrs + 1; + const double (*ideal_points)[3] = s->points; + int8_t inverse_labelling[PTM_MAX_POINTS]; + int8_t mapping[PTM_MAX_POINTS]; + + for (int i=0; inum_graphs;i++) + { + if (hash != s->graphs[i].hash) + continue; + + graph_t* gref = &s->graphs[i]; + for (int j = 0;jnum_automorphisms;j++) + { + for (int k=0;kautomorphism_index + j][k]] = inverse_labelling[ gref->canonical_labelling[k] ]; + + double q[4], scale = 0; + double rmsd = calc_rmsd(num_points, ideal_points, normalized, mapping, G1, G2, E0, q, &scale); + if (rmsd < res->rmsd) + { + res->rmsd = rmsd; + res->scale = scale; + res->ref_struct = s; + memcpy(res->q, q, 4 * sizeof(double)); + memcpy(res->mapping, mapping, sizeof(int8_t) * num_points); + } + } + } +} + +int match_general(const refdata_t* s, double (*ch_points)[3], double (*points)[3], convexhull_t* ch, result_t* res) +{ + int8_t degree[PTM_MAX_NBRS]; + int8_t facets[PTM_MAX_FACETS][3]; + + int ret = get_convex_hull(s->num_nbrs + 1, (const double (*)[3])ch_points, ch, facets); + ch->ok = ret >= 0; + if (ret != 0) + return PTM_NO_ERROR; + + if (ch->num_facets != s->num_facets) + return PTM_NO_ERROR; //incorrect number of facets in convex hull + + int max_degree = graph_degree(s->num_facets, facets, s->num_nbrs, degree); + if (max_degree > s->max_degree) + return PTM_NO_ERROR; + + if (s->type == PTM_MATCH_SC) + for (int i = 0;inum_nbrs;i++) + if (degree[i] != 4) + return PTM_NO_ERROR; + + double normalized[PTM_MAX_POINTS][3]; + subtract_barycentre(s->num_nbrs + 1, points, normalized); + + int8_t code[2 * PTM_MAX_EDGES]; + int8_t colours[PTM_MAX_POINTS] = {0}; + int8_t canonical_labelling[PTM_MAX_POINTS]; + uint64_t hash = 0; + ret = canonical_form_coloured(s->num_facets, facets, s->num_nbrs, degree, colours, canonical_labelling, &code[0], &hash); + if (ret != PTM_NO_ERROR) + return ret; + + check_graphs(s, hash, canonical_labelling, normalized, res); + return PTM_NO_ERROR; +} + +int match_fcc_hcp_ico(double (*ch_points)[3], double (*points)[3], int32_t flags, convexhull_t* ch, result_t* res) +{ + int num_nbrs = structure_fcc.num_nbrs; + int num_facets = structure_fcc.num_facets; + int max_degree = structure_fcc.max_degree; + + int8_t degree[PTM_MAX_NBRS]; + int8_t facets[PTM_MAX_FACETS][3]; + + int ret = get_convex_hull(num_nbrs + 1, (const double (*)[3])ch_points, ch, facets); + ch->ok = ret >= 0; + if (ret != 0) + return PTM_NO_ERROR; + + if (ch->num_facets != num_facets) + return PTM_NO_ERROR; //incorrect number of facets in convex hull + + int _max_degree = graph_degree(num_facets, facets, num_nbrs, degree); + if (_max_degree > max_degree) + return PTM_NO_ERROR; + + double normalized[PTM_MAX_POINTS][3]; + subtract_barycentre(num_nbrs + 1, points, normalized); + + int8_t code[2 * PTM_MAX_EDGES]; + int8_t colours[PTM_MAX_POINTS] = {0}; + int8_t canonical_labelling[PTM_MAX_POINTS]; + uint64_t hash = 0; + ret = canonical_form_coloured(num_facets, facets, num_nbrs, degree, colours, canonical_labelling, &code[0], &hash); + if (ret != PTM_NO_ERROR) + return ret; + + if (flags & PTM_CHECK_FCC) check_graphs(&structure_fcc, hash, canonical_labelling, normalized, res); + if (flags & PTM_CHECK_HCP) check_graphs(&structure_hcp, hash, canonical_labelling, normalized, res); + if (flags & PTM_CHECK_ICO) check_graphs(&structure_ico, hash, canonical_labelling, normalized, res); + return PTM_NO_ERROR; +} + +int match_dcub_dhex(double (*ch_points)[3], double (*points)[3], int32_t flags, convexhull_t* ch, result_t* res) +{ + int num_nbrs = structure_dcub.num_nbrs; + int num_facets = structure_fcc.num_facets; + int max_degree = structure_dcub.max_degree; + + + int8_t facets[PTM_MAX_FACETS][3]; + int ret = get_convex_hull(num_nbrs + 1, (const double (*)[3])ch_points, ch, facets); + ch->ok = ret >= 0; + if (ret != 0) + return PTM_NO_ERROR; + + //check for facets with multiple inner atoms + bool inverted[4] = {false, false, false, false}; + for (int i=0;inum_facets;i++) + { + int n = 0; + for (int j=0;j<3;j++) + { + if (facets[i][j] <= 3) + { + inverted[facets[i][j]] = true; + n++; + } + } + if (n > 1) + return PTM_NO_ERROR; + } + + int num_inverted = 0; + for (int i=0;i<4;i++) + num_inverted += inverted[i] ? 1 : 0; + + if (ch->num_facets != num_facets + 2 * num_inverted) + return PTM_NO_ERROR; //incorrect number of facets in convex hull + + int8_t degree[PTM_MAX_NBRS]; + int _max_degree = graph_degree(num_facets, facets, num_nbrs, degree); + if (_max_degree > max_degree) + return PTM_NO_ERROR; + + int num_found = 0; + int8_t toadd[4][3]; + for (int i=0;inum_facets;i++) + { + int a = facets[i][0]; + int b = facets[i][1]; + int c = facets[i][2]; + if (a <= 3 || b <= 3 || c <= 3) + continue; + + int i0 = (a - 4) / 3; + int i1 = (b - 4) / 3; + int i2 = (c - 4) / 3; + + if (i0 == i1 && i0 == i2) + { + if (num_found + num_inverted >= 4) + return PTM_NO_ERROR; + + toadd[num_found][0] = a; + toadd[num_found][1] = b; + toadd[num_found][2] = c; + num_found++; + + memcpy(&facets[i], &facets[ch->num_facets - 1], 3 * sizeof(int8_t)); + ch->num_facets--; + i--; + } + } + + if (num_found + num_inverted != 4) + return PTM_NO_ERROR; + + for (int i=0;inum_facets][0] = i0; + facets[ch->num_facets][1] = b; + facets[ch->num_facets][2] = c; + ch->num_facets++; + + facets[ch->num_facets][0] = a; + facets[ch->num_facets][1] = i0; + facets[ch->num_facets][2] = c; + ch->num_facets++; + + facets[ch->num_facets][0] = a; + facets[ch->num_facets][1] = b; + facets[ch->num_facets][2] = i0; + ch->num_facets++; + } + + _max_degree = graph_degree(ch->num_facets, facets, num_nbrs, degree); + if (_max_degree > max_degree) + return PTM_NO_ERROR; + + double normalized[PTM_MAX_POINTS][3]; + subtract_barycentre(num_nbrs + 1, points, normalized); + + int8_t code[2 * PTM_MAX_EDGES]; + int8_t colours[PTM_MAX_POINTS] = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + int8_t canonical_labelling[PTM_MAX_POINTS]; + uint64_t hash = 0; + ret = canonical_form_coloured(ch->num_facets, facets, num_nbrs, degree, colours, canonical_labelling, &code[0], &hash); + if (ret != PTM_NO_ERROR) + return ret; + + if (flags & PTM_CHECK_DCUB) check_graphs(&structure_dcub, hash, canonical_labelling, normalized, res); + if (flags & PTM_CHECK_DHEX) check_graphs(&structure_dhex, hash, canonical_labelling, normalized, res); + + return PTM_NO_ERROR; +} + +} + diff --git a/src/USER-PTM/ptm_structure_matcher.h b/src/USER-PTM/ptm_structure_matcher.h new file mode 100644 index 0000000000000000000000000000000000000000..ffaed78e82dceae4ab29b52dbae77b8f936c7e33 --- /dev/null +++ b/src/USER-PTM/ptm_structure_matcher.h @@ -0,0 +1,26 @@ +#ifndef PTM_STRUCTURE_MATCHER_H +#define PTM_STRUCTURE_MATCHER_H + +#include "ptm_initialize_data.h" +#include "ptm_constants.h" + + +namespace ptm { + +typedef struct +{ + double rmsd; + double scale; + double q[4]; //rotation in quaternion form (rigid body transformation) + int8_t mapping[PTM_MAX_POINTS]; + const refdata_t* ref_struct; +} result_t; + +int match_general(const refdata_t* s, double (*ch_points)[3], double (*points)[3], convexhull_t* ch, result_t* res); +int match_fcc_hcp_ico(double (*ch_points)[3], double (*points)[3], int32_t flags, convexhull_t* ch, result_t* res); +int match_dcub_dhex(double (*ch_points)[3], double (*points)[3], int32_t flags, convexhull_t* ch, result_t* res); + +} + +#endif + diff --git a/src/USER-PTM/ptm_voronoi_cell.cpp b/src/USER-PTM/ptm_voronoi_cell.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ffd7a95ea2cb62850501e6cc702d649d5fc36eea --- /dev/null +++ b/src/USER-PTM/ptm_voronoi_cell.cpp @@ -0,0 +1,1368 @@ +// Voro++, a 3D cell-based Voronoi library +// +// Author : Chris H. Rycroft (LBL / UC Berkeley) +// Email : chr@alum.mit.edu +// Date : August 30th 2011 +// +// Modified by PM Larsen for use in Polyhedral Template Matching + +/** \file cell.cc + * \brief Function implementations for the voronoicell and related classes. */ + +#include +#include +#include +#include "ptm_voronoi_config.h" +#include "ptm_voronoi_cell.h" + +namespace ptm_voro { + +inline void voro_fatal_error(const char *p,int status) { + fprintf(stderr,"voro++: %s\n",p); + exit(status); + //return -1;//status; +} + +/** Constructs a Voronoi cell and sets up the initial memory. */ +voronoicell_base::voronoicell_base() : + current_vertices(init_vertices), current_vertex_order(init_vertex_order), + current_delete_size(init_delete_size), current_delete2_size(init_delete2_size), + ed(new int*[current_vertices]), nu(new int[current_vertices]), + pts(new double[3*current_vertices]), mem(new int[current_vertex_order]), + mec(new int[current_vertex_order]), mep(new int*[current_vertex_order]), + ds(new int[current_delete_size]), stacke(ds+current_delete_size), + ds2(new int[current_delete2_size]), stacke2(ds2+current_delete_size), + current_marginal(init_marginal), marg(new int[current_marginal]) { + int i; + for(i=0;i<3;i++) { + mem[i]=init_n_vertices;mec[i]=0; + mep[i]=new int[init_n_vertices*((i<<1)+1)]; + } + mem[3]=init_3_vertices;mec[3]=0; + mep[3]=new int[init_3_vertices*7]; + for(i=4;i=0;i--) if(mem[i]>0) delete [] mep[i]; + delete [] marg; + delete [] ds2;delete [] ds; + delete [] mep;delete [] mec; + delete [] mem;delete [] pts; + delete [] nu;delete [] ed; +} + +/** Ensures that enough memory is allocated prior to carrying out a copy. + * \param[in] vc a reference to the specialized version of the calling class. + * \param[in] vb a pointered to the class to be copied. */ +template +void voronoicell_base::check_memory_for_copy(vc_class &vc,voronoicell_base* vb) { + while(current_vertex_ordercurrent_vertex_order) add_memory_vorder(vc); + for(int i=0;imec[i]) add_memory(vc,i,ds2); + while(current_verticesp) add_memory_vertices(vc); +} + +/** Increases the memory storage for a particular vertex order, by increasing + * the size of the of the corresponding mep array. If the arrays already exist, + * their size is doubled; if they don't exist, then new ones of size + * init_n_vertices are allocated. The routine also ensures that the pointers in + * the ed array are updated, by making use of the back pointers. For the cases + * where the back pointer has been temporarily overwritten in the marginal + * vertex code, the auxiliary delete stack is scanned to find out how to update + * the ed value. If the template has been instantiated with the neighbor + * tracking turned on, then the routine also reallocates the corresponding mne + * array. + * \param[in] i the order of the vertex memory to be increased. */ +template +void voronoicell_base::add_memory(vc_class &vc,int i,int *stackp2) { + int s=(i<<1)+1; + if(mem[i]==0) { + vc.n_allocate(i,init_n_vertices); + mep[i]=new int[init_n_vertices*s]; + mem[i]=init_n_vertices; +#if VOROPP_VERBOSE >=2 + fprintf(stderr,"Order %d vertex memory created\n",i); +#endif + } else { + int j=0,k,*l; + mem[i]<<=1; + if(mem[i]>max_n_vertices) voro_fatal_error("Point memory allocation exceeded absolute maximum",VOROPP_MEMORY_ERROR); +#if VOROPP_VERBOSE >=2 + fprintf(stderr,"Order %d vertex memory scaled up to %d\n",i,mem[i]); +#endif + l=new int[s*mem[i]]; + int m=0; + vc.n_allocate_aux1(i); + while(j=0) { + ed[k]=l+j; + vc.n_set_to_aux1_offset(k,m); + } else { + int *dsp; + for(dsp=ds2;dsp=3 + fputs("Relocated dangling pointer",stderr); +#endif + } + for(k=0;k +void voronoicell_base::add_memory_vertices(vc_class &vc) { + +printf("nope: %d\n", current_vertices); +exit(3); + + int i=(current_vertices<<1),j,**pp,*pnu; + if(i>max_vertices) voro_fatal_error("Vertex memory allocation exceeded absolute maximum",VOROPP_MEMORY_ERROR); +#if VOROPP_VERBOSE >=2 + fprintf(stderr,"Vertex memory scaled up to %d\n",i); +#endif + double *ppts; + pp=new int*[i]; + for(j=0;j +void voronoicell_base::add_memory_vorder(vc_class &vc) { + int i=(current_vertex_order<<1),j,*p1,**p2; + if(i>max_vertex_order) voro_fatal_error("Vertex order memory allocation exceeded absolute maximum",VOROPP_MEMORY_ERROR); +#if VOROPP_VERBOSE >=2 + fprintf(stderr,"Vertex order memory scaled up to %d\n",i); +#endif + p1=new int[i]; + for(j=0;jmax_delete_size) voro_fatal_error("Delete stack 1 memory allocation exceeded absolute maximum",VOROPP_MEMORY_ERROR); +#if VOROPP_VERBOSE >=2 + fprintf(stderr,"Delete stack 1 memory scaled up to %d\n",current_delete_size); +#endif + int *dsn=new int[current_delete_size],*dsnp=dsn,*dsp=ds; + while(dspmax_delete2_size) voro_fatal_error("Delete stack 2 memory allocation exceeded absolute maximum",VOROPP_MEMORY_ERROR); +#if VOROPP_VERBOSE >=2 + fprintf(stderr,"Delete stack 2 memory scaled up to %d\n",current_delete2_size); +#endif + int *dsn=new int[current_delete2_size],*dsnp=dsn,*dsp=ds2; + while(dsp +inline bool voronoicell_base::search_for_outside_edge(vc_class &vc,int &up) { + int i,lp,lw,*j(ds2),*stackp2(ds2); + double l; + *(stackp2++)=up; + while(j +inline void voronoicell_base::add_to_stack(vc_class &vc,int lp,int *&stackp2) { + for(int *k(ds2);k +bool voronoicell_base::nplane(vc_class &vc,double x,double y,double z,double rsq,int p_id) { + int count=0,i,j,k,lp=up,cp,qp,rp,*stackp(ds),*stackp2(ds2),*dsp; + int us=0,ls=0,qs,iqs,cs,uw,qw,lw; + int *edp,*edd; + double u,l,r,q;bool complicated_setup=false,new_double_edge=false,double_edge=false; + + // Initialize the safe testing routine + n_marg=0;px=x;py=y;pz=z;prsq=rsq; + + // Test approximately sqrt(n)/4 points for their proximity to the plane + // and keep the one which is closest + uw=m_test(up,u); + + // Starting from an initial guess, we now move from vertex to vertex, + // to try and find an edge which intersects the cutting plane, + // or a vertex which is on the plane + try { + if(uw==1) { + + // The test point is inside the cutting plane. + us=0; + do { + lp=ed[up][us]; + lw=m_test(lp,l); + if(l=p) throw true; + u=l;up=lp; + for(us=0;us=p) throw true; + u=q;up=qp; + for(us=0;us=1 + fputs("Bailed out of convex calculation\n",stderr); +#endif + qw=1;lw=0; + for(qp=0;qp=current_vertex_order) add_memory_vorder(vc); + if(mec[nu[p]]==mem[nu[p]]) add_memory(vc,nu[p],stackp2); + vc.n_set_pointer(p,nu[p]); + ed[p]=mep[nu[p]]+((nu[p]<<1)+1)*mec[nu[p]]++; + ed[p][nu[p]<<1]=p; + + // Copy the edges of the original vertex into the new + // one. Delete the edges of the original vertex, and + // update the relational table. + us=cycle_down(i,up); + while(i=current_vertex_order) add_memory_vorder(vc); + if(mec[nu[p]]==mem[nu[p]]) add_memory(vc,nu[p],stackp2); + + // Copy the edges of the original vertex into the new + // one. Delete the edges of the original vertex, and + // update the relational table. + vc.n_set_pointer(p,nu[p]); + ed[p]=mep[nu[p]]+((nu[p]<<1)+1)*mec[nu[p]]++; + ed[p][nu[p]<<1]=p; + us=i++; + while(i0) k+=nu[j]; + } else { + if(j>0) { + + // This vertex was visited before, so + // count those vertices to the ones we + // already have. + k+=nu[j]; + + // The only time when we might make a + // duplicate edge is if the point we're + // going to move to next is also a + // marginal point, so test for that + // first. + if(lw==0) { + + // Now see whether this marginal point + // has been visited before. + i=-ed[lp][nu[lp]<<1]; + if(i>0) { + + // Now see if the last edge of that other + // marginal point actually ends up here. + if(ed[i][nu[i]-1]==j) { + new_double_edge=true; + k-=1; + } else new_double_edge=false; + } else { + + // That marginal point hasn't been visited + // before, so we probably don't have to worry + // about duplicate edges, except in the + // case when that's the way into the end + // of the facet, because that way always creates + // an edge. + if(j==rp&&lp==up&&ed[qp][nu[qp]+qs]==us) { + new_double_edge=true; + k-=1; + } else new_double_edge=false; + } + } else new_double_edge=false; + } else { + + // The vertex hasn't been visited + // before, but let's see if it's + // marginal + if(lw==0) { + + // If it is, we need to check + // for the case that it's a + // small branch, and that we're + // heading right back to where + // we came from + i=-ed[lp][nu[lp]<<1]; + if(i==cp) { + new_double_edge=true; + k-=1; + } else new_double_edge=false; + } else new_double_edge=false; + } + } + + // k now holds the number of edges of the new vertex + // we are forming. Add memory for it if it doesn't exist + // already. + while(k>=current_vertex_order) add_memory_vorder(vc); + if(mec[k]==mem[k]) add_memory(vc,k,stackp2); + + // Now create a new vertex with order k, or augment + // the existing one + if(j>0) { + + // If we're augmenting a vertex but we don't + // actually need any more edges, just skip this + // routine to avoid memory confusion + if(nu[j]!=k) { + // Allocate memory and copy the edges + // of the previous instance into it + vc.n_set_aux1(k); + edp=mep[k]+((k<<1)+1)*mec[k]++; + i=0; + while(ids) { + --p; + while(ed[p][nu[p]]==-1) { + j=nu[p]; + edp=ed[p];edd=(mep[j]+((j<<1)+1)*--mec[j]); + while(edp0) voro_fatal_error("Zero order vertex formed",VOROPP_INTERNAL_ERROR); + + // Collapse any order 2 vertices and exit + return collapse_order2(vc); +} + +/** During the creation of a new facet in the plane routine, it is possible + * that some order two vertices may arise. This routine removes them. + * Suppose an order two vertex joins c and d. If there's a edge between + * c and d already, then the order two vertex is just removed; otherwise, + * the order two vertex is removed and c and d are joined together directly. + * It is possible this process will create order two or order one vertices, + * and the routine is continually run until all of them are removed. + * \return False if the vertex removal was unsuccessful, indicative of the cell + * reducing to zero volume and disappearing; true if the vertex removal + * was successful. */ +template +inline bool voronoicell_base::collapse_order2(vc_class &vc) { + if(!collapse_order1(vc)) return false; + int a,b,i,j,k,l; + while(mec[2]>0) { + + // Pick a order 2 vertex and read in its edges + i=--mec[2]; + j=mep[2][5*i];k=mep[2][5*i+1]; + if(j==k) { +#if VOROPP_VERBOSE >=1 + fputs("Order two vertex joins itself",stderr); +#endif + return false; + } + + // Scan the edges of j to see if joins k + for(l=0;l +inline bool voronoicell_base::collapse_order1(vc_class &vc) { + int i,j,k; + while(mec[1]>0) { + up=0; +#if VOROPP_VERBOSE >=1 + fputs("Order one collapse\n",stderr); +#endif + i=--mec[1]; + j=mep[1][3*i];k=mep[1][3*i+1]; + i=mep[1][3*i+2]; + if(!delete_connection(vc,j,k,false)) return false; + --p; + if(up==i) up=0; + if(p!=i) { + if(up==p) up=i; + pts[3*i]=pts[3*p]; + pts[3*i+1]=pts[3*p+1]; + pts[3*i+2]=pts[3*p+2]; + for(k=0;k +inline bool voronoicell_base::delete_connection(vc_class &vc,int j,int k,bool hand) { + int q=hand?k:cycle_up(k,j); + int i=nu[j]-1,l,*edp,*edd,m; +#if VOROPP_VERBOSE >=1 + if(i<1) { + fputs("Zero order vertex formed\n",stderr); + return false; + } +#endif + if(mec[i]==mem[i]) add_memory(vc,i,ds2); + vc.n_set_aux1(i); + for(l=0;l &v) { + double area; + v.clear(); + int i,j,k,l,m,n; + double ux,uy,uz,vx,vy,vz,wx,wy,wz; + for(i=1;i=0) { + area=0; + ed[i][j]=-1-k; + l=cycle_up(ed[i][nu[i]+j],k); + m=ed[k][l];ed[k][l]=-1-m; + while(m!=i) { + n=cycle_up(ed[k][nu[k]+l],m); + ux=pts[3*k]-pts[3*i]; + uy=pts[3*k+1]-pts[3*i+1]; + uz=pts[3*k+2]-pts[3*i+2]; + vx=pts[3*m]-pts[3*i]; + vy=pts[3*m+1]-pts[3*i+1]; + vz=pts[3*m+2]-pts[3*i+2]; + wx=uy*vz-uz*vy; + wy=uz*vx-ux*vz; + wz=ux*vy-uy*vx; + area+=sqrt(wx*wx+wy*wy+wz*wz); + k=m;l=n; + m=ed[k][l];ed[k][l]=-1-m; + } + v.push_back(0.125*area); + } + } + reset_edges(); +} + +/** Several routines in the class that gather cell-based statistics internally + * track their progress by flipping edges to negative so that they know what + * parts of the cell have already been tested. This function resets them back + * to positive. When it is called, it assumes that every edge in the routine + * should have already been flipped to negative, and it bails out with an + * internal error if it encounters a positive edge. */ +inline void voronoicell_base::reset_edges() { + int i,j; + for(i=0;i=0) voro_fatal_error("Edge reset routine found a previously untested edge",VOROPP_INTERNAL_ERROR); + ed[i][j]=-1-ed[i][j]; + } +} + +/** Checks to see if a given vertex is inside, outside or within the test + * plane. If the point is far away from the test plane, the routine immediately + * returns whether it is inside or outside. If the routine is close the the + * plane and within the specified tolerance, then the special check_marginal() + * routine is called. + * \param[in] n the vertex to test. + * \param[out] ans the result of the scalar product used in evaluating the + * location of the point. + * \return -1 if the point is inside the plane, 1 if the point is outside the + * plane, or 0 if the point is within the plane. */ +inline int voronoicell_base::m_test(int n,double &ans) { + double *pp=pts+n+(n<<1); + ans=*(pp++)*px; + ans+=*(pp++)*py; + ans+=*pp*pz-prsq; + if(ans<-tolerance2) { + return -1; + } else if(ans>tolerance2) { + return 1; + } + return check_marginal(n,ans); +} + +/** Checks to see if a given vertex is inside, outside or within the test + * plane, for the case when the point has been detected to be very close to the + * plane. The routine ensures that the returned results are always consistent + * with previous tests, by keeping a table of any marginal results. The routine + * first sees if the vertex is in the table, and if it finds a previously + * computed result it uses that. Otherwise, it computes a result for this + * vertex and adds it the table. + * \param[in] n the vertex to test. + * \param[in] ans the result of the scalar product used in evaluating + * the location of the point. + * \return -1 if the point is inside the plane, 1 if the point is outside the + * plane, or 0 if the point is within the plane. */ +int voronoicell_base::check_marginal(int n,double &ans) { + int i; + for(i=0;imax_marginal) + voro_fatal_error("Marginal case buffer allocation exceeded absolute maximum",VOROPP_MEMORY_ERROR); +#if VOROPP_VERBOSE >=2 + fprintf(stderr,"Marginal cases buffer scaled up to %d\n",i); +#endif + int *pmarg=new int[current_marginal]; + for(int j=0;jtolerance?1:(ans<-tolerance?-1:0); + return marg[n_marg-1]; +} + +/** This initializes the class to be a rectangular box. It calls the base class + * initialization routine to set up the edge and vertex information, and then + * sets up the neighbor information, with initial faces being assigned ID + * numbers from -1 to -6. + * \param[in] (xmin,xmax) the minimum and maximum x coordinates. + * \param[in] (ymin,ymax) the minimum and maximum y coordinates. + * \param[in] (zmin,zmax) the minimum and maximum z coordinates. */ +void voronoicell_neighbor::init(double xmin,double xmax,double ymin,double ymax,double zmin,double zmax) { + init_base(xmin,xmax,ymin,ymax,zmin,zmax); + int *q=mne[3]; + *q=-5;q[1]=-3;q[2]=-1; + q[3]=-5;q[4]=-2;q[5]=-3; + q[6]=-5;q[7]=-1;q[8]=-4; + q[9]=-5;q[10]=-4;q[11]=-2; + q[12]=-6;q[13]=-1;q[14]=-3; + q[15]=-6;q[16]=-3;q[17]=-2; + q[18]=-6;q[19]=-4;q[20]=-1; + q[21]=-6;q[22]=-2;q[23]=-4; + *ne=q;ne[1]=q+3;ne[2]=q+6;ne[3]=q+9; + ne[4]=q+12;ne[5]=q+15;ne[6]=q+18;ne[7]=q+21; +} + +/** This routine checks to make sure the neighbor information of each face is + * consistent. */ +void voronoicell_neighbor::check_facets() { + int i,j,k,l,m,q; + for(i=1;i=0) { + ed[i][j]=-1-k; + q=ne[i][j]; + l=cycle_up(ed[i][nu[i]+j],k); + do { + m=ed[k][l]; + ed[k][l]=-1-m; + if(ne[k][l]!=q) fprintf(stderr,"Facet error at (%d,%d)=%d, started from (%d,%d)=%d\n",k,l,ne[k][l],i,j,q); + l=cycle_up(ed[k][nu[k]+l],m); + k=m; + } while (k!=i); + } + } + reset_edges(); +} + +/** The class constructor allocates memory for storing neighbor information. */ +voronoicell_neighbor::voronoicell_neighbor() { + int i; + mne=new int*[current_vertex_order]; + ne=new int*[current_vertices]; + for(i=0;i<3;i++) mne[i]=new int[init_n_vertices*i]; + mne[3]=new int[init_3_vertices*3]; + for(i=4;i=0;i--) if(mem[i]>0) delete [] mne[i]; + delete [] mne; + delete [] ne; +} + +/** Computes a vector list of neighbors. */ +void voronoicell_neighbor::neighbors(std::vector &v) { + v.clear(); + int i,j,k,l,m; + for(i=1;i=0) { + v.push_back(ne[i][j]); + ed[i][j]=-1-k; + l=cycle_up(ed[i][nu[i]+j],k); + do { + m=ed[k][l]; + ed[k][l]=-1-m; + l=cycle_up(ed[k][nu[k]+l],m); + k=m; + } while (k!=i); + } + } + reset_edges(); +} + +// Explicit instantiation +template bool voronoicell_base::nplane(voronoicell_neighbor&,double,double,double,double,int); +template void voronoicell_base::check_memory_for_copy(voronoicell_neighbor&,voronoicell_base*); + +} + diff --git a/src/USER-PTM/ptm_voronoi_cell.h b/src/USER-PTM/ptm_voronoi_cell.h new file mode 100644 index 0000000000000000000000000000000000000000..e0284bc56fa6c7a65c2a467e2283e8d3ed291479 --- /dev/null +++ b/src/USER-PTM/ptm_voronoi_cell.h @@ -0,0 +1,324 @@ +// Voro++, a 3D cell-based Voronoi library +// +// Author : Chris H. Rycroft (LBL / UC Berkeley) +// Email : chr@alum.mit.edu +// Date : August 30th 2011 +// +// Modified by PM Larsen for use in Polyhedral Template Matching + +/** \file cell.hh + * \brief Header file for the voronoicell and related classes. */ + +#ifndef PTM_VOROPP_CELL_HH +#define PTM_VOROPP_CELL_HH + +#include +#include + +#include "ptm_voronoi_config.h" + +namespace ptm_voro { + +/** \brief A class representing a single Voronoi cell. + * + * This class represents a single Voronoi cell, as a collection of vertices + * that are connected by edges. The class contains routines for initializing + * the Voronoi cell to be simple shapes such as a box, tetrahedron, or octahedron. + * It the contains routines for recomputing the cell based on cutting it + * by a plane, which forms the key routine for the Voronoi cell computation. + * It contains numerous routine for computing statistics about the Voronoi cell, + * and it can output the cell in several formats. + * + * This class is not intended for direct use, but forms the base of the + * voronoicell and voronoicell_neighbor classes, which extend it based on + * whether neighboring particle ID information needs to be tracked. */ +class voronoicell_base { + public: + /** This holds the current size of the arrays ed and nu, which + * hold the vertex information. If more vertices are created + * than can fit in this array, then it is dynamically extended + * using the add_memory_vertices routine. */ + int current_vertices; + /** This holds the current maximum allowed order of a vertex, + * which sets the size of the mem, mep, and mec arrays. If a + * vertex is created with more vertices than this, the arrays + * are dynamically extended using the add_memory_vorder routine. + */ + int current_vertex_order; + /** This sets the size of the main delete stack. */ + int current_delete_size; + /** This sets the size of the auxiliary delete stack. */ + int current_delete2_size; + /** This sets the total number of vertices in the current cell. + */ + int p; + /** This is the index of particular point in the cell, which is + * used to start the tracing routines for plane intersection + * and cutting. These routines will work starting from any + * point, but it's often most efficient to start from the last + * point considered, since in many cases, the cell construction + * algorithm may consider many planes with similar vectors + * concurrently. */ + int up; + /** This is a two dimensional array that holds information + * about the edge connections of the vertices that make up the + * cell. The two dimensional array is not allocated in the + * usual method. To account for the fact the different vertices + * have different orders, and thus require different amounts of + * storage, the elements of ed[i] point to one-dimensional + * arrays in the mep[] array of different sizes. + * + * More specifically, if vertex i has order m, then ed[i] + * points to a one-dimensional array in mep[m] that has 2*m+1 + * entries. The first m elements hold the neighboring edges, so + * that the jth edge of vertex i is held in ed[i][j]. The next + * m elements hold a table of relations which is redundant but + * helps speed up the computation. It satisfies the relation + * ed[ed[i][j]][ed[i][m+j]]=i. The final entry holds a back + * pointer, so that ed[i+2*m]=i. The back pointers are used + * when rearranging the memory. */ + int **ed; + /** This array holds the order of the vertices in the Voronoi + * cell. This array is dynamically allocated, with its current + * size held by current_vertices. */ + int *nu; + /** This in an array with size 3*current_vertices for holding + * the positions of the vertices. */ + double *pts; + voronoicell_base(); + virtual ~voronoicell_base(); + void init_base(double xmin,double xmax,double ymin,double ymax,double zmin,double zmax); + void init_octahedron_base(double l); + void init_tetrahedron_base(double x0,double y0,double z0,double x1,double y1,double z1,double x2,double y2,double z2,double x3,double y3,double z3); + void translate(double x,double y,double z); + double volume(); + double max_radius_squared(); + double total_edge_distance(); + double surface_area(); + void centroid(double &cx,double &cy,double &cz); + int number_of_faces(); + int number_of_edges(); + void vertex_orders(std::vector &v); + void vertices(std::vector &v); + void vertices(double x,double y,double z,std::vector &v); + void face_areas(std::vector &v); + void face_orders(std::vector &v); + void face_freq_table(std::vector &v); + void face_vertices(std::vector &v); + void face_perimeters(std::vector &v); + void normals(std::vector &v); + template + bool nplane(vc_class &vc,double x,double y,double z,double rsq,int p_id); + bool plane_intersects(double x,double y,double z,double rsq); + bool plane_intersects_guess(double x,double y,double z,double rsq); + void construct_relations(); + void check_relations(); + void check_duplicates(); + /** Returns a list of IDs of neighboring particles + * corresponding to each face. + * \param[out] v a reference to a vector in which to return the + * results. If no neighbor information is + * available, a blank vector is returned. */ + virtual void neighbors(std::vector &v) {v.clear();} + /** This a virtual function that is overridden by a routine to + * print the neighboring particle IDs for a given vertex. By + * default, when no neighbor information is available, the + * routine does nothing. + * \param[in] i the vertex to consider. */ + /** This is a simple inline function for picking out the index + * of the next edge counterclockwise at the current vertex. + * \param[in] a the index of an edge of the current vertex. + * \param[in] p the number of the vertex. + * \return 0 if a=nu[p]-1, or a+1 otherwise. */ + inline int cycle_up(int a,int p) {return a==nu[p]-1?0:a+1;} + /** This is a simple inline function for picking out the index + * of the next edge clockwise from the current vertex. + * \param[in] a the index of an edge of the current vertex. + * \param[in] p the number of the vertex. + * \return nu[p]-1 if a=0, or a-1 otherwise. */ + inline int cycle_down(int a,int p) {return a==0?nu[p]-1:a-1;} + protected: + /** This a one dimensional array that holds the current sizes + * of the memory allocations for them mep array.*/ + int *mem; + /** This is a one dimensional array that holds the current + * number of vertices of order p that are stored in the mep[p] + * array. */ + int *mec; + /** This is a two dimensional array for holding the information + * about the edges of the Voronoi cell. mep[p] is a + * one-dimensional array for holding the edge information about + * all vertices of order p, with each vertex holding 2*p+1 + * integers of information. The total number of vertices held + * on mep[p] is stored in mem[p]. If the space runs out, the + * code allocates more using the add_memory() routine. */ + int **mep; + inline void reset_edges(); + template + void check_memory_for_copy(vc_class &vc,voronoicell_base* vb); + void copy(voronoicell_base* vb); + private: + /** This is the delete stack, used to store the vertices which + * are going to be deleted during the plane cutting procedure. + */ + int *ds,*stacke; + /** This is the auxiliary delete stack, which has size set by + * current_delete2_size. */ + int *ds2,*stacke2; + /** This stores the current memory allocation for the marginal + * cases. */ + int current_marginal; + /** This stores the total number of marginal points which are + * currently in the buffer. */ + int n_marg; + /** This array contains a list of the marginal points, and also + * the outcomes of the marginal tests. */ + int *marg; + /** The x coordinate of the normal vector to the test plane. */ + double px; + /** The y coordinate of the normal vector to the test plane. */ + double py; + /** The z coordinate of the normal vector to the test plane. */ + double pz; + /** The magnitude of the normal vector to the test plane. */ + double prsq; + template + void add_memory(vc_class &vc,int i,int *stackp2); + template + void add_memory_vertices(vc_class &vc); + template + void add_memory_vorder(vc_class &vc); + void add_memory_ds(int *&stackp); + void add_memory_ds2(int *&stackp2); + template + inline bool collapse_order1(vc_class &vc); + template + inline bool collapse_order2(vc_class &vc); + template + inline bool delete_connection(vc_class &vc,int j,int k,bool hand); + template + inline bool search_for_outside_edge(vc_class &vc,int &up); + template + inline void add_to_stack(vc_class &vc,int lp,int *&stackp2); + inline bool plane_intersects_track(double x,double y,double z,double rs,double g); + inline void normals_search(std::vector &v,int i,int j,int k); + inline bool search_edge(int l,int &m,int &k); + inline int m_test(int n,double &ans); + int check_marginal(int n,double &ans); + friend class voronoicell; + friend class voronoicell_neighbor; +}; + +/** \brief Extension of the voronoicell_base class to represent a Voronoi cell + * with neighbor information. + * + * This class is an extension of the voronoicell_base class, in cases when the + * IDs of neighboring particles associated with each face of the Voronoi cell. + * It contains additional data structures mne and ne for storing this + * information. */ +class voronoicell_neighbor : public voronoicell_base { + public: + using voronoicell_base::nplane; + /** This two dimensional array holds the neighbor information + * associated with each vertex. mne[p] is a one dimensional + * array which holds all of the neighbor information for + * vertices of order p. */ + int **mne; + /** This is a two dimensional array that holds the neighbor + * information associated with each vertex. ne[i] points to a + * one-dimensional array in mne[nu[i]]. ne[i][j] holds the + * neighbor information associated with the jth edge of vertex + * i. It is set to the ID number of the plane that made the + * face that is clockwise from the jth edge. */ + int **ne; + voronoicell_neighbor(); + ~voronoicell_neighbor(); + void operator=(voronoicell_neighbor &c); + /** Cuts the Voronoi cell by a particle whose center is at a + * separation of (x,y,z) from the cell center. The value of rsq + * should be initially set to \f$x^2+y^2+z^2\f$. + * \param[in] (x,y,z) the normal vector to the plane. + * \param[in] rsq the distance along this vector of the plane. + * \param[in] p_id the plane ID (for neighbor tracking only). + * \return False if the plane cut deleted the cell entirely, + * true otherwise. */ + inline bool nplane(double x,double y,double z,double rsq,int p_id) { + return nplane(*this,x,y,z,rsq,p_id); + } + /** This routine calculates the modulus squared of the vector + * before passing it to the main nplane() routine with full + * arguments. + * \param[in] (x,y,z) the vector to cut the cell by. + * \param[in] p_id the plane ID (for neighbor tracking only). + * \return False if the plane cut deleted the cell entirely, + * true otherwise. */ + inline bool nplane(double x,double y,double z,int p_id) { + double rsq=x*x+y*y+z*z; + return nplane(*this,x,y,z,rsq,p_id); + } + /** This version of the plane routine just makes up the plane + * ID to be zero. It will only be referenced if neighbor + * tracking is enabled. + * \param[in] (x,y,z) the vector to cut the cell by. + * \param[in] rsq the modulus squared of the vector. + * \return False if the plane cut deleted the cell entirely, + * true otherwise. */ + inline bool plane(double x,double y,double z,double rsq) { + return nplane(*this,x,y,z,rsq,0); + } + /** Cuts a Voronoi cell using the influence of a particle at + * (x,y,z), first calculating the modulus squared of this + * vector before passing it to the main nplane() routine. Zero + * is supplied as the plane ID, which will be ignored unless + * neighbor tracking is enabled. + * \param[in] (x,y,z) the vector to cut the cell by. + * \return False if the plane cut deleted the cell entirely, + * true otherwise. */ + inline bool plane(double x,double y,double z) { + double rsq=x*x+y*y+z*z; + return nplane(*this,x,y,z,rsq,0); + } + void init(double xmin,double xmax,double ymin,double ymax,double zmin,double zmax); + void check_facets(); + virtual void neighbors(std::vector &v); + + private: + int *paux1; + int *paux2; + inline void n_allocate(int i,int m) {mne[i]=new int[m*i];} + inline void n_add_memory_vertices(int i) { + int **pp=new int*[i]; + for(int j=0;jall(FLERR,"Illegal pair_style command"); if (strcmp(force->pair_style,"hybrid") == 0) @@ -315,7 +315,7 @@ void PairQUIP::init_style() init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairQUIP::init_one(int i, int j) +double PairQUIP::init_one(int /*i*/, int /*j*/) { return cutoff; } diff --git a/src/USER-REAXC/fix_qeq_reax.cpp b/src/USER-REAXC/fix_qeq_reax.cpp index a2f4d3d0e936c70674d1340e2c883cbb3a0c79be..6f0b93235fe7b3094786182791ec6857783cf604 100644 --- a/src/USER-REAXC/fix_qeq_reax.cpp +++ b/src/USER-REAXC/fix_qeq_reax.cpp @@ -381,7 +381,7 @@ void FixQEqReax::init() /* ---------------------------------------------------------------------- */ -void FixQEqReax::init_list(int id, NeighList *ptr) +void FixQEqReax::init_list(int /*id*/, NeighList *ptr) { list = ptr; } @@ -485,7 +485,7 @@ void FixQEqReax::init_storage() /* ---------------------------------------------------------------------- */ -void FixQEqReax::pre_force(int vflag) +void FixQEqReax::pre_force(int /*vflag*/) { double t_start, t_end; @@ -518,7 +518,7 @@ void FixQEqReax::pre_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixQEqReax::pre_force_respa(int vflag, int ilevel, int iloop) +void FixQEqReax::pre_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) pre_force(vflag); } @@ -833,7 +833,7 @@ void FixQEqReax::calculate_Q() /* ---------------------------------------------------------------------- */ int FixQEqReax::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int m; @@ -952,7 +952,7 @@ void FixQEqReax::grow_arrays(int nmax) copy values within fictitious charge arrays ------------------------------------------------------------------------- */ -void FixQEqReax::copy_arrays(int i, int j, int delflag) +void FixQEqReax::copy_arrays(int i, int j, int /*delflag*/) { for (int m = 0; m < nprev; m++) { s_hist[j][m] = s_hist[i][m]; diff --git a/src/USER-REAXC/fix_reaxc.cpp b/src/USER-REAXC/fix_reaxc.cpp index df06217993da53bc31492e1ea85957883a4ef475..c4701736631b1a345bda3e23f3ffe0d10f8aafb5 100644 --- a/src/USER-REAXC/fix_reaxc.cpp +++ b/src/USER-REAXC/fix_reaxc.cpp @@ -105,7 +105,7 @@ void FixReaxC::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixReaxC::copy_arrays(int i, int j, int delflag) +void FixReaxC::copy_arrays(int i, int j, int /*delflag*/) { num_bonds[j] = num_bonds[i]; num_hbonds[j] = num_hbonds[i]; @@ -136,7 +136,7 @@ int FixReaxC::unpack_exchange(int nlocal, double *buf) /* ---------------------------------------------------------------------- */ int FixReaxC::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/USER-REAXC/fix_reaxc_bonds.cpp b/src/USER-REAXC/fix_reaxc_bonds.cpp index b38d137412b16d18130ed32dcaf82cd0ead7ab94..9dc347826f626ac819593db18bbc450e7ce0635c 100644 --- a/src/USER-REAXC/fix_reaxc_bonds.cpp +++ b/src/USER-REAXC/fix_reaxc_bonds.cpp @@ -62,7 +62,7 @@ FixReaxCBonds::FixReaxCBonds(LAMMPS *lmp, int narg, char **arg) : if (suffix && strcmp(suffix,".gz") == 0) { #ifdef LAMMPS_GZIP char gzip[128]; - sprintf(gzip,"gzip -6 > %s",arg[4]); + snprintf(gzip,128,"gzip -6 > %s",arg[4]); #ifdef _WIN32 fp = _popen(gzip,"wb"); #else @@ -75,7 +75,7 @@ FixReaxCBonds::FixReaxCBonds(LAMMPS *lmp, int narg, char **arg) : if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix reax/c/bonds file %s",arg[4]); + snprintf(str,128,"Cannot open fix reax/c/bonds file %s",arg[4]); error->one(FLERR,str); } } @@ -112,7 +112,7 @@ int FixReaxCBonds::setmask() /* ---------------------------------------------------------------------- */ -void FixReaxCBonds::setup(int vflag) +void FixReaxCBonds::setup(int /*vflag*/) { end_of_step(); } @@ -137,7 +137,7 @@ void FixReaxCBonds::end_of_step() /* ---------------------------------------------------------------------- */ -void FixReaxCBonds::Output_ReaxC_Bonds(bigint ntimestep, FILE *fp) +void FixReaxCBonds::Output_ReaxC_Bonds(bigint /*ntimestep*/, FILE * /*fp*/) { int i, j; @@ -185,7 +185,7 @@ void FixReaxCBonds::Output_ReaxC_Bonds(bigint ntimestep, FILE *fp) /* ---------------------------------------------------------------------- */ -void FixReaxCBonds::FindBond(struct _reax_list *lists, int &numbonds) +void FixReaxCBonds::FindBond(struct _reax_list * /*lists*/, int &numbonds) { int *ilist, i, ii, inum; int j, pj, nj; diff --git a/src/USER-REAXC/fix_reaxc_species.cpp b/src/USER-REAXC/fix_reaxc_species.cpp index 61b4cebf966592ff2a8a73ce708647d639ac8951..46426d484ae89c6f8d1a631e5d7061ac16ac3668 100644 --- a/src/USER-REAXC/fix_reaxc_species.cpp +++ b/src/USER-REAXC/fix_reaxc_species.cpp @@ -98,9 +98,7 @@ FixReaxCSpecies::FixReaxCSpecies(LAMMPS *lmp, int narg, char **arg) : } if (me == 0 && rene_flag) { - char str[128]; - sprintf(str,"Resetting reneighboring criteria for fix reax/c/species"); - error->warning(FLERR,str); + error->warning(FLERR,"Resetting reneighboring criteria for fix reax/c/species"); } tmparg = NULL; @@ -127,7 +125,7 @@ FixReaxCSpecies::FixReaxCSpecies(LAMMPS *lmp, int narg, char **arg) : if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix reax/c/species file %s",arg[6]); + snprintf(str,128,"Cannot open fix reax/c/species file %s",arg[6]); error->one(FLERR,str); } } @@ -281,7 +279,7 @@ int FixReaxCSpecies::setmask() /* ---------------------------------------------------------------------- */ -void FixReaxCSpecies::setup(int vflag) +void FixReaxCSpecies::setup(int /*vflag*/) { ntotal = static_cast (atom->natoms); if (Name == NULL) @@ -427,7 +425,7 @@ void FixReaxCSpecies::create_fix() /* ---------------------------------------------------------------------- */ -void FixReaxCSpecies::init_list(int id, NeighList *ptr) +void FixReaxCSpecies::init_list(int /*id*/, NeighList *ptr) { list = ptr; } @@ -442,7 +440,7 @@ void FixReaxCSpecies::post_integrate() /* ---------------------------------------------------------------------- */ -void FixReaxCSpecies::Output_ReaxC_Bonds(bigint ntimestep, FILE *fp) +void FixReaxCSpecies::Output_ReaxC_Bonds(bigint ntimestep, FILE * /*fp*/) { int Nmole, Nspec; @@ -946,7 +944,7 @@ int FixReaxCSpecies::nint(const double &r) /* ---------------------------------------------------------------------- */ int FixReaxCSpecies::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/USER-REAXC/pair_reaxc.cpp b/src/USER-REAXC/pair_reaxc.cpp index 7f77d875bc8cea1c45a613c6a1f87bc68222de6f..85bd8471b4b2f8f1eb4c001790b10d89bdbae929 100644 --- a/src/USER-REAXC/pair_reaxc.cpp +++ b/src/USER-REAXC/pair_reaxc.cpp @@ -301,7 +301,7 @@ void PairReaxC::coeff( int nargs, char **args ) Read_Force_Field(fp, &(system->reax_param), control); else { char str[128]; - sprintf(str,"Cannot open ReaxFF potential file %s",file); + snprintf(str,128,"Cannot open ReaxFF potential file %s",file); error->all(FLERR,str); } @@ -751,7 +751,7 @@ int PairReaxC::write_reax_lists() /* ---------------------------------------------------------------------- */ -void PairReaxC::read_reax_forces(int vflag) +void PairReaxC::read_reax_forces(int /*vflag*/) { for( int i = 0; i < system->N; ++i ) { system->my_atoms[i].f[0] = workspace->f[i][0]; diff --git a/src/USER-REAXC/reaxc_allocate.cpp b/src/USER-REAXC/reaxc_allocate.cpp index a07f090f92a8c712c301444d6c0aac6941e2723d..c6c103b6f4a989c3a55638699e0fbc5ad6e1c458 100644 --- a/src/USER-REAXC/reaxc_allocate.cpp +++ b/src/USER-REAXC/reaxc_allocate.cpp @@ -39,8 +39,8 @@ important: we cannot know the exact number of atoms that will fall into a process's box throughout the whole simulation. therefore we need to make upper bound estimates for various data structures */ -int PreAllocate_Space( reax_system *system, control_params *control, - storage *workspace, MPI_Comm comm ) +int PreAllocate_Space( reax_system *system, control_params * /*control*/, + storage * workspace, MPI_Comm comm ) { int mincap = system->mincap; double safezone = system->safezone; @@ -60,6 +60,8 @@ int PreAllocate_Space( reax_system *system, control_params *control, workspace->forceReduction = NULL; workspace->valence_angle_atom_myoffset = NULL; workspace->my_ext_pressReduction = NULL; +#else + LMP_UNUSED_PARAM(workspace); #endif return SUCCESS; @@ -68,8 +70,8 @@ int PreAllocate_Space( reax_system *system, control_params *control, /************* system *************/ -int Allocate_System( reax_system *system, int local_cap, int total_cap, - char *msg ) +int Allocate_System( reax_system *system, int /*local_cap*/, int total_cap, + char * /*msg*/ ) { system->my_atoms = (reax_atom*) realloc( system->my_atoms, total_cap*sizeof(reax_atom) ); @@ -116,7 +118,7 @@ void DeAllocate_System( reax_system *system ) /************* workspace *************/ -void DeAllocate_Workspace( control_params *control, storage *workspace ) +void DeAllocate_Workspace( control_params * /*control*/, storage *workspace ) { int i; @@ -204,9 +206,9 @@ void DeAllocate_Workspace( control_params *control, storage *workspace ) } -int Allocate_Workspace( reax_system *system, control_params *control, +int Allocate_Workspace( reax_system * /*system*/, control_params * control, storage *workspace, int local_cap, int total_cap, - MPI_Comm comm, char *msg ) + MPI_Comm comm, char * /*msg*/ ) { int i, total_real, total_rvec, local_rvec; @@ -307,6 +309,8 @@ int Allocate_Workspace( reax_system *system, control_params *control, workspace->valence_angle_atom_myoffset = (int *) scalloc(sizeof(int), total_cap, "valence_angle_atom_myoffset", comm); workspace->my_ext_pressReduction = (rvec *) calloc(sizeof(rvec), control->nthreads); +#else + LMP_UNUSED_PARAM(control); #endif return SUCCESS; diff --git a/src/USER-REAXC/reaxc_bond_orders.cpp b/src/USER-REAXC/reaxc_bond_orders.cpp index 468164a2c0007ad7bb16a0ab778082f9f6348ffa..572d27526cbb8aa4d118e9e23cb00771d0ef62f7 100644 --- a/src/USER-REAXC/reaxc_bond_orders.cpp +++ b/src/USER-REAXC/reaxc_bond_orders.cpp @@ -359,8 +359,8 @@ int BOp( storage *workspace, reax_list *bonds, double bo_cut, } -void BO( reax_system *system, control_params *control, simulation_data *data, - storage *workspace, reax_list **lists, output_controls *out_control ) +void BO( reax_system *system, control_params * /*control*/, simulation_data * /*data*/, + storage *workspace, reax_list **lists, output_controls * /*out_control*/ ) { int i, j, pj, type_i, type_j; int start_i, end_i, sym_index; diff --git a/src/USER-REAXC/reaxc_bonds.cpp b/src/USER-REAXC/reaxc_bonds.cpp index 9678addd6bfe5ec7f4982049641d909f22284009..6fde18e5c2485f979d6bdaa595742330ced40789 100644 --- a/src/USER-REAXC/reaxc_bonds.cpp +++ b/src/USER-REAXC/reaxc_bonds.cpp @@ -31,9 +31,9 @@ #include "reaxc_tool_box.h" #include "reaxc_vector.h" -void Bonds( reax_system *system, control_params *control, +void Bonds( reax_system *system, control_params * /*control*/, simulation_data *data, storage *workspace, reax_list **lists, - output_controls *out_control ) + output_controls * /*out_control*/ ) { int i, j, pj, natoms; int start_i, end_i; diff --git a/src/USER-REAXC/reaxc_forces.cpp b/src/USER-REAXC/reaxc_forces.cpp index 00b29824eae5cd9c92fb1d3e2fc9a2de92dc4b6a..dfcc9fd4ae4e11bc6351f549bc9c7b0a4a941ee0 100644 --- a/src/USER-REAXC/reaxc_forces.cpp +++ b/src/USER-REAXC/reaxc_forces.cpp @@ -41,9 +41,9 @@ interaction_function Interaction_Functions[NUM_INTRS]; -void Dummy_Interaction( reax_system *system, control_params *control, - simulation_data *data, storage *workspace, - reax_list **lists, output_controls *out_control ) +void Dummy_Interaction( reax_system * /*system*/, control_params * /*control*/, + simulation_data * /*data*/, storage * /*workspace*/, + reax_list **/*lists*/, output_controls * /*out_control*/ ) { } @@ -68,7 +68,7 @@ void Init_Force_Functions( control_params *control ) void Compute_Bonded_Forces( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, output_controls *out_control, - MPI_Comm comm ) + MPI_Comm /*comm*/ ) { int i; @@ -83,7 +83,7 @@ void Compute_Bonded_Forces( reax_system *system, control_params *control, void Compute_NonBonded_Forces( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, output_controls *out_control, - MPI_Comm comm ) + MPI_Comm /*comm*/ ) { /* van der Waals and Coulomb interactions */ @@ -98,7 +98,7 @@ void Compute_NonBonded_Forces( reax_system *system, control_params *control, void Compute_Total_Force( reax_system *system, control_params *control, simulation_data *data, storage *workspace, - reax_list **lists, mpi_datatypes *mpi_data ) + reax_list **lists, mpi_datatypes * /*mpi_data*/ ) { int i, pj; reax_list *bonds = (*lists) + BONDS; @@ -114,8 +114,8 @@ void Compute_Total_Force( reax_system *system, control_params *control, } -void Validate_Lists( reax_system *system, storage *workspace, reax_list **lists, - int step, int n, int N, int numH, MPI_Comm comm ) +void Validate_Lists( reax_system *system, storage * /*workspace*/, reax_list **lists, + int step, int /*n*/, int N, int numH, MPI_Comm comm ) { int i, comp, Hindex; reax_list *bonds, *hbonds; @@ -173,7 +173,7 @@ void Validate_Lists( reax_system *system, storage *workspace, reax_list **lists, void Init_Forces_noQEq( reax_system *system, control_params *control, simulation_data *data, storage *workspace, - reax_list **lists, output_controls *out_control, + reax_list **lists, output_controls * /*out_control*/, MPI_Comm comm ) { int i, j, pj; int start_i, end_i; @@ -317,7 +317,7 @@ void Init_Forces_noQEq( reax_system *system, control_params *control, void Estimate_Storages( reax_system *system, control_params *control, reax_list **lists, int *Htop, int *hb_top, - int *bond_top, int *num_3body, MPI_Comm comm ) + int *bond_top, int *num_3body, MPI_Comm /*comm*/ ) { int i, j, pj; int start_i, end_i; diff --git a/src/USER-REAXC/reaxc_hydrogen_bonds.cpp b/src/USER-REAXC/reaxc_hydrogen_bonds.cpp index cb516b24f7dd3f370ebd5ce8883853208334f1e2..6442dd47e944b332e979aaacfe755c5c4e6583a9 100644 --- a/src/USER-REAXC/reaxc_hydrogen_bonds.cpp +++ b/src/USER-REAXC/reaxc_hydrogen_bonds.cpp @@ -33,7 +33,7 @@ void Hydrogen_Bonds( reax_system *system, control_params *control, simulation_data *data, storage *workspace, - reax_list **lists, output_controls *out_control ) + reax_list **lists, output_controls * /*out_control*/ ) { int i, j, k, pi, pk; int type_i, type_j, type_k; diff --git a/src/USER-REAXC/reaxc_init_md.cpp b/src/USER-REAXC/reaxc_init_md.cpp index 4af21284f2bfd97028cc32832f8c20231ea4abeb..88fb9cf17fdbb2ecc88eac5b336de42135e96bdb 100644 --- a/src/USER-REAXC/reaxc_init_md.cpp +++ b/src/USER-REAXC/reaxc_init_md.cpp @@ -36,7 +36,7 @@ #include "reaxc_tool_box.h" #include "reaxc_vector.h" -int Init_System( reax_system *system, control_params *control, char *msg ) +int Init_System( reax_system *system, control_params *control, char * /*msg*/ ) { int i; reax_atom *atom; @@ -66,7 +66,7 @@ int Init_System( reax_system *system, control_params *control, char *msg ) int Init_Simulation_Data( reax_system *system, control_params *control, - simulation_data *data, char *msg ) + simulation_data *data, char * /*msg*/ ) { Reset_Simulation_Data( data, control->virial ); @@ -139,8 +139,8 @@ int Init_Workspace( reax_system *system, control_params *control, /************** setup communication data structures **************/ -int Init_MPI_Datatypes( reax_system *system, storage *workspace, - mpi_datatypes *mpi_data, MPI_Comm comm, char *msg ) +int Init_MPI_Datatypes( reax_system *system, storage * /*workspace*/, + mpi_datatypes *mpi_data, MPI_Comm comm, char * /*msg*/ ) { /* setup the world */ @@ -151,8 +151,8 @@ int Init_MPI_Datatypes( reax_system *system, storage *workspace, } int Init_Lists( reax_system *system, control_params *control, - simulation_data *data, storage *workspace, reax_list **lists, - mpi_datatypes *mpi_data, char *msg ) + simulation_data * /*data*/, storage * /*workspace*/, reax_list **lists, + mpi_datatypes *mpi_data, char * /*msg*/ ) { int i, total_hbonds, total_bonds, bond_cap, num_3body, cap_3body, Htop; int *hb_top, *bond_top; diff --git a/src/USER-REAXC/reaxc_io_tools.cpp b/src/USER-REAXC/reaxc_io_tools.cpp index 4d58f7514de5eefc6910fb9e345e9fb16ad64459..b63fee23098f5fef833c7a99dae84ffa9d1302a4 100644 --- a/src/USER-REAXC/reaxc_io_tools.cpp +++ b/src/USER-REAXC/reaxc_io_tools.cpp @@ -88,7 +88,7 @@ int Init_Output_Files( reax_system *system, control_params *control, /************************ close output files ************************/ int Close_Output_Files( reax_system *system, control_params *control, - output_controls *out_control, mpi_datatypes *mpi_data ) + output_controls *out_control, mpi_datatypes * /*mpi_data*/ ) { if( out_control->write_steps > 0 ) End_Traj( system->my_rank, out_control ); diff --git a/src/USER-REAXC/reaxc_lookup.cpp b/src/USER-REAXC/reaxc_lookup.cpp index 9db8b7b9f650105c9c6c9d5bed90634a49b2e29f..918099a6319403b3a425d955582db3f797902c5d 100644 --- a/src/USER-REAXC/reaxc_lookup.cpp +++ b/src/USER-REAXC/reaxc_lookup.cpp @@ -151,7 +151,7 @@ void Complete_Cubic_Spline( const double *h, const double *f, double v0, double int Init_Lookup_Tables( reax_system *system, control_params *control, - storage *workspace, mpi_datatypes *mpi_data, char *msg ) + storage *workspace, mpi_datatypes *mpi_data, char * /*msg*/ ) { int i, j, r; int num_atom_types; diff --git a/src/USER-REAXC/reaxc_multi_body.cpp b/src/USER-REAXC/reaxc_multi_body.cpp index ce5b966529e0d0db5b69d0e03ebfcd2bfd808812..360a9431cf6c9b49637daf1bad8693393894f0e6 100644 --- a/src/USER-REAXC/reaxc_multi_body.cpp +++ b/src/USER-REAXC/reaxc_multi_body.cpp @@ -32,7 +32,7 @@ void Atom_Energy( reax_system *system, control_params *control, simulation_data *data, storage *workspace, reax_list **lists, - output_controls *out_control ) + output_controls * /*out_control*/ ) { int i, j, pj, type_i, type_j; double Delta_lpcorr, dfvl; diff --git a/src/USER-REAXC/reaxc_nonbonded.cpp b/src/USER-REAXC/reaxc_nonbonded.cpp index 9c223428a68dfe386c52345a3a89193b2d2161f1..b44632ec29d8e387ba0669d2a693ccaa78ad6065 100644 --- a/src/USER-REAXC/reaxc_nonbonded.cpp +++ b/src/USER-REAXC/reaxc_nonbonded.cpp @@ -33,7 +33,7 @@ void vdW_Coulomb_Energy( reax_system *system, control_params *control, simulation_data *data, storage *workspace, - reax_list **lists, output_controls *out_control ) + reax_list **lists, output_controls * /*out_control*/ ) { int i, j, pj, natoms; int start_i, end_i, flag; @@ -206,7 +206,7 @@ void vdW_Coulomb_Energy( reax_system *system, control_params *control, void Tabulated_vdW_Coulomb_Energy( reax_system *system,control_params *control, simulation_data *data, storage *workspace, reax_list **lists, - output_controls *out_control ) + output_controls * /*out_control*/ ) { int i, j, pj, r, natoms; int type_i, type_j, tmin, tmax; diff --git a/src/USER-REAXC/reaxc_reset_tools.cpp b/src/USER-REAXC/reaxc_reset_tools.cpp index 4ec744e7b1c0a9ff1f823951690d6f86de0b4cc4..1b16f10aeee1786e732bf7b6613f602b356ff0fb 100644 --- a/src/USER-REAXC/reaxc_reset_tools.cpp +++ b/src/USER-REAXC/reaxc_reset_tools.cpp @@ -87,7 +87,7 @@ void Reset_Pressures( simulation_data *data ) } -void Reset_Simulation_Data( simulation_data* data, int virial ) +void Reset_Simulation_Data( simulation_data* data, int /*virial*/ ) { Reset_Energies( &data->my_en ); Reset_Energies( &data->sys_en ); diff --git a/src/USER-REAXC/reaxc_torsion_angles.cpp b/src/USER-REAXC/reaxc_torsion_angles.cpp index c5a7f23b301c6f3a51ea1ed0439ea489b0878a8a..2abfbde61de915d461bdb2c12a64bc19eceb2583 100644 --- a/src/USER-REAXC/reaxc_torsion_angles.cpp +++ b/src/USER-REAXC/reaxc_torsion_angles.cpp @@ -41,7 +41,7 @@ double Calculate_Omega( rvec dvec_ij, double r_ij, three_body_interaction_data *p_jkl, rvec dcos_omega_di, rvec dcos_omega_dj, rvec dcos_omega_dk, rvec dcos_omega_dl, - output_controls *out_control ) + output_controls * /*out_control*/ ) { double unnorm_cos_omega, unnorm_sin_omega, omega; double sin_ijk, cos_ijk, sin_jkl, cos_jkl; diff --git a/src/USER-REAXC/reaxc_traj.cpp b/src/USER-REAXC/reaxc_traj.cpp index ae2bba2150673f13cf3523fcb4ca1e78ab8d81e4..c1f3e8ae8f17b0ebc5a668858a9c3c6953d96171 100644 --- a/src/USER-REAXC/reaxc_traj.cpp +++ b/src/USER-REAXC/reaxc_traj.cpp @@ -48,7 +48,7 @@ int Reallocate_Output_Buffer( output_controls *out_control, int req_space, } -void Write_Skip_Line( output_controls *out_control, mpi_datatypes *mpi_data, +void Write_Skip_Line( output_controls *out_control, mpi_datatypes * /*mpi_data*/, int my_rank, int skip, int num_section ) { if( my_rank == MASTER_NODE ) @@ -259,7 +259,7 @@ int Write_Header( reax_system *system, control_params *control, } -int Write_Init_Desc( reax_system *system, control_params *control, +int Write_Init_Desc( reax_system *system, control_params * /*control*/, output_controls *out_control, mpi_datatypes *mpi_data ) { int i, me, np, cnt, buffer_len, buffer_req; @@ -482,7 +482,7 @@ int Write_Frame_Header( reax_system *system, control_params *control, -int Write_Atoms( reax_system *system, control_params *control, +int Write_Atoms( reax_system *system, control_params * /*control*/, output_controls *out_control, mpi_datatypes *mpi_data ) { int i, me, np, line_len, buffer_len, buffer_req, cnt; diff --git a/src/USER-REAXC/reaxc_valence_angles.cpp b/src/USER-REAXC/reaxc_valence_angles.cpp index c92996e56b9a776735bbe2eab7fa06819ef18eb2..118735fbbdec0177efd32025bd8d831c439f1153 100644 --- a/src/USER-REAXC/reaxc_valence_angles.cpp +++ b/src/USER-REAXC/reaxc_valence_angles.cpp @@ -76,7 +76,7 @@ void Calculate_dCos_Theta( rvec dvec_ji, double d_ji, rvec dvec_jk, double d_jk, void Valence_Angles( reax_system *system, control_params *control, simulation_data *data, storage *workspace, - reax_list **lists, output_controls *out_control ) + reax_list **lists, output_controls * /*out_control*/ ) { int i, j, pi, k, pk, t; int type_i, type_j, type_k; diff --git a/src/USER-SCAFACOS/Install.sh b/src/USER-SCAFACOS/Install.sh new file mode 100755 index 0000000000000000000000000000000000000000..964212fc5191e85ee561800e4ba5bc0a8b02b7ce --- /dev/null +++ b/src/USER-SCAFACOS/Install.sh @@ -0,0 +1,54 @@ +# Install/unInstall package files in LAMMPS +# mode = 0/1/2 for uninstall/install/update + +mode=$1 + +# enforce using portable C locale +LC_ALL=C +export LC_ALL + +# arg1 = file, arg2 = file it depends on + +action () { + if (test $mode = 0) then + rm -f ../$1 + elif (! cmp -s $1 ../$1) then + if (test -z "$2" || test -e ../$2) then + cp $1 .. + if (test $mode = 2) then + echo " updating src/$1" + fi + fi + elif (test -n "$2") then + if (test ! -e ../$2) then + rm -f ../$1 + fi + fi +} + +# all package files with no dependencies + +for file in *.cpp *.h; do + test -f ${file} && action $file +done + +# edit 2 Makefile.package files to include/exclude package info + +if (test $1 = 1) then + + if (test -e ../Makefile.package) then + sed -i -e 's/`.*scafacos.*` //' ../Makefile.package + sed -i -e 's/[^ \t]*scafacos[^ \t]* //' ../Makefile.package + sed -i -e 's|^PKG_INC =[ \t]*|&-I../../lib/scafacos/includelink |' ../Makefile.package + sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/scafacos/liblink |' ../Makefile.package + sed -i -e 's%^PKG_LIB =[ \t]*%&`grep Libs: ../../lib/scafacos/liblink/pkgconfig/scafacos.pc | cut -d " " -f 2-` %' ../Makefile.package + fi + +elif (test $1 = 0) then + + if (test -e ../Makefile.package) then + sed -i -e 's/`.*scafacos.*` //' ../Makefile.package + sed -i -e 's/[^ \t]*scafacos[^ \t]* //' ../Makefile.package + fi + +fi diff --git a/src/USER-SCAFACOS/README b/src/USER-SCAFACOS/README new file mode 100644 index 0000000000000000000000000000000000000000..42d2e2c0f77e7a4508107e7045b0b41bb4fcbdcc --- /dev/null +++ b/src/USER-SCAFACOS/README @@ -0,0 +1,25 @@ +This package provides a kspace style which is a wrapper for the +ScaFaCoS long-range Coulomb solver library. The library provides +a selection of different long-range Coulomb solvers, which can be +used to calculate the Coloumic forces between charged particles. +More information about the ScaFaCoS library can be found on this +web site: http://scafacos.de. ScaFaCoS was designed and implemented +by a consortium of German universities (Bonn, Chemnitz, Stuttgart, +Wuppertal and others) and the Juelich Supercomputing Centre +(Forschungszentrum Juelich). + +The use of the scafacos kspace requires the download and installation +of the library on the system. This can be done in lib/scafacos or +elsewhere in your system. Details of the download and build process +for ScaFaCoS are given in the lib/scafacos/README file and it can also +be done via the make lib-user-scafacos command from the LAMMPS +source directory. + +Once you have successfully built LAMMPS with this package and the +ScaFaCoS library, you can test it using an input file from the +examples scafacos dir, e.g.: + +lmp_serial -in lammps/examples/USER/scafacos/in.scafacos.fmm + +For questions about ScaFaCoS, please contact: +r.halver@fz-juelich.de or g.sutmann@fz-juelich.de diff --git a/src/USER-SCAFACOS/scafacos.cpp b/src/USER-SCAFACOS/scafacos.cpp new file mode 100644 index 0000000000000000000000000000000000000000..52bb0e46c4330a2d68b9fb605ae57ffb6bf6584e --- /dev/null +++ b/src/USER-SCAFACOS/scafacos.cpp @@ -0,0 +1,483 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Rene Halver (JSC) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include "scafacos.h" +#include "atom.h" +#include "comm.h" +#include "domain.h" +#include "force.h" +#include "memory.h" +#include "error.h" + +// ScaFaCoS library + +#include +#include +#include "fcs.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +Scafacos::Scafacos(LAMMPS *lmp, int narg, char **arg) : KSpace(lmp, narg, arg) +{ + if (narg != 2) error->all(FLERR,"Illegal scafacos command"); + + int n = strlen(arg[0]) + 1; + method = new char[n]; + strcpy(method,arg[0]); + tolerance = force->numeric(FLERR,arg[1]); + + // optional ScaFaCoS library setting defaults + // choose the correct default tolerance type for chosen method + // throw an error if a not yet supported solver is chosen + if (strcmp(method,"fmm") == 0) + { + tolerance_type = FCS_TOLERANCE_TYPE_ENERGY; + fmm_tuning_flag = 0; + } + else if (strcmp(method,"p3m") == 0 || + strcmp(method,"p2nfft") == 0 || + strcmp(method,"ewald") == 0) + { + tolerance_type = FCS_TOLERANCE_TYPE_FIELD; + } + else if (strcmp(method,"direct") == 0) + { + // direct summation has no tolerance type + } + else + { + error->all(FLERR,"Unsupported ScaFaCoS method"); + } + + // initializations + + me = comm->me; + initialized = 0; + + maxatom = 0; + xpbc = NULL; + epot = NULL; + efield = NULL; +} + +/* ---------------------------------------------------------------------- */ + +Scafacos::~Scafacos() +{ + delete [] method; + + memory->destroy(xpbc); + memory->destroy(epot); + memory->destroy(efield); + + // clean up of the ScaFaCoS handle and internal arrays + fcs_destroy((FCS)fcs); +} + +/* ---------------------------------------------------------------------- */ + +void Scafacos::init() +{ + // error checks + if (screen && me == 0) fprintf(screen, + "Setting up ScaFaCoS with solver %s ...\n",method); + if (logfile && me == 0) fprintf(logfile, + "Setting up ScaFaCoS with solver %s ...\n",method); + + if (!atom->q_flag) + error->all(FLERR,"Kspace style requires atom attribute q"); + + if (domain->dimension == 2) + error->all(FLERR,"Cannot use ScaFaCoS with 2d simulation"); + + if (domain->triclinic) + error->all(FLERR,"Cannot use ScaFaCoS with triclinic domain yet"); + + if (atom->natoms > INT_MAX && sizeof(int) != 8) + error->all(FLERR,"Scafacos atom count exceeds 2B"); + + if (atom->molecular > 0) + error->all(FLERR, + "Cannot use Scafacos with molecular charged systems yet"); + + FCSResult result; + + // one-time initialization of ScaFaCoS + + qqrd2e = force->qqrd2e; + + if (!initialized) { + result = fcs_init((FCS*)&fcs,method,world); + check_result((void*)&result); + + setup_handle(); + + // using other methods lead to termination of the program, + // since they have no tolerance tuning methods + if ( strcmp(method,"fmm") == 0 || + strcmp(method,"p3m") == 0 || + strcmp(method,"p2nfft") == 0 || + strcmp(method,"ewald") == 0) + { + result = fcs_set_tolerance((FCS)fcs,tolerance_type,tolerance); + check_result((void*)&result); + } + + double **x = atom->x; + double *q = atom->q; + int nlocal = atom->nlocal; + + if (strcmp(method,"fmm") == 0) + { + if (fmm_tuning_flag == 1) + fcs_fmm_set_internal_tuning((FCS)fcs,FCS_FMM_INHOMOGENOUS_SYSTEM); + else + fcs_fmm_set_internal_tuning((FCS)fcs,FCS_FMM_HOMOGENOUS_SYSTEM); + } + + // for the FMM at least one particle is required per process + if (strcmp(method,"fmm") == 0) + { + int empty = (nlocal==0)?1:0; + MPI_Allreduce(MPI_IN_PLACE,&empty,1,MPI_INT,MPI_SUM,world); + if (empty > 0) + fcs_set_redistribute((FCS)fcs,1); + else + fcs_set_redistribute((FCS)fcs,0); + } + + result = fcs_tune((FCS)fcs,nlocal,&x[0][0],q); + check_result((void*)&result); + // more useful here, since the parameters should be tuned now + if (me == 0) fcs_print_parameters((FCS)fcs); + } + + initialized = 1; +} + +/* ---------------------------------------------------------------------- */ + +void Scafacos::compute(int eflag, int vflag) +{ + double **x = atom->x; + double *q = atom->q; + int nlocal = atom->nlocal; + + const double qscale = qqrd2e; + FCSResult result; + + // for the FMM at least one particle is required per process + if (strcmp(method,"fmm")) + { + int empty = (nlocal==0)?1:0; + MPI_Allreduce(MPI_IN_PLACE,&empty,1,MPI_INT,MPI_SUM,world); + if (empty > 0) + fcs_set_redistribute((FCS)fcs,1); + else + fcs_set_redistribute((FCS)fcs,0); + } + + if (eflag || vflag) ev_setup(eflag,vflag); + else + { + eflag_atom = 0; + vflag_global = 0; + } + + // grow xpbc, epot, efield if necessary + + if (nlocal > maxatom || maxatom == 0) { + memory->destroy(xpbc); + memory->destroy(epot); + memory->destroy(efield); + maxatom = atom->nmax; + memory->create(xpbc,3*maxatom,"scafacos:xpbc"); + memory->create(epot,maxatom,"scafacos:epot"); + memory->create(efield,maxatom,3,"scafacos:efield"); + } + + if (vflag_global) + { + fcs_set_compute_virial((FCS)fcs,1); + //if (strcmp(method,"p3m") == 0) + // error->all(FLERR,"ScaFaCoS p3m does not support computation of virial"); + } + + // pack coords into xpbc and apply PBC + memcpy(xpbc,&x[0][0],3*nlocal*sizeof(double)); + + + if (domain->xperiodic || domain -> yperiodic || domain -> zperiodic){ + int j = 0; + for (int i = 0; i < nlocal; i++) { + domain->remap(&xpbc[j]); + j += 3; + } + } + // if simulation box has changed, call fcs_tune() + + if (box_has_changed()) { + setup_handle(); + result = fcs_tune((FCS)fcs,nlocal,xpbc,q); + check_result((void*)&result); + } + + // invoke ScaFaCoS solver + + result = fcs_run((FCS)fcs,nlocal,xpbc,q,&efield[0][0],epot); + check_result((void*)&result); + + // extract virial + + if (vflag_global) + { + fcs_get_virial((FCS)fcs,virial_int); + virial[0] = virial_int[0]; + virial[1] = virial_int[1]; + virial[2] = virial_int[2]; + virial[3] = virial_int[4]; + virial[4] = virial_int[5]; + virial[5] = virial_int[8]; + } + + // apply Efield to each particle + // accumulate total energy + + double **f = atom->f; + + double qone; + double myeng = 0.0; + + for (int i = 0; i < nlocal; i++) { + qone = q[i] * qscale; + f[i][0] += qone * efield[i][0]; + f[i][1] += qone * efield[i][1]; + f[i][2] += qone * efield[i][2]; + myeng += 0.5 * qone * epot[i]; + } + + if (eflag_atom) { + for (int i = 0; i < nlocal; i++) + eatom[i] = 0.5 * qscale * q[i] * epot[i]; + } + + MPI_Allreduce(&myeng,&energy,1,MPI_DOUBLE,MPI_SUM,world); +} + +/* ---------------------------------------------------------------------- */ + +int Scafacos::modify_param(int narg, char **arg) +{ + // add any Scafacos options here you want to expose to LAMMPS + // syntax: kspace_modify scafacos keyword value1 value2 ... + // keyword = tolerance + // value1 = energy, energy_rel, etc + // everyone of these should have a default, so user doesn't need to set + + if (strcmp(arg[0],"scafacos") != 0) return 0; + + if (strcmp(arg[1],"tolerance") == 0) { + if (narg < 3) error->all(FLERR, + "Illegal kspace_modify command (tolerance)"); + if (strcmp(arg[2],"energy") == 0) + tolerance_type = FCS_TOLERANCE_TYPE_ENERGY; + else if (strcmp(arg[2],"energy_rel") == 0) + tolerance_type = FCS_TOLERANCE_TYPE_ENERGY_REL; + else if (strcmp(arg[2],"field") == 0) + tolerance_type = FCS_TOLERANCE_TYPE_FIELD; + else if (strcmp(arg[2],"field_rel") == 0) + tolerance_type = FCS_TOLERANCE_TYPE_FIELD_REL; + else if (strcmp(arg[2],"potential") == 0) + tolerance_type = FCS_TOLERANCE_TYPE_POTENTIAL; + else if (strcmp(arg[2],"potential_rel") == 0) + tolerance_type = FCS_TOLERANCE_TYPE_POTENTIAL_REL; + else error->all(FLERR, + "Illegal kspace_modify command (tolerance argument)"); + // check if method is compatatible to chosen tolerance type + if( + ( + strcmp(method,"fmm") == 0 && + ( + tolerance_type != FCS_TOLERANCE_TYPE_ENERGY && + tolerance_type != FCS_TOLERANCE_TYPE_ENERGY_REL + ) + ) || + ( + strcmp(method,"p2nfft") == 0 && + ( + tolerance_type != FCS_TOLERANCE_TYPE_FIELD && + tolerance_type != FCS_TOLERANCE_TYPE_POTENTIAL + ) + ) || + ( + strcmp(method,"p3m") == 0 && + ( + tolerance_type != FCS_TOLERANCE_TYPE_FIELD + ) + ) || + ( + strcmp(method,"ewald") == 0 && + ( + tolerance_type != FCS_TOLERANCE_TYPE_FIELD + ) + ) + ) + error->all(FLERR,"Illegal kspace_modify command \ + (invalid tolerance / method combination)"); + return 3; + } + + // keyword = fmm_inhomogen_tuning + // value1 = 0, 1 + // 0 -> homogenous system (default) + // 1 -> inhomogenous system (more internal tuning is provided (sequential!)) + if (strcmp(arg[1],"fmm_tuning") == 0) + { + if (screen && me == 0) fprintf(screen, + "ScaFaCoS setting fmm inhomogen tuning ...\n"); + if (logfile && me == 0) fprintf(logfile, + "ScaFaCoS setting fmm inhomogen tuning ...\n"); + if (narg < 3) error->all(FLERR, + "Illegal kspace_modify command (fmm_tuning)"); + fmm_tuning_flag = atoi(arg[2]); + return 3; + } + + return 0; +} + +/* ---------------------------------------------------------------------- + memory usage of local arrays +------------------------------------------------------------------------- */ + +double Scafacos::memory_usage() +{ + double bytes = 0.0; + bytes += maxatom * sizeof(double); + bytes += 3*maxatom * sizeof(double); + return bytes; +} + +/* ---------------------------------------------------------------------- + setup of ScaFaCoS handle with common parameters +------------------------------------------------------------------------- */ + +void Scafacos::setup_handle() +{ + FCSResult result; + + // store simulation box params + + // setup periodicity + old_periodicity[0] = domain->xperiodic; + old_periodicity[1] = domain->yperiodic; + old_periodicity[2] = domain->zperiodic; + + // setup box origin (lower left front corner of the system) + old_origin[0] = domain->boxlo[0]; + old_origin[1] = domain->boxlo[1]; + old_origin[2] = domain->boxlo[2]; + + // setup box vectors (base vectors of the system box) + old_box_x[0] = domain->prd[0]; + old_box_x[1] = old_box_x[2] = 0.0; + old_box_y[1] = domain->prd[1]; + old_box_y[0] = old_box_y[2] = 0.0; + old_box_z[2] = domain->prd[2]; + old_box_z[1] = old_box_z[0] = 0.0; + + // setup number of atoms in the system + old_natoms = atom->natoms; + + // store parameters to ScaFaCoS handle + result = fcs_set_box_a((FCS)fcs,old_box_x); + check_result((void*)&result); + + result = fcs_set_box_b((FCS)fcs,old_box_y); + check_result((void*)&result); + + result = fcs_set_box_c((FCS)fcs,old_box_z); + check_result((void*)&result); + + result = fcs_set_box_origin((FCS)fcs,old_origin); + check_result((void*)&result); + + result = fcs_set_periodicity((FCS)fcs,old_periodicity); + check_result((void*)&result); + + result = fcs_set_total_particles((FCS)fcs,old_natoms); + check_result((void*)&result); + + // allow ScaFaCoS to calculate the near field computations for now + // TODO: allow the delegation of the near field computations + // within LAMMPS + // (near_field_flag = 1 -> enables the internal near field calcs + // 0 -> disables the internal near field calcs + int near_field_flag = 1; + result = fcs_set_near_field_flag((FCS)fcs,near_field_flag); + check_result((void*)&result); +} + +/* ---------------------------------------------------------------------- + check if box parameters changed, requiring a new call to fcs_tune +------------------------------------------------------------------------- */ + +bool Scafacos::box_has_changed() +{ + int *periodicity = domain->periodicity; + double *prd = domain->prd; + + bool changed = + (periodicity[0] != old_periodicity[0]) || + (periodicity[1] != old_periodicity[1]) || + (periodicity[2] != old_periodicity[2]) || + (domain->boundary[0][0] != old_origin[0]) || + (domain->boundary[1][0] != old_origin[1]) || + (domain->boundary[2][0] != old_origin[2]) || + (prd[0] != old_box_x[0]) || + (prd[1] != old_box_y[1]) || + (prd[2] != old_box_z[2]) || + (atom->natoms != old_natoms); + + return changed; +} + +/* ---------------------------------------------------------------------- + check ScaFaCoS result for error condition +------------------------------------------------------------------------- */ + +void Scafacos::check_result(void* result_p) +{ + FCSResult result = *(FCSResult*)result_p; + + if (!result) return; + + std::stringstream ss; + ss << "ScaFaCoS: " << fcs_result_get_function(result) << "\n" + << fcs_result_get_message(result) << "\n"; + fcs_result_destroy(result); + std::string err_msg = ss.str(); + const char *str = err_msg.c_str(); + + error->one(FLERR,str); +} + diff --git a/src/USER-SCAFACOS/scafacos.h b/src/USER-SCAFACOS/scafacos.h new file mode 100644 index 0000000000000000000000000000000000000000..fdf15739a6c6af3b8a784ceebe572573fe195788 --- /dev/null +++ b/src/USER-SCAFACOS/scafacos.h @@ -0,0 +1,73 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef KSPACE_CLASS + +KSpaceStyle(scafacos,Scafacos) + +#else + +#ifndef LMP_SCAFACOS_H +#define LMP_SCAFACOS_H + +#include "kspace.h" +//#include "fcs.h" + +namespace LAMMPS_NS { + +class Scafacos : public KSpace { + public: + Scafacos(class LAMMPS *, int, char **); + ~Scafacos(); + void init(); + void setup() {} + void compute(int, int); + int modify_param(int, char **); + double memory_usage(); + + private: + int me; + + char *method; + double tolerance; + double *xpbc,*epot,**efield; + int tolerance_type; + int initialized,maxatom; + + int fmm_tuning_flag; + + void* fcs; // ScaFaCoS handle + + // simulation state: box, natoms + // so ScaFaCoS can detect if changes, e.g. for NPT + + double old_box_x[3],old_box_y[3],old_box_z[3]; + double old_origin[3]; + int old_periodicity[3]; + int old_natoms; + + double virial_int[9]; + + void check_result(void*); + void setup_handle(); + bool box_has_changed(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +*/ diff --git a/src/USER-SMD/atom_vec_smd.cpp b/src/USER-SMD/atom_vec_smd.cpp index e99f3c51694eb609944461f44a495bca88187e1e..020284312b2164bd01c126a4695a65b28b010f78 100644 --- a/src/USER-SMD/atom_vec_smd.cpp +++ b/src/USER-SMD/atom_vec_smd.cpp @@ -208,7 +208,7 @@ void AtomVecSMD::copy(int i, int j, int delflag) { /* ---------------------------------------------------------------------- */ -int AtomVecSMD::pack_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) { +int AtomVecSMD::pack_comm(int /*n*/, int * /*list*/, double * /*buf*/, int /*pbc_flag*/, int * /*pbc*/) { error->one(FLERR, "atom vec tlsph can only be used with ghost velocities turned on"); return -1; } @@ -333,7 +333,7 @@ int AtomVecSMD::pack_comm_hybrid(int n, int *list, double *buf) { /* ---------------------------------------------------------------------- */ -void AtomVecSMD::unpack_comm(int n, int first, double *buf) { +void AtomVecSMD::unpack_comm(int /*n*/, int /*first*/, double * /*buf*/) { error->one(FLERR, "atom vec tlsph can only be used with ghost velocities turned on"); } @@ -441,7 +441,7 @@ int AtomVecSMD::unpack_reverse_hybrid(int n, int *list, double *buf) { /* ---------------------------------------------------------------------- */ -int AtomVecSMD::pack_border(int n, int *list, double *buf, int pbc_flag, int *pbc) { +int AtomVecSMD::pack_border(int /*n*/, int * /*list*/, double * /*buf*/, int /*pbc_flag*/, int * /*pbc*/) { error->one(FLERR, "atom vec tlsph can only be used with ghost velocities turned on"); return -1; } @@ -633,7 +633,7 @@ int AtomVecSMD::pack_border_hybrid(int n, int *list, double *buf) { /* ---------------------------------------------------------------------- */ -void AtomVecSMD::unpack_border(int n, int first, double *buf) { +void AtomVecSMD::unpack_border(int /*n*/, int /*first*/, double * /*buf*/) { error->one(FLERR, "atom vec tlsph can only be used with ghost velocities turned on"); } @@ -1098,7 +1098,7 @@ void AtomVecSMD::data_atom(double *coord, imageint imagetmp, char **values) { initialize other atom quantities for this sub-style ------------------------------------------------------------------------- */ -int AtomVecSMD::data_atom_hybrid(int nlocal, char **values) { +int AtomVecSMD::data_atom_hybrid(int /*nlocal*/, char **/*values*/) { error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd"); return -1; } @@ -1120,7 +1120,7 @@ void AtomVecSMD::data_vel(int m, char **values) { unpack hybrid quantities from one line in Velocities section of data file ------------------------------------------------------------------------- */ -int AtomVecSMD::data_vel_hybrid(int m, char **values) { +int AtomVecSMD::data_vel_hybrid(int /*m*/, char **/*values*/) { error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd"); return 0; } @@ -1158,7 +1158,7 @@ void AtomVecSMD::pack_data(double **buf) { pack hybrid atom info for data file ------------------------------------------------------------------------- */ -int AtomVecSMD::pack_data_hybrid(int i, double *buf) { +int AtomVecSMD::pack_data_hybrid(int /*i*/, double * /*buf*/) { error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd"); return -1; } @@ -1180,7 +1180,7 @@ void AtomVecSMD::write_data(FILE *fp, int n, double **buf) { write hybrid atom info to data file ------------------------------------------------------------------------- */ -int AtomVecSMD::write_data_hybrid(FILE *fp, double *buf) { +int AtomVecSMD::write_data_hybrid(FILE * /*fp*/, double * /*buf*/) { error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd"); return -1; } @@ -1203,7 +1203,7 @@ void AtomVecSMD::pack_vel(double **buf) { pack hybrid velocity info for data file ------------------------------------------------------------------------- */ -int AtomVecSMD::pack_vel_hybrid(int i, double *buf) { +int AtomVecSMD::pack_vel_hybrid(int /*i*/, double * /*buf*/) { error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd"); return 0; } @@ -1222,7 +1222,7 @@ void AtomVecSMD::write_vel(FILE *fp, int n, double **buf) { write hybrid velocity info to data file ------------------------------------------------------------------------- */ -int AtomVecSMD::write_vel_hybrid(FILE *fp, double *buf) { +int AtomVecSMD::write_vel_hybrid(FILE * /*fp*/, double * /*buf*/) { error->one(FLERR, "hybrid atom style functionality not yet implemented for atom style smd"); return 3; } diff --git a/src/USER-SMD/compute_smd_triangle_mesh_vertices.cpp b/src/USER-SMD/compute_smd_triangle_vertices.cpp similarity index 98% rename from src/USER-SMD/compute_smd_triangle_mesh_vertices.cpp rename to src/USER-SMD/compute_smd_triangle_vertices.cpp index 67ec27778a692008a870b3af3728b0cfdcebfced..b24223b8b5f20030f4d00f59d14eb190ffefd6f3 100644 --- a/src/USER-SMD/compute_smd_triangle_mesh_vertices.cpp +++ b/src/USER-SMD/compute_smd_triangle_vertices.cpp @@ -28,7 +28,7 @@ #include #include #include -#include "compute_smd_triangle_mesh_vertices.h" +#include "compute_smd_triangle_vertices.h" #include "atom.h" #include "update.h" #include "modify.h" diff --git a/src/USER-SMD/compute_smd_triangle_mesh_vertices.h b/src/USER-SMD/compute_smd_triangle_vertices.h similarity index 100% rename from src/USER-SMD/compute_smd_triangle_mesh_vertices.h rename to src/USER-SMD/compute_smd_triangle_vertices.h diff --git a/src/USER-SMD/compute_smd_vol.h b/src/USER-SMD/compute_smd_vol.h index 5525ce57cbd2f84f59218181202c53b9dfcf353a..08ad1506279c3177b0ea9f23d13a3de7dff1643d 100644 --- a/src/USER-SMD/compute_smd_vol.h +++ b/src/USER-SMD/compute_smd_vol.h @@ -25,7 +25,7 @@ #ifdef COMPUTE_CLASS -ComputeStyle(smd/volume,ComputeSMDVol) +ComputeStyle(smd/vol,ComputeSMDVol) #else diff --git a/src/USER-SMD/fix_smd_adjust_dt.cpp b/src/USER-SMD/fix_smd_adjust_dt.cpp index 3685248d5e556fa7aa08f09b1f5fa42d252e08e7..f015c6c4dfdbe4357e1714bdcd4bfc10e6017630 100644 --- a/src/USER-SMD/fix_smd_adjust_dt.cpp +++ b/src/USER-SMD/fix_smd_adjust_dt.cpp @@ -86,13 +86,13 @@ void FixSMDTlsphDtReset::init() { /* ---------------------------------------------------------------------- */ -void FixSMDTlsphDtReset::setup(int vflag) { +void FixSMDTlsphDtReset::setup(int /*vflag*/) { end_of_step(); } /* ---------------------------------------------------------------------- */ -void FixSMDTlsphDtReset::initial_integrate(int vflag) { +void FixSMDTlsphDtReset::initial_integrate(int /*vflag*/) { //printf("in adjust_dt: dt = %20.10f\n", update->dt); diff --git a/src/USER-SMD/fix_smd_integrate_tlsph.cpp b/src/USER-SMD/fix_smd_integrate_tlsph.cpp index 4668e673fca68d72dd4c1ece19fecacc8ed94228..f931ae94ffcaca9f599d3ad26d67b92ee224cf5a 100644 --- a/src/USER-SMD/fix_smd_integrate_tlsph.cpp +++ b/src/USER-SMD/fix_smd_integrate_tlsph.cpp @@ -86,7 +86,7 @@ FixSMDIntegrateTlsph::FixSMDIntegrateTlsph(LAMMPS *lmp, int narg, char **arg) : } } else { char msg[128]; - sprintf(msg, "Illegal keyword for smd/integrate_tlsph: %s\n", arg[iarg]); + snprintf(msg,128, "Illegal keyword for smd/integrate_tlsph: %s\n", arg[iarg]); error->all(FLERR, msg); } @@ -125,7 +125,7 @@ void FixSMDIntegrateTlsph::init() { /* ---------------------------------------------------------------------- ------------------------------------------------------------------------- */ -void FixSMDIntegrateTlsph::initial_integrate(int vflag) { +void FixSMDIntegrateTlsph::initial_integrate(int /*vflag*/) { double dtfm, vsq, scale; // update v and x of atoms in group diff --git a/src/USER-SMD/fix_smd_integrate_ulsph.cpp b/src/USER-SMD/fix_smd_integrate_ulsph.cpp index a145deeb61ce90733aafd5d54c32d1aadaca5dd5..6c4705eb96ef45424522f418376d1de1911f294d 100644 --- a/src/USER-SMD/fix_smd_integrate_ulsph.cpp +++ b/src/USER-SMD/fix_smd_integrate_ulsph.cpp @@ -119,7 +119,7 @@ FixSMDIntegrateUlsph::FixSMDIntegrateUlsph(LAMMPS *lmp, int narg, char **arg) : } } else { char msg[128]; - sprintf(msg, "Illegal keyword for smd/integrate_ulsph: %s\n", arg[iarg]); + snprintf(msg,128, "Illegal keyword for smd/integrate_ulsph: %s\n", arg[iarg]); error->all(FLERR, msg); } @@ -158,7 +158,7 @@ void FixSMDIntegrateUlsph::init() { allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixSMDIntegrateUlsph::initial_integrate(int vflag) { +void FixSMDIntegrateUlsph::initial_integrate(int /*vflag*/) { double **x = atom->x; double **v = atom->v; double **f = atom->f; diff --git a/src/USER-SMD/fix_smd_move_triangulated_surface.cpp b/src/USER-SMD/fix_smd_move_triangulated_surface.cpp index d4afbe0535e4445709914d7ea71a9d1867a1eee5..fe8695b23ec341b39e80af441eaf5250e8435952 100644 --- a/src/USER-SMD/fix_smd_move_triangulated_surface.cpp +++ b/src/USER-SMD/fix_smd_move_triangulated_surface.cpp @@ -200,7 +200,7 @@ FixSMDMoveTriSurf::FixSMDMoveTriSurf(LAMMPS *lmp, int narg, char **arg) : } else { char msg[128]; - sprintf(msg, "Illegal keyword for fix smd/move_tri_surf: %s\n", arg[iarg]); + snprintf(msg,128, "Illegal keyword for fix smd/move_tri_surf: %s\n", arg[iarg]); error->all(FLERR, msg); } @@ -248,7 +248,7 @@ void FixSMDMoveTriSurf::init() { /* ---------------------------------------------------------------------- ------------------------------------------------------------------------- */ -void FixSMDMoveTriSurf::initial_integrate(int vflag) { +void FixSMDMoveTriSurf::initial_integrate(int /*vflag*/) { double **x = atom->x; double **x0 = atom->x0; double **v = atom->v; @@ -461,7 +461,7 @@ void FixSMDMoveTriSurf::reset_dt() { /* ---------------------------------------------------------------------- */ -int FixSMDMoveTriSurf::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) { +int FixSMDMoveTriSurf::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { int i, j, m; double **x0 = atom->x0; double **smd_data_9 = atom->smd_data_9; diff --git a/src/USER-SMD/fix_smd_setvel.cpp b/src/USER-SMD/fix_smd_setvel.cpp index 5e7cdbad3807dc15e1a535bb81b6db24d331ced8..4bc8b5127b07251a8f5492f4e919ca3077445074 100644 --- a/src/USER-SMD/fix_smd_setvel.cpp +++ b/src/USER-SMD/fix_smd_setvel.cpp @@ -231,7 +231,7 @@ void FixSMDSetVel::min_setup(int vflag) { /* ---------------------------------------------------------------------- */ //void FixSMDSetVel::initial_integrate(int vflag) { -void FixSMDSetVel::post_force(int vflag) { +void FixSMDSetVel::post_force(int /*vflag*/) { double **x = atom->x; double **f = atom->f; double **v = atom->v; diff --git a/src/USER-SMD/fix_smd_setvel.h b/src/USER-SMD/fix_smd_setvel.h index b987a56f6cc1bc9603d72113139f0d27986d3d58..f5fc34b4eae16a916f160e1e8c725682ce2ecf0b 100644 --- a/src/USER-SMD/fix_smd_setvel.h +++ b/src/USER-SMD/fix_smd_setvel.h @@ -24,12 +24,12 @@ #ifdef FIX_CLASS -FixStyle(smd/setvelocity,FixSMDSetVel) +FixStyle(smd/setvel,FixSMDSetVel) #else -#ifndef LMP_FIX_SMD_SET_VELOCITY_H -#define LMP_FIX_SMD_SET_VELOCITY_H +#ifndef LMP_FIX_SMD_SETVEL_H +#define LMP_FIX_SMD_SETVEL_H #include "fix.h" @@ -56,7 +56,6 @@ class FixSMDSetVel : public Fix { int xvar,yvar,zvar,xstyle,ystyle,zstyle; double foriginal[3],foriginal_all[3]; int force_flag; - int nlevels_respa; int maxatom; double **sforce; diff --git a/src/USER-SMD/fix_smd_tlsph_reference_configuration.cpp b/src/USER-SMD/fix_smd_tlsph_reference_configuration.cpp index 3e2812aa12e29a1f3e6d57ff3867d987676b361c..a2813cc3cae52d8a7b3bd1f09fec1ef333823d1d 100644 --- a/src/USER-SMD/fix_smd_tlsph_reference_configuration.cpp +++ b/src/USER-SMD/fix_smd_tlsph_reference_configuration.cpp @@ -149,7 +149,7 @@ void FixSMD_TLSPH_ReferenceConfiguration::pre_exchange() { if (updateFlag > 0) { if (comm->me == 0) { - printf("**** updating ref config at step: %ld\n", update->ntimestep); + printf("**** updating ref config at step: " BIGINT_FORMAT "\n", update->ntimestep); } for (i = 0; i < nlocal; i++) { @@ -199,7 +199,7 @@ void FixSMD_TLSPH_ReferenceConfiguration::pre_exchange() { so can be migrated or stored with atoms ------------------------------------------------------------------------- */ -void FixSMD_TLSPH_ReferenceConfiguration::setup(int vflag) { +void FixSMD_TLSPH_ReferenceConfiguration::setup(int /*vflag*/) { int i, j, ii, jj, n, inum, jnum; int *ilist, *jlist, *numneigh, **firstneigh; double r, h, wf, wfd; @@ -386,7 +386,7 @@ void FixSMD_TLSPH_ReferenceConfiguration::grow_arrays(int nmax) { copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixSMD_TLSPH_ReferenceConfiguration::copy_arrays(int i, int j, int delflag) { +void FixSMD_TLSPH_ReferenceConfiguration::copy_arrays(int i, int j, int /*delflag*/) { npartner[j] = npartner[i]; for (int m = 0; m < npartner[j]; m++) { partner[j][m] = partner[i][m]; @@ -470,7 +470,7 @@ int FixSMD_TLSPH_ReferenceConfiguration::pack_restart(int i, double *buf) { unpack values from atom->extra array to restart the fix ------------------------------------------------------------------------- */ -void FixSMD_TLSPH_ReferenceConfiguration::unpack_restart(int nlocal, int nth) { +void FixSMD_TLSPH_ReferenceConfiguration::unpack_restart(int /*nlocal*/, int /*nth*/) { // ipage = NULL if being called from granular pair style init() // skip to Nth set of extra values @@ -512,7 +512,7 @@ int FixSMD_TLSPH_ReferenceConfiguration::size_restart(int nlocal) { /* ---------------------------------------------------------------------- */ -int FixSMD_TLSPH_ReferenceConfiguration::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) { +int FixSMD_TLSPH_ReferenceConfiguration::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { int i, j, m; double *radius = atom->radius; double *vfrac = atom->vfrac; diff --git a/src/USER-SMD/fix_smd_wall_surface.cpp b/src/USER-SMD/fix_smd_wall_surface.cpp index 97c2ead5fc79d8b913173d09d709a34294888120..a37ba67a800c56eb8f30e510fca8e4915c293431 100644 --- a/src/USER-SMD/fix_smd_wall_surface.cpp +++ b/src/USER-SMD/fix_smd_wall_surface.cpp @@ -110,7 +110,7 @@ void FixSMDWallSurface::min_setup(int vflag) { must be done in setup (not init) since fix init comes before neigh init ------------------------------------------------------------------------- */ -void FixSMDWallSurface::setup(int vflag) { +void FixSMDWallSurface::setup(int /*vflag*/) { if (!first) return; @@ -223,62 +223,59 @@ int FixSMDWallSurface::count_words(const char *line) { void FixSMDWallSurface::read_triangles(int pass) { - double coord[3]; - - int nlocal_previous = atom->nlocal; - int ilocal = nlocal_previous; - int m; - int me; - - bigint natoms_previous = atom->natoms; - Vector3d *vert; - vert = new Vector3d[3]; - Vector3d normal, center; - - FILE *fp = fopen(filename, "r"); - if (fp == NULL) { - char str[128]; - sprintf(str, "Cannot open file %s", filename); - error->one(FLERR, str); - } - - MPI_Comm_rank(world, &me); - if (me == 0) { - if (screen) { - if (pass == 0) { - printf("\n>>========>>========>>========>>========>>========>>========>>========>>========\n"); - fprintf(screen, " scanning triangle pairs ...\n"); - } else { - fprintf(screen, " reading triangle pairs ...\n"); - } - } - if (logfile) { - if (pass == 0) { - fprintf(logfile, " scanning triangle pairs ...\n"); - } else { - fprintf(logfile, " reading triangle pairs ...\n"); - } - } - } - - char str[128]; - char line[256]; - char *retpointer; - char **values; - int nwords; - - // read STL solid name - retpointer = fgets(line, sizeof(line), fp); - if (retpointer == NULL) { - sprintf(str, "error reading number of triangle pairs"); - error->one(FLERR, str); - } - - nwords = count_words(line); - if (nwords < 1) { - sprintf(str, "first line of file is incorrect"); - error->one(FLERR, str); - } + double coord[3]; + + int nlocal_previous = atom->nlocal; + int ilocal = nlocal_previous; + int m; + int me; + + bigint natoms_previous = atom->natoms; + Vector3d *vert; + vert = new Vector3d[3]; + Vector3d normal, center; + + FILE *fp = fopen(filename, "r"); + if (fp == NULL) { + char str[128]; + snprintf(str,128, "Cannot open file %s", filename); + error->one(FLERR, str); + } + + MPI_Comm_rank(world, &me); + if (me == 0) { + if (screen) { + if (pass == 0) { + printf("\n>>========>>========>>========>>========>>========>>========>>========>>========\n"); + fprintf(screen, " scanning triangle pairs ...\n"); + } else { + fprintf(screen, " reading triangle pairs ...\n"); + } + } + if (logfile) { + if (pass == 0) { + fprintf(logfile, " scanning triangle pairs ...\n"); + } else { + fprintf(logfile, " reading triangle pairs ...\n"); + } + } + } + + char line[256]; + char *retpointer; + char **values; + int nwords; + + // read STL solid name + retpointer = fgets(line, sizeof(line), fp); + if (retpointer == NULL) { + error->one(FLERR,"error reading number of triangle pairs"); + } + + nwords = count_words(line); + if (nwords < 1) { + error->one(FLERR,"first line of file is incorrect"); + } // values = new char*[nwords]; // values[0] = strtok(line, " \t\n\r\f"); @@ -295,211 +292,203 @@ void FixSMDWallSurface::read_triangles(int pass) { // cout << "STL file contains solid body with name: " << values[1] << endl; // } - // iterate over STL facets util end of body is reached - - while (fgets(line, sizeof(line), fp)) { // read a line, should be the facet line - - // evaluate facet line - nwords = count_words(line); - if (nwords != 5) { - //sprintf(str, "found end solid line"); - //error->message(FLERR, str); - break; - } else { - // should be facet line - } - - values = new char*[nwords]; - values[0] = strtok(line, " \t\n\r\f"); - if (values[0] == NULL) - error->all(FLERR, "Incorrect atom format in data file"); - for (m = 1; m < nwords; m++) { - values[m] = strtok(NULL, " \t\n\r\f"); - if (values[m] == NULL) - error->all(FLERR, "Incorrect atom format in data file"); - } - - normal << force->numeric(FLERR, values[2]), force->numeric(FLERR, values[3]), force->numeric(FLERR, values[4]); - //cout << "normal is " << normal << endl; - - delete[] values; - - // read outer loop line - retpointer = fgets(line, sizeof(line), fp); - if (retpointer == NULL) { - sprintf(str, "error reading outer loop"); - error->one(FLERR, str); - } - - nwords = count_words(line); - if (nwords != 2) { - sprintf(str, "error reading outer loop"); - error->one(FLERR, str); - } - - // read vertex lines - - for (int k = 0; k < 3; k++) { - retpointer = fgets(line, sizeof(line), fp); - if (retpointer == NULL) { - sprintf(str, "error reading vertex line"); - error->one(FLERR, str); - } - - nwords = count_words(line); - if (nwords != 4) { - sprintf(str, "error reading vertex line"); - error->one(FLERR, str); - } - - values = new char*[nwords]; - values[0] = strtok(line, " \t\n\r\f"); - if (values[0] == NULL) - error->all(FLERR, "Incorrect vertex line"); - for (m = 1; m < nwords; m++) { - values[m] = strtok(NULL, " \t\n\r\f"); - if (values[m] == NULL) - error->all(FLERR, "Incorrect vertex line"); - } - - vert[k] << force->numeric(FLERR, values[1]), force->numeric(FLERR, values[2]), force->numeric(FLERR, values[3]); - //cout << "vertex is " << vert[k] << endl; - //printf("%s %s %s\n", values[1], values[2], values[3]); - delete[] values; - //exit(1); - - } - - // read end loop line - retpointer = fgets(line, sizeof(line), fp); - if (retpointer == NULL) { - sprintf(str, "error reading endloop"); - error->one(FLERR, str); - } - - nwords = count_words(line); - if (nwords != 1) { - sprintf(str, "error reading endloop"); - error->one(FLERR, str); - } - - // read end facet line - retpointer = fgets(line, sizeof(line), fp); - if (retpointer == NULL) { - sprintf(str, "error reading endfacet"); - error->one(FLERR, str); - } - - nwords = count_words(line); - if (nwords != 1) { - sprintf(str, "error reading endfacet"); - error->one(FLERR, str); - } - - // now we have a normal and three vertices ... proceed with adding triangle - - center = (vert[0] + vert[1] + vert[2]) / 3.0; - - // cout << "center is " << center << endl; - - double r1 = (center - vert[0]).norm(); - double r2 = (center - vert[1]).norm(); - double r3 = (center - vert[2]).norm(); - double r = MAX(r1, r2); - r = MAX(r, r3); - - /* - * if atom/molecule is in my subbox, create it - * ... use x0 to hold triangle normal. - * ... use smd_data_9 to hold the three vertices - * ... use x to hold triangle center - * ... radius is the mmaximal distance from triangle center to all vertices - */ - - // printf("coord: %f %f %f\n", coord[0], coord[1], coord[2]); - // printf("sublo: %f %f %f\n", sublo[0], sublo[1], sublo[2]); - // printf("subhi: %f %f %f\n", subhi[0], subhi[1], subhi[2]); - //printf("ilocal = %d\n", ilocal); - if (center(0) >= sublo[0] && center(0) < subhi[0] && center(1) >= sublo[1] && center(1) < subhi[1] && center(2) >= sublo[2] - && center(2) < subhi[2]) { - //printf("******* KERATIN nlocal=%d ***\n", nlocal); - coord[0] = center(0); - coord[1] = center(1); - coord[2] = center(2); - atom->avec->create_atom(wall_particle_type, coord); - - /* - * need to initialize pointers to atom vec arrays here, because they could have changed - * due to calling grow() in create_atoms() above; - */ - - tagint *mol = atom->molecule; - int *type = atom->type; - double *radius = atom->radius; - double *contact_radius = atom->contact_radius; - double **smd_data_9 = atom->smd_data_9; - double **x0 = atom->x0; - - radius[ilocal] = r; //ilocal; - contact_radius[ilocal] = r; //ilocal; - mol[ilocal] = wall_molecule_id; - type[ilocal] = wall_particle_type; - x0[ilocal][0] = normal(0); - x0[ilocal][1] = normal(1); - x0[ilocal][2] = normal(2); - smd_data_9[ilocal][0] = vert[0](0); - smd_data_9[ilocal][1] = vert[0](1); - smd_data_9[ilocal][2] = vert[0](2); - smd_data_9[ilocal][3] = vert[1](0); - smd_data_9[ilocal][4] = vert[1](1); - smd_data_9[ilocal][5] = vert[1](2); - smd_data_9[ilocal][6] = vert[2](0); - smd_data_9[ilocal][7] = vert[2](1); - smd_data_9[ilocal][8] = vert[2](2); - - ilocal++; - } - - } + // iterate over STL facets util end of body is reached + + while (fgets(line, sizeof(line), fp)) { // read a line, should be the facet line + + // evaluate facet line + nwords = count_words(line); + if (nwords != 5) { + //sprintf(str, "found end solid line"); + //error->message(FLERR, str); + break; + } else { + // should be facet line + } + + values = new char*[nwords]; + values[0] = strtok(line, " \t\n\r\f"); + if (values[0] == NULL) + error->all(FLERR, "Incorrect atom format in data file"); + for (m = 1; m < nwords; m++) { + values[m] = strtok(NULL, " \t\n\r\f"); + if (values[m] == NULL) + error->all(FLERR, "Incorrect atom format in data file"); + } + + normal << force->numeric(FLERR, values[2]), force->numeric(FLERR, values[3]), force->numeric(FLERR, values[4]); + //cout << "normal is " << normal << endl; + + delete[] values; + + // read outer loop line + retpointer = fgets(line, sizeof(line), fp); + if (retpointer == NULL) { + error->one(FLERR, "error reading outer loop"); + } + + nwords = count_words(line); + if (nwords != 2) { + error->one(FLERR,"error reading outer loop"); + } + + // read vertex lines + + for (int k = 0; k < 3; k++) { + retpointer = fgets(line, sizeof(line), fp); + if (retpointer == NULL) { + error->one(FLERR,"error reading vertex line"); + } + + nwords = count_words(line); + if (nwords != 4) { + error->one(FLERR,"error reading vertex line"); + } + + values = new char*[nwords]; + values[0] = strtok(line, " \t\n\r\f"); + if (values[0] == NULL) + error->all(FLERR,"Incorrect vertex line"); + for (m = 1; m < nwords; m++) { + values[m] = strtok(NULL, " \t\n\r\f"); + if (values[m] == NULL) + error->all(FLERR, "Incorrect vertex line"); + } + + vert[k] << force->numeric(FLERR, values[1]), force->numeric(FLERR, values[2]), force->numeric(FLERR, values[3]); + //cout << "vertex is " << vert[k] << endl; + //printf("%s %s %s\n", values[1], values[2], values[3]); + delete[] values; + //exit(1); + + } + + // read end loop line + retpointer = fgets(line, sizeof(line), fp); + if (retpointer == NULL) { + error->one(FLERR, "error reading endloop"); + } + + nwords = count_words(line); + if (nwords != 1) { + error->one(FLERR,"error reading endloop"); + } + + // read end facet line + retpointer = fgets(line, sizeof(line), fp); + if (retpointer == NULL) { + error->one(FLERR,"error reading endfacet"); + } + + nwords = count_words(line); + if (nwords != 1) { + error->one(FLERR,"error reading endfacet"); + } + + // now we have a normal and three vertices ... proceed with adding triangle + + center = (vert[0] + vert[1] + vert[2]) / 3.0; + + // cout << "center is " << center << endl; + + double r1 = (center - vert[0]).norm(); + double r2 = (center - vert[1]).norm(); + double r3 = (center - vert[2]).norm(); + double r = MAX(r1, r2); + r = MAX(r, r3); + + /* + * if atom/molecule is in my subbox, create it + * ... use x0 to hold triangle normal. + * ... use smd_data_9 to hold the three vertices + * ... use x to hold triangle center + * ... radius is the mmaximal distance from triangle center to all vertices + */ + + // printf("coord: %f %f %f\n", coord[0], coord[1], coord[2]); + // printf("sublo: %f %f %f\n", sublo[0], sublo[1], sublo[2]); + // printf("subhi: %f %f %f\n", subhi[0], subhi[1], subhi[2]); + //printf("ilocal = %d\n", ilocal); + if (center(0) >= sublo[0] && center(0) < subhi[0] && center(1) >= sublo[1] && center(1) < subhi[1] && center(2) >= sublo[2] + && center(2) < subhi[2]) { + //printf("******* KERATIN nlocal=%d ***\n", nlocal); + coord[0] = center(0); + coord[1] = center(1); + coord[2] = center(2); + atom->avec->create_atom(wall_particle_type, coord); + + /* + * need to initialize pointers to atom vec arrays here, because they could have changed + * due to calling grow() in create_atoms() above; + */ + + tagint *mol = atom->molecule; + int *type = atom->type; + double *radius = atom->radius; + double *contact_radius = atom->contact_radius; + double **smd_data_9 = atom->smd_data_9; + double **x0 = atom->x0; + + radius[ilocal] = r; //ilocal; + contact_radius[ilocal] = r; //ilocal; + mol[ilocal] = wall_molecule_id; + type[ilocal] = wall_particle_type; + x0[ilocal][0] = normal(0); + x0[ilocal][1] = normal(1); + x0[ilocal][2] = normal(2); + smd_data_9[ilocal][0] = vert[0](0); + smd_data_9[ilocal][1] = vert[0](1); + smd_data_9[ilocal][2] = vert[0](2); + smd_data_9[ilocal][3] = vert[1](0); + smd_data_9[ilocal][4] = vert[1](1); + smd_data_9[ilocal][5] = vert[1](2); + smd_data_9[ilocal][6] = vert[2](0); + smd_data_9[ilocal][7] = vert[2](1); + smd_data_9[ilocal][8] = vert[2](2); + + ilocal++; + } + + } // set new total # of atoms and error check - bigint nblocal = atom->nlocal; - MPI_Allreduce(&nblocal, &atom->natoms, 1, MPI_LMP_BIGINT, MPI_SUM, world); - if (atom->natoms < 0 || atom->natoms >= MAXBIGINT) - error->all(FLERR, "Too many total atoms"); + bigint nblocal = atom->nlocal; + MPI_Allreduce(&nblocal, &atom->natoms, 1, MPI_LMP_BIGINT, MPI_SUM, world); + if (atom->natoms < 0 || atom->natoms >= MAXBIGINT) + error->all(FLERR, "Too many total atoms"); // add IDs for newly created atoms // check that atom IDs are valid - if (atom->tag_enable) - atom->tag_extend(); - atom->tag_check(); + if (atom->tag_enable) + atom->tag_extend(); + atom->tag_check(); // create global mapping of atoms // zero nghost in case are adding new atoms to existing atoms - if (atom->map_style) { - atom->nghost = 0; - atom->map_init(); - atom->map_set(); - } + if (atom->map_style) { + atom->nghost = 0; + atom->map_init(); + atom->map_set(); + } // print status - if (comm->me == 0) { - if (screen) { - printf("... fix smd/wall_surface finished reading triangulated surface\n"); - fprintf(screen, "fix smd/wall_surface created " BIGINT_FORMAT " atoms\n", atom->natoms - natoms_previous); - printf(">>========>>========>>========>>========>>========>>========>>========>>========\n"); - } - if (logfile) { - fprintf(logfile, "... fix smd/wall_surface finished reading triangulated surface\n"); - fprintf(logfile, "fix smd/wall_surface created " BIGINT_FORMAT " atoms\n", atom->natoms - natoms_previous); - fprintf(logfile, ">>========>>========>>========>>========>>========>>========>>========>>========\n"); - } - } - - delete[] vert; - fclose(fp); + if (comm->me == 0) { + if (screen) { + printf("... fix smd/wall_surface finished reading triangulated surface\n"); + fprintf(screen, "fix smd/wall_surface created " BIGINT_FORMAT " atoms\n", atom->natoms - natoms_previous); + printf(">>========>>========>>========>>========>>========>>========>>========>>========\n"); + } + if (logfile) { + fprintf(logfile, "... fix smd/wall_surface finished reading triangulated surface\n"); + fprintf(logfile, "fix smd/wall_surface created " BIGINT_FORMAT " atoms\n", atom->natoms - natoms_previous); + fprintf(logfile, ">>========>>========>>========>>========>>========>>========>>========>>========\n"); + } + } + + delete[] vert; + fclose(fp); } diff --git a/src/USER-SMD/pair_smd_hertz.cpp b/src/USER-SMD/pair_smd_hertz.cpp index 815db4a4508a297d779a8a4499f21aa073fa17d4..13f48e995eb73e3fa39cfe96b43f9bdf34489d90 100644 --- a/src/USER-SMD/pair_smd_hertz.cpp +++ b/src/USER-SMD/pair_smd_hertz.cpp @@ -373,7 +373,7 @@ double PairHertz::memory_usage() { return 0.0; } -void *PairHertz::extract(const char *str, int &i) { +void *PairHertz::extract(const char *str, int &/*i*/) { //printf("in PairTriSurf::extract\n"); if (strcmp(str, "smd/hertz/stable_time_increment_ptr") == 0) { return (void *) &stable_time_increment; diff --git a/src/USER-SMD/pair_smd_tlsph.cpp b/src/USER-SMD/pair_smd_tlsph.cpp index 4dd16c4d83a4ee212491da430dc37f34fe49b751..ab6b7d2785dd62d3632552f5a4dba6f469196165 100644 --- a/src/USER-SMD/pair_smd_tlsph.cpp +++ b/src/USER-SMD/pair_smd_tlsph.cpp @@ -1684,8 +1684,8 @@ void PairTlsph::coeff(int narg, char **arg) { } // end energy release rate failure criterion else { - sprintf(str, "unknown *KEYWORD: %s", arg[ioffset]); - error->all(FLERR, str); + snprintf(str,128,"unknown *KEYWORD: %s", arg[ioffset]); + error->all(FLERR, str); } } @@ -1802,7 +1802,7 @@ double PairTlsph::memory_usage() { extract method to provide access to this class' data structures ------------------------------------------------------------------------- */ -void *PairTlsph::extract(const char *str, int &i) { +void *PairTlsph::extract(const char *str, int &/*i*/) { //printf("in PairTlsph::extract\n"); if (strcmp(str, "smd/tlsph/Fincr_ptr") == 0) { return (void *) Fincr; @@ -1839,7 +1839,7 @@ void *PairTlsph::extract(const char *str, int &i) { /* ---------------------------------------------------------------------- */ -int PairTlsph::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) { +int PairTlsph::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { int i, j, m; tagint *mol = atom->molecule; double *damage = atom->damage; @@ -1928,7 +1928,7 @@ void PairTlsph::unpack_forward_comm(int n, int first, double *buf) { ------------------------------------------------------------------------- */ void PairTlsph::effective_longitudinal_modulus(const int itype, const double dt, const double d_iso, const double p_rate, - const Matrix3d d_dev, const Matrix3d sigma_dev_rate, const double damage, double &K_eff, double &mu_eff, double &M_eff) { + const Matrix3d d_dev, const Matrix3d sigma_dev_rate, const double /*damage*/, double &K_eff, double &mu_eff, double &M_eff) { double M0; // initial longitudinal modulus double shear_rate_sq; @@ -2094,7 +2094,7 @@ void PairTlsph::ComputeStressDeviator(const int i, const Matrix3d sigmaInitial_d /* ---------------------------------------------------------------------- Compute damage. Called from AssembleStress(). ------------------------------------------------------------------------- */ -void PairTlsph::ComputeDamage(const int i, const Matrix3d strain, const Matrix3d stress, Matrix3d &stress_damaged) { +void PairTlsph::ComputeDamage(const int i, const Matrix3d strain, const Matrix3d stress, Matrix3d &/*stress_damaged*/) { double *eff_plastic_strain = atom->eff_plastic_strain; double *eff_plastic_strain_rate = atom->eff_plastic_strain_rate; double *radius = atom->radius; diff --git a/src/USER-SMD/pair_smd_triangulated_surface.cpp b/src/USER-SMD/pair_smd_triangulated_surface.cpp index b8bff7e799948c73a47ecc71c44da5c15e068dd3..e40c876ec3de098739dbdb56ef5b07786c725fba 100644 --- a/src/USER-SMD/pair_smd_triangulated_surface.cpp +++ b/src/USER-SMD/pair_smd_triangulated_surface.cpp @@ -834,7 +834,7 @@ double PairTriSurf::clamp(const double a, const double min, const double max) { } } -void *PairTriSurf::extract(const char *str, int &i) { +void *PairTriSurf::extract(const char *str, int &/*i*/) { //printf("in PairTriSurf::extract\n"); if (strcmp(str, "smd/tri_surface/stable_time_increment_ptr") == 0) { return (void *) &stable_time_increment; diff --git a/src/USER-SMD/pair_smd_ulsph.cpp b/src/USER-SMD/pair_smd_ulsph.cpp index 96eb912faec26a2e7b18a888eebd359f68771fa2..50af6e2356e7a14233b8865bec031029259d1d38 100644 --- a/src/USER-SMD/pair_smd_ulsph.cpp +++ b/src/USER-SMD/pair_smd_ulsph.cpp @@ -1331,8 +1331,8 @@ void PairULSPH::coeff(int narg, char **arg) { } // end *ARTIFICIAL_STRESS else { - sprintf(str, "unknown *KEYWORD: %s", arg[ioffset]); - error->all(FLERR, str); + snprintf(str,128, "unknown *KEYWORD: %s", arg[ioffset]); + error->all(FLERR, str); } } @@ -1487,7 +1487,7 @@ double PairULSPH::memory_usage() { /* ---------------------------------------------------------------------- */ -int PairULSPH::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) { +int PairULSPH::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { double *vfrac = atom->vfrac; double *eff_plastic_strain = atom->eff_plastic_strain; int i, j, m; @@ -1562,7 +1562,7 @@ void PairULSPH::unpack_forward_comm(int n, int first, double *buf) { * EXTRACT */ -void *PairULSPH::extract(const char *str, int &i) { +void *PairULSPH::extract(const char *str, int &/*i*/) { //printf("in extract\n"); if (strcmp(str, "smd/ulsph/smoothVel_ptr") == 0) { return (void *) smoothVel; diff --git a/src/USER-SMD/smd_material_models.cpp b/src/USER-SMD/smd_material_models.cpp index e3deb199b650be86b37fc7998152a57cfa6c22e1..42134288720406df76ebabdce03393bdfe6df019 100644 --- a/src/USER-SMD/smd_material_models.cpp +++ b/src/USER-SMD/smd_material_models.cpp @@ -97,7 +97,7 @@ void ShockEOS(double rho, double rho0, double e, double e0, double c0, double S, final pressure pFinal ------------------------------------------------------------------------- */ -void polynomialEOS(double rho, double rho0, double e, double C0, double C1, double C2, double C3, double C4, double C5, double C6, +void polynomialEOS(double rho, double rho0, double /*e*/, double C0, double C1, double C2, double C3, double /*C4*/, double /*C5*/, double /*C6*/, double pInitial, double dt, double &pFinal, double &p_rate) { double mu = rho / rho0 - 1.0; @@ -307,7 +307,7 @@ void LinearPlasticStrength(const double G, const double yieldStress, const Matri output: sigmaFinal_dev, sigmaFinal_dev_rate__: final stress deviator and its rate. ------------------------------------------------------------------------- */ void JohnsonCookStrength(const double G, const double cp, const double espec, const double A, const double B, const double a, - const double C, const double epdot0, const double T0, const double Tmelt, const double M, const double dt, const double ep, + const double C, const double epdot0, const double T0, const double Tmelt, const double /*M*/, const double dt, const double ep, const double epdot, const Matrix3d sigmaInitial_dev, const Matrix3d d_dev, Matrix3d &sigmaFinal_dev__, Matrix3d &sigma_dev_rate__, double &plastic_strain_increment) { diff --git a/src/USER-SMTBQ/pair_smtbq.cpp b/src/USER-SMTBQ/pair_smtbq.cpp index 1028d8a8972117568e8670f101296a1db25703db..c2690dc864b49ff1106b801db9836a2b74d2d2f3 100644 --- a/src/USER-SMTBQ/pair_smtbq.cpp +++ b/src/USER-SMTBQ/pair_smtbq.cpp @@ -242,7 +242,7 @@ void PairSMTBQ::allocate() global settings ------------------------------------------------------------------------- */ -void PairSMTBQ::settings(int narg, char **arg) +void PairSMTBQ::settings(int narg, char **/*arg*/) { if (narg > 0) error->all(FLERR,"Illegal pair_style command"); } @@ -399,7 +399,7 @@ void PairSMTBQ::read_file(char *file) fp = force->open_potential(file); if ( fp == NULL ) { char str[128]; - sprintf(str,"Cannot open SMTBQ potential file %s",file); + snprintf(str,128,"Cannot open SMTBQ potential file %s",file); error->one(FLERR,str); } @@ -1592,7 +1592,7 @@ void PairSMTBQ::tabqeq() /* ---------------------------------------------------------------------*/ void PairSMTBQ::potqeq(int i, int j, double qi, double qj, double rsq, - double &fforce, int eflag, double &eng) + double &fforce, int /*eflag*/, double &eng) { /* =================================================================== @@ -1840,7 +1840,7 @@ void PairSMTBQ::pot_ES2 (int i, int j, double rsq, double &pot) -------------------------------------------------------------------- */ void PairSMTBQ::rep_OO(Intparam *intparam, double rsq, double &fforce, - int eflag, double &eng) + int /*eflag*/, double &eng) { double r,tmp_exp,tmp; double A = intparam->abuck ; @@ -1858,7 +1858,7 @@ void PairSMTBQ::rep_OO(Intparam *intparam, double rsq, double &fforce, void PairSMTBQ::Attr_OO(Intparam *intparam, double rsq, double &fforce, - int eflag, double &eng) + int /*eflag*/, double &eng) { double r,tmp_exp; double aOO = intparam->aOO ; @@ -1980,8 +1980,8 @@ void PairSMTBQ::tabsm() /* -------------------------------------------------------------- */ -void PairSMTBQ::repulsive(Intparam *intparam, double rsq, int i, int j, - double &fforce, int eflag, double &eng) +void PairSMTBQ::repulsive(Intparam *intparam, double rsq, int /*i*/, int /*j*/, + double &fforce, int /*eflag*/, double &eng) { /* ================================================ @@ -2031,7 +2031,7 @@ void PairSMTBQ::repulsive(Intparam *intparam, double rsq, int i, int j, void PairSMTBQ::attractive(Intparam *intparam, double rsq, - int eflag, int i, double iq, int j, double jq) + int /*eflag*/, int i, double /*iq*/, int /*j*/, double /*jq*/) { int itype,l; double r,t1,t2,xi,sds; @@ -3334,7 +3334,7 @@ void PairSMTBQ::groupQEqAllParallel_QEq() /* ---------------------------------------------------------------------- */ -void PairSMTBQ::Init_charge(int *nQEq, int *nQEqa, int *nQEqc) +void PairSMTBQ::Init_charge(int * /*nQEq*/, int * /*nQEqa*/, int * /*nQEqc*/) { int ii,i,gp,itype; int *ilist,test[nteam],init[nteam]; @@ -3391,7 +3391,7 @@ void PairSMTBQ::Init_charge(int *nQEq, int *nQEqa, int *nQEqc) * COMMUNICATION * ---------------------------------------------------------------------- */ -int PairSMTBQ::pack_forward_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) +int PairSMTBQ::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/USER-SPH/fix_meso.cpp b/src/USER-SPH/fix_meso.cpp index d7a5d81517600583101303174793d37f29ec27ae..b688eccfea4bff3003db9db77d77d15db7349abe 100644 --- a/src/USER-SPH/fix_meso.cpp +++ b/src/USER-SPH/fix_meso.cpp @@ -64,7 +64,7 @@ void FixMeso::init() { dtf = 0.5 * update->dt * force->ftm2v; } -void FixMeso::setup_pre_force(int vflag) +void FixMeso::setup_pre_force(int /*vflag*/) { // set vest equal to v double **v = atom->v; @@ -87,7 +87,7 @@ void FixMeso::setup_pre_force(int vflag) allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixMeso::initial_integrate(int vflag) { +void FixMeso::initial_integrate(int /*vflag*/) { // update v and x and rho and e of atoms in group double **x = atom->x; diff --git a/src/USER-SPH/fix_meso_stationary.cpp b/src/USER-SPH/fix_meso_stationary.cpp index f5fc306320d1951078cd122500705898a30f6262..29e8a1554c7abcb08175a27763e8846865d8e99c 100644 --- a/src/USER-SPH/fix_meso_stationary.cpp +++ b/src/USER-SPH/fix_meso_stationary.cpp @@ -67,7 +67,7 @@ void FixMesoStationary::init() { allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixMesoStationary::initial_integrate(int vflag) { +void FixMesoStationary::initial_integrate(int /*vflag*/) { double *rho = atom->rho; double *drho = atom->drho; diff --git a/src/USER-SPH/pair_sph_heatconduction.cpp b/src/USER-SPH/pair_sph_heatconduction.cpp index 6f0cf7eca2f734b4e19bb3c69246aeae71996874..4a8990d6fdc05950bc9e29ce889f4c118c1ac20c 100644 --- a/src/USER-SPH/pair_sph_heatconduction.cpp +++ b/src/USER-SPH/pair_sph_heatconduction.cpp @@ -155,7 +155,7 @@ void PairSPHHeatConduction::allocate() { global settings ------------------------------------------------------------------------- */ -void PairSPHHeatConduction::settings(int narg, char **arg) { +void PairSPHHeatConduction::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR, "Illegal number of setting arguments for pair_style sph/heatconduction"); @@ -211,8 +211,8 @@ double PairSPHHeatConduction::init_one(int i, int j) { /* ---------------------------------------------------------------------- */ -double PairSPHHeatConduction::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, double &fforce) { +double PairSPHHeatConduction::single(int /*i*/, int /*j*/, int /*itype*/, int /*jtype*/, + double /*rsq*/, double /*factor_coul*/, double /*factor_lj*/, double &fforce) { fforce = 0.0; return 0.0; diff --git a/src/USER-SPH/pair_sph_idealgas.cpp b/src/USER-SPH/pair_sph_idealgas.cpp index 99fba05917ae35dbf71836cf10c5c568c10a5278..32b3e612332dca166a5f239a91ff6bca007d618e 100644 --- a/src/USER-SPH/pair_sph_idealgas.cpp +++ b/src/USER-SPH/pair_sph_idealgas.cpp @@ -197,7 +197,7 @@ void PairSPHIdealGas::allocate() { global settings ------------------------------------------------------------------------- */ -void PairSPHIdealGas::settings(int narg, char **arg) { +void PairSPHIdealGas::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR, "Illegal number of setting arguments for pair_style sph/idealgas"); @@ -252,8 +252,8 @@ double PairSPHIdealGas::init_one(int i, int j) { /* ---------------------------------------------------------------------- */ -double PairSPHIdealGas::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, double &fforce) { +double PairSPHIdealGas::single(int /*i*/, int /*j*/, int /*itype*/, int /*jtype*/, + double /*rsq*/, double /*factor_coul*/, double /*factor_lj*/, double &fforce) { fforce = 0.0; return 0.0; diff --git a/src/USER-SPH/pair_sph_lj.cpp b/src/USER-SPH/pair_sph_lj.cpp index 5cefdf87c43645e32be21de131ce1d8ec2046ee7..c382833baff7d6b92c669f5fcc432d3a933bc833 100644 --- a/src/USER-SPH/pair_sph_lj.cpp +++ b/src/USER-SPH/pair_sph_lj.cpp @@ -204,7 +204,7 @@ void PairSPHLJ::allocate() { global settings ------------------------------------------------------------------------- */ -void PairSPHLJ::settings(int narg, char **arg) { +void PairSPHLJ::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR, "Illegal number of setting arguments for pair_style sph/lj"); @@ -261,8 +261,8 @@ double PairSPHLJ::init_one(int i, int j) { /* ---------------------------------------------------------------------- */ -double PairSPHLJ::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, double &fforce) { +double PairSPHLJ::single(int /*i*/, int /*j*/, int /*itype*/, int /*jtype*/, + double /*rsq*/, double /*factor_coul*/, double /*factor_lj*/, double &fforce) { fforce = 0.0; return 0.0; diff --git a/src/USER-SPH/pair_sph_rhosum.cpp b/src/USER-SPH/pair_sph_rhosum.cpp index 605187d3a733115254fe3a74967442c63de0afa2..7a3c78efd022a7959acf96bf21396a994a8698e8 100644 --- a/src/USER-SPH/pair_sph_rhosum.cpp +++ b/src/USER-SPH/pair_sph_rhosum.cpp @@ -278,8 +278,8 @@ double PairSPHRhoSum::init_one(int i, int j) { /* ---------------------------------------------------------------------- */ -double PairSPHRhoSum::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, double &fforce) { +double PairSPHRhoSum::single(int /*i*/, int /*j*/, int /*itype*/, int /*jtype*/, double /*rsq*/, + double /*factor_coul*/, double /*factor_lj*/, double &fforce) { fforce = 0.0; return 0.0; @@ -288,7 +288,7 @@ double PairSPHRhoSum::single(int i, int j, int itype, int jtype, double rsq, /* ---------------------------------------------------------------------- */ int PairSPHRhoSum::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) { + int /*pbc_flag*/, int * /*pbc*/) { int i, j, m; double *rho = atom->rho; diff --git a/src/USER-SPH/pair_sph_taitwater.cpp b/src/USER-SPH/pair_sph_taitwater.cpp index 00500b940de1803c47982e2b4936ddbd005cc915..42b318f2c95008631d27c4eab3db8c0e06e50c10 100644 --- a/src/USER-SPH/pair_sph_taitwater.cpp +++ b/src/USER-SPH/pair_sph_taitwater.cpp @@ -225,7 +225,7 @@ void PairSPHTaitwater::allocate() { global settings ------------------------------------------------------------------------- */ -void PairSPHTaitwater::settings(int narg, char **arg) { +void PairSPHTaitwater::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR, "Illegal number of setting arguments for pair_style sph/taitwater"); @@ -293,8 +293,8 @@ double PairSPHTaitwater::init_one(int i, int j) { /* ---------------------------------------------------------------------- */ -double PairSPHTaitwater::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, double &fforce) { +double PairSPHTaitwater::single(int /*i*/, int /*j*/, int /*itype*/, int /*jtype*/, + double /*rsq*/, double /*factor_coul*/, double /*factor_lj*/, double &fforce) { fforce = 0.0; return 0.0; diff --git a/src/USER-SPH/pair_sph_taitwater_morris.cpp b/src/USER-SPH/pair_sph_taitwater_morris.cpp index 80607cb333b2cd882c1b276c703e4c5d173c9b94..8012895af8ed147dcb5596160b3ac29396451958 100644 --- a/src/USER-SPH/pair_sph_taitwater_morris.cpp +++ b/src/USER-SPH/pair_sph_taitwater_morris.cpp @@ -225,7 +225,7 @@ void PairSPHTaitwaterMorris::allocate() { global settings ------------------------------------------------------------------------- */ -void PairSPHTaitwaterMorris::settings(int narg, char **arg) { +void PairSPHTaitwaterMorris::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR, "Illegal number of setting arguments for pair_style sph/taitwater/morris"); @@ -289,8 +289,8 @@ double PairSPHTaitwaterMorris::init_one(int i, int j) { /* ---------------------------------------------------------------------- */ -double PairSPHTaitwaterMorris::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, double &fforce) { +double PairSPHTaitwaterMorris::single(int /*i*/, int /*j*/, int /*itype*/, int /*jtype*/, + double /*rsq*/, double /*factor_coul*/, double /*factor_lj*/, double &fforce) { fforce = 0.0; return 0.0; diff --git a/src/USER-UEF/dump_cfg_uef.cpp b/src/USER-UEF/dump_cfg_uef.cpp index 44af823332c156d6ed520a460f277ae1a25e2bbe..58b3ec5a1fb8715c900bd61be9dcb037c66b73dd 100644 --- a/src/USER-UEF/dump_cfg_uef.cpp +++ b/src/USER-UEF/dump_cfg_uef.cpp @@ -90,9 +90,7 @@ void DumpCFGUef::write_header(bigint n) if (atom->peri_flag) scale = atom->pdscale; else if (unwrapflag == 1) scale = UNWRAPEXPAND; - char str[64]; - sprintf(str,"Number of particles = %s\n",BIGINT_FORMAT); - fprintf(fp,str,n); + fprintf(fp,"Number of particles = " BIGINT_FORMAT "\n",n); fprintf(fp,"A = %g Angstrom (basic length-scale)\n",scale); // in box[][] columns are cell edges // in H0, rows are cell edges diff --git a/src/USER-UEF/fix_nh_uef.cpp b/src/USER-UEF/fix_nh_uef.cpp index bfa45492864ff4708fb0e22167b04b69ca95cbc1..bffcd7849f7535ae9f486fb7664b1722718b79b3 100644 --- a/src/USER-UEF/fix_nh_uef.cpp +++ b/src/USER-UEF/fix_nh_uef.cpp @@ -348,7 +348,7 @@ void FixNHUef::final_integrate() * at outer level: call this->final_integrate() * at other levels: rotate -> 2nd verlet step -> rotate back * ---------------------------------------------------------------------- */ -void FixNHUef::final_integrate_respa(int ilevel, int iloop) +void FixNHUef::final_integrate_respa(int ilevel, int /*iloop*/) { // set timesteps by level dtf = 0.5 * step_respa[ilevel] * force->ftm2v; diff --git a/src/accelerator_kokkos.h b/src/accelerator_kokkos.h index 8bbb6c4788c4bc17ea32a34424abc508d646b2ca..e64bde24bedc6796eea607735144662e3c644024 100644 --- a/src/accelerator_kokkos.h +++ b/src/accelerator_kokkos.h @@ -66,8 +66,8 @@ class AtomKokkos : public Atom { tagint **k_special; AtomKokkos(class LAMMPS *lmp) : Atom(lmp) {} ~AtomKokkos() {} - void sync(const ExecutionSpace space, unsigned int mask) {} - void modified(const ExecutionSpace space, unsigned int mask) {} + void sync(const ExecutionSpace /*space*/, unsigned int /*mask*/) {} + void modified(const ExecutionSpace /*space*/, unsigned int /*mask*/) {} }; class CommKokkos : public CommBrick { diff --git a/src/accelerator_omp.h b/src/accelerator_omp.h index 6caa0826fe8e48fe7da7b99525ea6668fc84105c..25910ae800972c95669aca2ca7f8d1cdc272192a 100644 --- a/src/accelerator_omp.h +++ b/src/accelerator_omp.h @@ -17,47 +17,6 @@ // true interface to USER-OMP -// this part is used inside the neighbor.h header file to -// add functions to the Neighbor class definition - -#ifdef LMP_INSIDE_NEIGHBOR_H - - void half_nsq_no_newton_omp(class NeighList *); - void half_nsq_no_newton_ghost_omp(class NeighList *); - void half_nsq_newton_omp(class NeighList *); - - void half_bin_no_newton_omp(class NeighList *); - void half_bin_no_newton_ghost_omp(class NeighList *); - void half_bin_newton_omp(class NeighList *); - void half_bin_newton_tri_omp(class NeighList *); - - void half_multi_no_newton_omp(class NeighList *); - void half_multi_newton_omp(class NeighList *); - void half_multi_newton_tri_omp(class NeighList *); - - void full_nsq_omp(class NeighList *); - void full_nsq_ghost_omp(class NeighList *); - void full_bin_omp(class NeighList *); - void full_bin_ghost_omp(class NeighList *); - void full_multi_omp(class NeighList *); - - void half_from_full_no_newton_omp(class NeighList *); - void half_from_full_newton_omp(class NeighList *); - - void granular_nsq_no_newton_omp(class NeighList *); - void granular_nsq_newton_omp(class NeighList *); - void granular_bin_no_newton_omp(class NeighList *); - void granular_bin_newton_omp(class NeighList *); - void granular_bin_newton_tri_omp(class NeighList *); - - void respa_nsq_no_newton_omp(class NeighList *); - void respa_nsq_newton_omp(class NeighList *); - void respa_bin_no_newton_omp(class NeighList *); - void respa_bin_newton_omp(class NeighList *); - void respa_bin_newton_tri_omp(class NeighList *); - -#else /* !LMP_INSIDE_NEIGHBOR_H */ - // provide a DomainOMP class with some overrides for Domain #include "domain.h" @@ -68,8 +27,8 @@ namespace LAMMPS_NS { class DomainOMP : public Domain { public: - DomainOMP(class LAMMPS *lmp) : Domain(lmp) {}; - virtual ~DomainOMP() {}; + DomainOMP(class LAMMPS *lmp) : Domain(lmp) {} + virtual ~DomainOMP() {} // multi-threaded versions virtual void pbc(); @@ -81,48 +40,5 @@ class DomainOMP : public Domain { } #endif /* LMP_DOMAIN_OMP_H */ -#endif /* !LMP_INSIDE_NEIGHBOR_H */ - -#else /* !LMP_USER_OMP */ - -// dummy interface to USER-OMP -// needed for compiling when USER-OMP is not installed - -#ifdef LMP_INSIDE_NEIGHBOR_H - - void half_nsq_no_newton_omp(class NeighList *) {} - void half_nsq_no_newton_ghost_omp(class NeighList *) {} - void half_nsq_newton_omp(class NeighList *) {} - - void half_bin_no_newton_omp(class NeighList *) {} - void half_bin_no_newton_ghost_omp(class NeighList *) {} - void half_bin_newton_omp(class NeighList *) {} - void half_bin_newton_tri_omp(class NeighList *) {} - - void half_multi_no_newton_omp(class NeighList *) {} - void half_multi_newton_omp(class NeighList *) {} - void half_multi_newton_tri_omp(class NeighList *) {} - - void full_nsq_omp(class NeighList *) {} - void full_nsq_ghost_omp(class NeighList *) {} - void full_bin_omp(class NeighList *) {} - void full_bin_ghost_omp(class NeighList *) {} - void full_multi_omp(class NeighList *) {} - - void half_from_full_no_newton_omp(class NeighList *) {} - void half_from_full_newton_omp(class NeighList *) {} - - void granular_nsq_no_newton_omp(class NeighList *) {} - void granular_nsq_newton_omp(class NeighList *) {} - void granular_bin_no_newton_omp(class NeighList *) {} - void granular_bin_newton_omp(class NeighList *) {} - void granular_bin_newton_tri_omp(class NeighList *) {} - - void respa_nsq_no_newton_omp(class NeighList *) {} - void respa_nsq_newton_omp(class NeighList *) {} - void respa_bin_no_newton_omp(class NeighList *) {} - void respa_bin_newton_omp(class NeighList *) {} - void respa_bin_newton_tri_omp(class NeighList *) {} -#endif #endif /* !LMP_USER_OMP */ diff --git a/src/angle_zero.cpp b/src/angle_zero.cpp index e5191c4fb22d6ceaaa0f4a562abe5b103364cefe..d7b7c9cdb5546eda86753439a5cd37079fc1801a 100644 --- a/src/angle_zero.cpp +++ b/src/angle_zero.cpp @@ -148,7 +148,7 @@ void AngleZero::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -double AngleZero::single(int type, int i1, int i2, int i3) +double AngleZero::single(int /*type*/, int /*i1*/, int /*i2*/, int /*i3*/) { return 0.0; } diff --git a/src/atom.cpp b/src/atom.cpp index cf4d20a71e30914a6405f9c2e84fd0e3c4fb0510..95f5406d95906c2ea7162188ec978c6cdaaf0e59 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -99,7 +99,7 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp) // SPIN package sp = fm = NULL; - + // USER-DPD uCond = uMech = uChem = uCG = uCGnew = NULL; @@ -1516,7 +1516,7 @@ void Atom::set_mass(const char *file, int line, int itype, double value) called from reading of input script ------------------------------------------------------------------------- */ -void Atom::set_mass(const char *file, int line, int narg, char **arg) +void Atom::set_mass(const char *file, int line, int /*narg*/, char **arg) { if (mass == NULL) error->all(file,line,"Cannot set mass for this atom style"); @@ -1533,7 +1533,8 @@ void Atom::set_mass(const char *file, int line, int narg, char **arg) } /* ---------------------------------------------------------------------- - set all masses as read in from restart file + set all masses + called from reading of restart file, also from ServerMD ------------------------------------------------------------------------- */ void Atom::set_mass(double *values) diff --git a/src/atom_vec.cpp b/src/atom_vec.cpp index b04bfba34c91295b0858c6f0833d75172fed20c9..a7ca6fcb19313e0c5d26e7fb6e8a3641a6a95ff4 100644 --- a/src/atom_vec.cpp +++ b/src/atom_vec.cpp @@ -66,7 +66,7 @@ void AtomVec::store_args(int narg, char **arg) no additional args by default ------------------------------------------------------------------------- */ -void AtomVec::process_args(int narg, char **arg) +void AtomVec::process_args(int narg, char ** /*arg*/) { if (narg) error->all(FLERR,"Invalid atom_style command"); } diff --git a/src/atom_vec_body.cpp b/src/atom_vec_body.cpp index 4d3b5643aea121a788d41345f2a1be43e2e0a667..5a277627ee86f557f7060cbaf069426dee58264d 100644 --- a/src/atom_vec_body.cpp +++ b/src/atom_vec_body.cpp @@ -82,6 +82,9 @@ AtomVecBody::~AtomVecBody() void AtomVecBody::process_args(int narg, char **arg) { + // suppress unused parameter warning dependent on style_body.h + (void)(arg); + if (narg < 1) error->all(FLERR,"Invalid atom_style body command"); if (0) bptr = NULL; diff --git a/src/body.cpp b/src/body.cpp index 42f4ccbdd3fcaf9491d7656a7e138c1f7efe4ebe..78e2f5d71b3637db3a71a0176325bf6ef4b2b969 100644 --- a/src/body.cpp +++ b/src/body.cpp @@ -21,7 +21,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -Body::Body(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) +Body::Body(LAMMPS *lmp, int /*narg*/, char **arg) : Pointers(lmp) { int n = strlen(arg[0]) + 1; style = new char[n]; diff --git a/src/bond_zero.cpp b/src/bond_zero.cpp index 9fd9d4a580c5d83cf4c69a431330975a116ee330..9fcf300b21bef3f2fc6efacdb9215d964d09e349 100644 --- a/src/bond_zero.cpp +++ b/src/bond_zero.cpp @@ -149,8 +149,8 @@ void BondZero::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -double BondZero::single(int type, double rsq, int i, int j, - double &fforce) +double BondZero::single(int /*type*/, double /*rsq*/, int /*i*/, int /*j*/, + double & /*fforce*/) { return 0.0; } diff --git a/src/comm.h b/src/comm.h index 298f435c3d94f2e04af2077cfadb21ef3372896c..2579f9b283bd5bbab6d09d9c207265fd241f6ced 100644 --- a/src/comm.h +++ b/src/comm.h @@ -112,6 +112,9 @@ class Comm : protected Pointers { int read_lines_from_file(FILE *, int, int, char *); int read_lines_from_file_universe(FILE *, int, int, char *); + // extract data useful to other classes + virtual void *extract(const char *, int &) {return NULL;} + protected: int bordergroup; // only communicate this group in borders diff --git a/src/comm_brick.cpp b/src/comm_brick.cpp index f4e733a5acdc58958f21e904c831367c264536d6..e96b0f38e3ac4576eaabab03feef88cc4c831c24 100644 --- a/src/comm_brick.cpp +++ b/src/comm_brick.cpp @@ -55,7 +55,8 @@ CommBrick::CommBrick(LAMMPS *lmp) : size_reverse_send(NULL), size_reverse_recv(NULL), slablo(NULL), slabhi(NULL), multilo(NULL), multihi(NULL), cutghostmulti(NULL), pbc_flag(NULL), pbc(NULL), firstrecv(NULL), - sendlist(NULL), maxsendlist(NULL), buf_send(NULL), buf_recv(NULL) + sendlist(NULL), localsendlist(NULL), maxsendlist(NULL), + buf_send(NULL), buf_recv(NULL) { style = 0; layout = Comm::LAYOUT_UNIFORM; @@ -74,6 +75,7 @@ CommBrick::~CommBrick() } if (sendlist) for (int i = 0; i < maxswap; i++) memory->destroy(sendlist[i]); + if (localsendlist) memory->destroy(localsendlist); memory->sfree(sendlist); memory->destroy(maxsendlist); @@ -88,7 +90,7 @@ CommBrick::~CommBrick() // The call to Comm::copy_arrays() then converts the shallow copy // into a deep copy of the class with the new layout. -CommBrick::CommBrick(LAMMPS *lmp, Comm *oldcomm) : Comm(*oldcomm) +CommBrick::CommBrick(LAMMPS * /*lmp*/, Comm *oldcomm) : Comm(*oldcomm) { if (oldcomm->layout == Comm::LAYOUT_TILED) error->all(FLERR,"Cannot change to comm_style brick from tiled layout"); @@ -457,7 +459,7 @@ int CommBrick::updown(int dim, int dir, int loc, other per-atom attributes may also be sent via pack/unpack routines ------------------------------------------------------------------------- */ -void CommBrick::forward_comm(int dummy) +void CommBrick::forward_comm(int /*dummy*/) { int n; MPI_Request request; @@ -1469,6 +1471,33 @@ void CommBrick::free_multi() multilo = multihi = NULL; } +/* ---------------------------------------------------------------------- + extract data potentially useful to other classes +------------------------------------------------------------------------- */ + +void *CommBrick::extract(const char *str, int &dim) +{ + if (strcmp(str,"localsendlist") == 0) { + int i, iswap, isend; + if (!localsendlist) + memory->create(localsendlist,atom->nlocal,"comm:localsendlist"); + else + memory->grow(localsendlist,atom->nlocal,"comm:localsendlist"); + + for (i = 0; i < atom->nlocal; i++) + localsendlist[i] = 0; + + for (iswap = 0; iswap < nswap; iswap++) + for (isend = 0; isend < sendnum[iswap]; isend++) + if (sendlist[iswap][isend] < atom->nlocal) + localsendlist[sendlist[iswap][isend]] = 1; + + return (void *) localsendlist; + } + + return NULL; +} + /* ---------------------------------------------------------------------- return # of bytes of allocated memory ------------------------------------------------------------------------- */ diff --git a/src/comm_brick.h b/src/comm_brick.h index 461ee84b408f19f1582b9815f9eecfa41ee79d0d..b3a3a7e094c73ed41fde518a211afc4f5db52f24 100644 --- a/src/comm_brick.h +++ b/src/comm_brick.h @@ -46,6 +46,7 @@ class CommBrick : public Comm { void forward_comm_array(int, double **); // forward comm of array int exchange_variable(int, double *, double *&); // exchange on neigh stencil + void *extract(const char *,int &); virtual bigint memory_usage(); protected: @@ -67,6 +68,7 @@ class CommBrick : public Comm { int *firstrecv; // where to put 1st recv atom in each swap int **sendlist; // list of atoms to send in each swap + int *localsendlist; // indexed list of local sendlist atoms int *maxsendlist; // max size of send list for each swap double *buf_send; // send buffer for all comm diff --git a/src/comm_tiled.cpp b/src/comm_tiled.cpp index 584be94bf3f32f8bc91451f545fef888e3f54bc6..d7d2e4725d10f67b13e62c5437a73ffebaa43748 100644 --- a/src/comm_tiled.cpp +++ b/src/comm_tiled.cpp @@ -55,7 +55,7 @@ CommTiled::CommTiled(LAMMPS *lmp) : Comm(lmp) // The call to Comm::copy_arrays() then converts the shallow copy // into a deep copy of the class with the new layout. -CommTiled::CommTiled(LAMMPS *lmp, Comm *oldcomm) : Comm(*oldcomm) +CommTiled::CommTiled(LAMMPS * /*lmp*/, Comm *oldcomm) : Comm(*oldcomm) { style = 1; layout = oldcomm->layout; @@ -438,7 +438,7 @@ void CommTiled::setup() other per-atom attributes may also be sent via pack/unpack routines ------------------------------------------------------------------------- */ -void CommTiled::forward_comm(int dummy) +void CommTiled::forward_comm(int /*dummy*/) { int i,irecv,n,nsend,nrecv; AtomVec *avec = atom->avec; @@ -1164,7 +1164,7 @@ void CommTiled::reverse_comm_fix(Fix *fix, int size) NOTE: how to setup one big buf recv with correct offsets ?? ------------------------------------------------------------------------- */ -void CommTiled::reverse_comm_fix_variable(Fix *fix) +void CommTiled::reverse_comm_fix_variable(Fix * /*fix*/) { error->all(FLERR,"Reverse comm fix variable not yet supported by CommTiled"); } @@ -1428,7 +1428,7 @@ void CommTiled::forward_comm_array(int nsize, double **array) NOTE: this method is currently not used ------------------------------------------------------------------------- */ -int CommTiled::exchange_variable(int n, double *inbuf, double *&outbuf) +int CommTiled::exchange_variable(int n, double * /*inbuf*/, double *& /*outbuf*/) { int nrecv = n; return nrecv; @@ -1509,7 +1509,7 @@ void CommTiled::box_drop_brick(int idim, double *lo, double *hi, int &indexme) no need to split lo/hi box as recurse b/c OK if box extends outside RCB box ------------------------------------------------------------------------- */ -void CommTiled::box_drop_tiled(int idim, double *lo, double *hi, int &indexme) +void CommTiled::box_drop_tiled(int /*idim*/, double *lo, double *hi, int &indexme) { box_drop_tiled_recurse(lo,hi,0,nprocs-1,indexme); } @@ -1601,7 +1601,7 @@ void CommTiled::box_other_brick(int idim, int idir, return other box owned by proc as lo/hi corner pts ------------------------------------------------------------------------- */ -void CommTiled::box_other_tiled(int idim, int idir, +void CommTiled::box_other_tiled(int /*idim*/, int /*idir*/, int proc, double *lo, double *hi) { double (*split)[2] = rcbinfo[proc].mysplit; diff --git a/src/compute_aggregate_atom.cpp b/src/compute_aggregate_atom.cpp index 56855fcc29720bf8db93b8a2a6a52f8c1818fd45..6c8c8e5d9ad0aac6b2fdfc34777b13a87361aa24 100644 --- a/src/compute_aggregate_atom.cpp +++ b/src/compute_aggregate_atom.cpp @@ -98,7 +98,7 @@ void ComputeAggregateAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeAggregateAtom::init_list(int id, NeighList *ptr) +void ComputeAggregateAtom::init_list(int /*id*/, NeighList *ptr) { list = ptr; } @@ -231,7 +231,7 @@ void ComputeAggregateAtom::compute_peratom() /* ---------------------------------------------------------------------- */ int ComputeAggregateAtom::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/compute_angle_local.cpp b/src/compute_angle_local.cpp index 7137077158eb33e1dfc2abbea7378426639e0f65..95faad54ad6e898cc89fe24663a002fb563b5353 100644 --- a/src/compute_angle_local.cpp +++ b/src/compute_angle_local.cpp @@ -21,6 +21,8 @@ #include "domain.h" #include "force.h" #include "angle.h" +#include "input.h" +#include "variable.h" #include "math_const.h" #include "memory.h" #include "error.h" @@ -30,11 +32,13 @@ using namespace MathConst; #define DELTA 10000 +enum{THETA,ENG,VARIABLE}; + /* ---------------------------------------------------------------------- */ ComputeAngleLocal::ComputeAngleLocal(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg), - vlocal(NULL), alocal(NULL) + bstyle(NULL), vstr(NULL), vvar(NULL), tstr(NULL), vlocal(NULL), alocal(NULL) { if (narg < 4) error->all(FLERR,"Illegal compute angle/local command"); @@ -42,19 +46,82 @@ ComputeAngleLocal::ComputeAngleLocal(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR,"Compute angle/local used when angles are not allowed"); local_flag = 1; - nvalues = narg - 3; - if (nvalues == 1) size_local_cols = 0; - else size_local_cols = nvalues; - tflag = eflag = -1; + // style args + + nvalues = narg - 3; + bstyle = new int[nvalues]; + vstr = new char*[nvalues]; + vvar = new int[nvalues]; + nvalues = 0; + tflag = 0; + nvar = 0; + + int iarg; + for (iarg = 3; iarg < narg; iarg++) { + if (strcmp(arg[iarg],"theta") == 0) { + bstyle[nvalues++] = THETA; + tflag = 1; + } else if (strcmp(arg[iarg],"eng") == 0) { + bstyle[nvalues++] = ENG; + } else if (strncmp(arg[iarg],"v_",2) == 0) { + bstyle[nvalues++] = VARIABLE; + int n = strlen(arg[iarg]); + vstr[nvar] = new char[n]; + strcpy(vstr[nvar],&arg[iarg][2]); + nvar++; + } else break; + } - for (int iarg = 3; iarg < narg; iarg++) { - if (strcmp(arg[iarg],"theta") == 0) tflag = nvalues++; - else if (strcmp(arg[iarg],"eng") == 0) eflag = nvalues++; - else error->all(FLERR,"Invalid keyword in compute angle/local command"); + // optional args + + setflag = 0; + tstr = NULL; + + while (iarg < narg) { + if (strcmp(arg[iarg],"set") == 0) { + setflag = 1; + if (iarg+3 > narg) error->all(FLERR,"Illegal compute angle/local command"); + if (strcmp(arg[iarg+1],"theta") == 0) { + delete [] tstr; + int n = strlen(arg[iarg+2]) + 1; + tstr = new char[n]; + strcpy(tstr,arg[iarg+2]); + tflag = 1; + } else error->all(FLERR,"Illegal compute angle/local command"); + iarg += 3; + } else error->all(FLERR,"Illegal compute angle/local command"); } + // error check + + if (nvar) { + if (!setflag) + error->all(FLERR,"Compute angle/local variable requires a set variable"); + for (int i = 0; i < nvar; i++) { + vvar[i] = input->variable->find(vstr[i]); + if (vvar[i] < 0) + error->all(FLERR,"Variable name for copute angle/local does not exist"); + if (!input->variable->equalstyle(vvar[i])) + error->all(FLERR,"Variable for compute angle/local is invalid style"); + } + + if (tstr) { + tvar = input->variable->find(tstr); + if (tvar < 0) + error->all(FLERR,"Variable name for compute angle/local does not exist"); + if (!input->variable->internalstyle(tvar)) + error->all(FLERR,"Variable for compute angle/local is invalid style"); + } + } else if (setflag) + error->all(FLERR,"Compute angle/local set with no variable"); + + // initialize output + + if (nvalues == 1) size_local_cols = 0; + else size_local_cols = nvalues; + nmax = 0; vlocal = NULL; alocal = NULL; @@ -64,6 +131,13 @@ ComputeAngleLocal::ComputeAngleLocal(LAMMPS *lmp, int narg, char **arg) : ComputeAngleLocal::~ComputeAngleLocal() { + delete [] bstyle; + for (int i = 0; i < nvar; i++) delete [] vstr[i]; + delete [] vstr; + delete [] vvar; + + delete [] tstr; + memory->destroy(vlocal); memory->destroy(alocal); } @@ -75,6 +149,20 @@ void ComputeAngleLocal::init() if (force->angle == NULL) error->all(FLERR,"No angle style is defined for compute angle/local"); + if (nvar) { + for (int i = 0; i < nvar; i++) { + vvar[i] = input->variable->find(vstr[i]); + if (vvar[i] < 0) + error->all(FLERR,"Variable name for compute angle/local does not exist"); + } + + if (tstr) { + tvar = input->variable->find(tstr); + if (tvar < 0) + error->all(FLERR,"Variable name for compute angle/local does not exist"); + } + } + // do initial memory allocation so that memory_usage() is correct ncount = compute_angles(0); @@ -109,11 +197,11 @@ void ComputeAngleLocal::compute_local() int ComputeAngleLocal::compute_angles(int flag) { - int i,m,n,na,atom1,atom2,atom3,imol,iatom,atype; + int i,m,n,na,atom1,atom2,atom3,imol,iatom,atype,ivar; tagint tagprev; double delx1,dely1,delz1,delx2,dely2,delz2; - double rsq1,rsq2,r1,r2,c; - double *tbuf,*ebuf; + double rsq1,rsq2,r1,r2,c,theta; + double *ptr; double **x = atom->x; tagint *tag = atom->tag; @@ -131,17 +219,7 @@ int ComputeAngleLocal::compute_angles(int flag) int nlocal = atom->nlocal; int molecular = atom->molecular; - if (flag) { - if (nvalues == 1) { - if (tflag >= 0) tbuf = vlocal; - if (eflag >= 0) ebuf = vlocal; - } else { - if (tflag >= 0 && alocal) tbuf = &alocal[0][tflag]; - else tbuf = NULL; - if (eflag >= 0 && alocal) ebuf = &alocal[0][eflag]; - else ebuf = NULL; - } - } + // loop over all atoms and their angles Angle *angle = force->angle; @@ -175,39 +253,62 @@ int ComputeAngleLocal::compute_angles(int flag) if (atom3 < 0 || !(mask[atom3] & groupbit)) continue; if (atype == 0) continue; - if (flag) { - if (tflag >= 0) { - delx1 = x[atom1][0] - x[atom2][0]; - dely1 = x[atom1][1] - x[atom2][1]; - delz1 = x[atom1][2] - x[atom2][2]; - domain->minimum_image(delx1,dely1,delz1); - - rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; - r1 = sqrt(rsq1); - - delx2 = x[atom3][0] - x[atom2][0]; - dely2 = x[atom3][1] - x[atom2][1]; - delz2 = x[atom3][2] - x[atom2][2]; - domain->minimum_image(delx2,dely2,delz2); - - rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; - r2 = sqrt(rsq2); + if (!flag) { + m++; + continue; + } - // c = cosine of angle + // theta needed by one or more outputs + + if (tflag) { + delx1 = x[atom1][0] - x[atom2][0]; + dely1 = x[atom1][1] - x[atom2][1]; + delz1 = x[atom1][2] - x[atom2][2]; + domain->minimum_image(delx1,dely1,delz1); + + rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; + r1 = sqrt(rsq1); + + delx2 = x[atom3][0] - x[atom2][0]; + dely2 = x[atom3][1] - x[atom2][1]; + delz2 = x[atom3][2] - x[atom2][2]; + domain->minimum_image(delx2,dely2,delz2); + + rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; + r2 = sqrt(rsq2); + + // c = cosine of angle + // theta = angle in radians + + c = delx1*delx2 + dely1*dely2 + delz1*delz2; + c /= r1*r2; + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + theta = acos(c); + } - c = delx1*delx2 + dely1*dely2 + delz1*delz2; - c /= r1*r2; - if (c > 1.0) c = 1.0; - if (c < -1.0) c = -1.0; - tbuf[n] = 180.0*acos(c)/MY_PI; - } + if (nvalues == 1) ptr = &vlocal[m]; + else ptr = alocal[m]; + + if (nvar) { + ivar = 0; + if (tstr) input->variable->internal_set(tvar,theta); + } - if (eflag >= 0) { - if (atype > 0) - ebuf[n] = angle->single(atype,atom1,atom2,atom3); - else ebuf[n] = 0.0; + for (n = 0; n < nvalues; n++) { + switch (bstyle[n]) { + case THETA: + ptr[n] = 180.0*theta/MY_PI; + break; + case ENG: + if (atype > 0) ptr[n] = angle->single(atype,atom1,atom2,atom3); + else ptr[n] = 0.0; + break; + case VARIABLE: + ptr[n] = input->variable->compute_equal(vvar[ivar]); + ivar++; + break; } - n += nvalues; } m++; diff --git a/src/compute_angle_local.h b/src/compute_angle_local.h index 6f59d7f097c74d4db8b47ea59dcc404f40e846ad..a95e23206d18d4244a51c804a5f3dcfffe3e3381 100644 --- a/src/compute_angle_local.h +++ b/src/compute_angle_local.h @@ -33,8 +33,12 @@ class ComputeAngleLocal : public Compute { double memory_usage(); private: - int nvalues,tflag,eflag; - int ncount; + int nvalues,nvar,ncount,setflag,tflag; + + int tvar; + int *bstyle,*vvar; + char *tstr; + char **vstr; int nmax; double *vlocal; diff --git a/src/compute_bond_local.cpp b/src/compute_bond_local.cpp index 985e3ef0756260c9b6e9f258a5d3ab1b080f4605..6a179cf1b4484e3949339c21d139bff52f33f7aa 100644 --- a/src/compute_bond_local.cpp +++ b/src/compute_bond_local.cpp @@ -21,8 +21,10 @@ #include "domain.h" #include "force.h" #include "bond.h" -#include "math_extra.h" #include "comm.h" +#include "input.h" +#include "variable.h" +#include "math_extra.h" #include "memory.h" #include "error.h" @@ -31,13 +33,13 @@ using namespace LAMMPS_NS; #define DELTA 10000 #define EPSILON 1.0e-12 -enum{DIST,VELVIB,OMEGA,ENGTRANS,ENGVIB,ENGROT,ENGPOT,FORCE}; +enum{DIST,VELVIB,OMEGA,ENGTRANS,ENGVIB,ENGROT,ENGPOT,FORCE,VARIABLE}; /* ---------------------------------------------------------------------- */ ComputeBondLocal::ComputeBondLocal(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg), - bstyle(NULL), vlocal(NULL), alocal(NULL) + bstyle(NULL), vstr(NULL), vvar(NULL), dstr(NULL), vlocal(NULL), alocal(NULL) { if (narg < 4) error->all(FLERR,"Illegal compute bond/local command"); @@ -47,14 +49,18 @@ ComputeBondLocal::ComputeBondLocal(LAMMPS *lmp, int narg, char **arg) : local_flag = 1; comm_forward = 3; - nvalues = narg - 3; - if (nvalues == 1) size_local_cols = 0; - else size_local_cols = nvalues; + // style args + nvalues = narg - 3; bstyle = new int[nvalues]; - + vstr = new char*[nvalues]; + vvar = new int[nvalues]; + nvalues = 0; - for (int iarg = 3; iarg < narg; iarg++) { + nvar = 0; + + int iarg; + for (iarg = 3; iarg < narg; iarg++) { if (strcmp(arg[iarg],"dist") == 0) bstyle[nvalues++] = DIST; else if (strcmp(arg[iarg],"engpot") == 0) bstyle[nvalues++] = ENGPOT; else if (strcmp(arg[iarg],"force") == 0) bstyle[nvalues++] = FORCE; @@ -63,9 +69,58 @@ ComputeBondLocal::ComputeBondLocal(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[iarg],"engtrans") == 0) bstyle[nvalues++] = ENGTRANS; else if (strcmp(arg[iarg],"omega") == 0) bstyle[nvalues++] = OMEGA; else if (strcmp(arg[iarg],"velvib") == 0) bstyle[nvalues++] = VELVIB; - else error->all(FLERR,"Invalid keyword in compute bond/local command"); + else if (strncmp(arg[iarg],"v_",2) == 0) { + bstyle[nvalues++] = VARIABLE; + int n = strlen(arg[iarg]); + vstr[nvar] = new char[n]; + strcpy(vstr[nvar],&arg[iarg][2]); + nvar++; + } else break; + } + + // optional args + + setflag = 0; + dstr = NULL; + + while (iarg < narg) { + if (strcmp(arg[iarg],"set") == 0) { + setflag = 1; + if (iarg+3 > narg) error->all(FLERR,"Illegal compute bond/local command"); + if (strcmp(arg[iarg+1],"dist") == 0) { + delete [] dstr; + int n = strlen(arg[iarg+2]) + 1; + dstr = new char[n]; + strcpy(dstr,arg[iarg+2]); + } else error->all(FLERR,"Illegal compute bond/local command"); + iarg += 3; + } else error->all(FLERR,"Illegal compute bond/local command"); } + // error check + + if (nvar) { + if (!setflag) + error->all(FLERR,"Compute bond/local variable requires a set variable"); + for (int i = 0; i < nvar; i++) { + vvar[i] = input->variable->find(vstr[i]); + if (vvar[i] < 0) + error->all(FLERR,"Variable name for copute bond/local does not exist"); + if (!input->variable->equalstyle(vvar[i])) + error->all(FLERR,"Variable for compute bond/local is invalid style"); + } + + if (dstr) { + dvar = input->variable->find(dstr); + if (dvar < 0) + error->all(FLERR,"Variable name for compute bond/local does not exist"); + if (!input->variable->internalstyle(dvar)) + error->all(FLERR,"Variable for compute bond/local is invalid style"); + } + } else if (setflag) + error->all(FLERR,"Compute bond/local set with no variable"); + + // set singleflag if need to call bond->single() // set velflag if compute any quantities based on velocities @@ -77,6 +132,11 @@ ComputeBondLocal::ComputeBondLocal(LAMMPS *lmp, int narg, char **arg) : bstyle[i] == ENGVIB || bstyle[i] == ENGROT) velflag = 1; } + // initialize output + + if (nvalues == 1) size_local_cols = 0; + else size_local_cols = nvalues; + nmax = 0; vlocal = NULL; alocal = NULL; @@ -86,9 +146,15 @@ ComputeBondLocal::ComputeBondLocal(LAMMPS *lmp, int narg, char **arg) : ComputeBondLocal::~ComputeBondLocal() { + delete [] bstyle; + for (int i = 0; i < nvar; i++) delete [] vstr[i]; + delete [] vstr; + delete [] vvar; + + delete [] dstr; + memory->destroy(vlocal); memory->destroy(alocal); - delete [] bstyle; } /* ---------------------------------------------------------------------- */ @@ -98,6 +164,20 @@ void ComputeBondLocal::init() if (force->bond == NULL) error->all(FLERR,"No bond style is defined for compute bond/local"); + if (nvar) { + for (int i = 0; i < nvar; i++) { + vvar[i] = input->variable->find(vstr[i]); + if (vvar[i] < 0) + error->all(FLERR,"Variable name for compute bond/local does not exist"); + } + + if (dstr) { + dvar = input->variable->find(dstr); + if (dvar < 0) + error->all(FLERR,"Variable name for compute bond/local does not exist"); + } + } + // set ghostvelflag if need to acquire ghost atom velocities if (velflag && !comm->ghost_velocity) ghostvelflag = 1; @@ -140,7 +220,7 @@ void ComputeBondLocal::compute_local() int ComputeBondLocal::compute_bonds(int flag) { - int i,m,n,nb,atom1,atom2,imol,iatom,btype; + int i,m,n,nb,atom1,atom2,imol,iatom,btype,ivar; tagint tagprev; double dx,dy,dz,rsq; double mass1,mass2,masstotal,invmasstotal; @@ -297,6 +377,11 @@ int ComputeBondLocal::compute_bonds(int flag) if (nvalues == 1) ptr = &vlocal[m]; else ptr = alocal[m]; + if (nvar) { + ivar = 0; + if (dstr) input->variable->internal_set(dvar,sqrt(rsq)); + } + for (n = 0; n < nvalues; n++) { switch (bstyle[n]) { case DIST: @@ -323,6 +408,10 @@ int ComputeBondLocal::compute_bonds(int flag) case VELVIB: ptr[n] = vvib; break; + case VARIABLE: + ptr[n] = input->variable->compute_equal(vvar[ivar]); + ivar++; + break; } } } @@ -337,7 +426,7 @@ int ComputeBondLocal::compute_bonds(int flag) /* ---------------------------------------------------------------------- */ int ComputeBondLocal::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/compute_bond_local.h b/src/compute_bond_local.h index b3e99fc61b9ac12e4c2bd6ce97d4355d5ddeedfd..17111a941c36d8b7020e965e385ad05db9d55316 100644 --- a/src/compute_bond_local.h +++ b/src/compute_bond_local.h @@ -35,10 +35,13 @@ class ComputeBondLocal : public Compute { double memory_usage(); private: - int nvalues; - int ncount; - int *bstyle; + int nvalues,nvar,ncount,setflag; + int singleflag,velflag,ghostvelflag,initflag; + int dvar; + int *bstyle,*vvar; + char *dstr; + char **vstr; int nmax; double *vlocal; diff --git a/src/compute_centro_atom.cpp b/src/compute_centro_atom.cpp index 48af45363598ab0ed8fd8e1b3b9aff5d9c996be3..5096879b32bbeebd8cfc8392e0cbcb01a71b3d09 100644 --- a/src/compute_centro_atom.cpp +++ b/src/compute_centro_atom.cpp @@ -110,7 +110,7 @@ void ComputeCentroAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeCentroAtom::init_list(int id, NeighList *ptr) +void ComputeCentroAtom::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/compute_chunk_spread_atom.cpp b/src/compute_chunk_spread_atom.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c5fd27b0c1710f05e2fccb2d4f5a187ef7a9c25a --- /dev/null +++ b/src/compute_chunk_spread_atom.cpp @@ -0,0 +1,352 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include +#include "compute_chunk_spread_atom.h" +#include "atom.h" +#include "update.h" +#include "modify.h" +#include "fix.h" +#include "compute.h" +#include "compute_chunk_atom.h" +#include "input.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +enum{COMPUTE,FIX}; + +#define INVOKED_VECTOR 2 +#define INVOKED_ARRAY 4 +#define INVOKED_PERATOM 8 + +/* ---------------------------------------------------------------------- */ + +ComputeChunkSpreadAtom:: +ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg), + idchunk(NULL), ids(NULL), which(NULL), argindex(NULL), value2index(NULL) +{ + if (narg < 5) error->all(FLERR,"Illegal compute chunk/spread/atom command"); + + // ID of compute chunk/atom + + int n = strlen(arg[3]) + 1; + idchunk = new char[n]; + strcpy(idchunk,arg[3]); + init_chunk(); + + // expand args if any have wildcard character "*" + + int iarg = 4; + int expand = 0; + char **earg; + int nargnew = input->expand_args(narg-iarg,&arg[iarg],1,earg); + + if (earg != &arg[iarg]) expand = 1; + arg = earg; + + // parse values + + which = new int[nargnew]; + argindex = new int[nargnew]; + ids = new char*[nargnew]; + value2index = new int[nargnew]; + nvalues = 0; + + iarg = 0; + while (iarg < nargnew) { + ids[nvalues] = NULL; + + if (strncmp(arg[iarg],"c_",2) == 0 || + strncmp(arg[iarg],"f_",2) == 0) { + if (arg[iarg][0] == 'c') which[nvalues] = COMPUTE; + else if (arg[iarg][0] == 'f') which[nvalues] = FIX; + + int n = strlen(arg[iarg]); + char *suffix = new char[n]; + strcpy(suffix,&arg[iarg][2]); + + char *ptr = strchr(suffix,'['); + if (ptr) { + if (suffix[strlen(suffix)-1] != ']') + error->all(FLERR,"Illegal compute chunk/spread/atom command"); + argindex[nvalues] = atoi(ptr+1); + *ptr = '\0'; + } else argindex[nvalues] = 0; + + n = strlen(suffix) + 1; + ids[nvalues] = new char[n]; + strcpy(ids[nvalues],suffix); + nvalues++; + delete [] suffix; + + } else error->all(FLERR,"Illegal compute chunk/spread/atom command"); + + iarg++; + } + + // if wildcard expansion occurred, free earg memory from expand_args() + + if (expand) { + for (int i = 0; i < nargnew; i++) delete [] earg[i]; + memory->sfree(earg); + } + + // setup and error check + // for compute, must calculate per-chunk values, i.e. style ends in "/chunk" + // for fix, assume a global vector or array is per-chunk data + + for (int i = 0; i < nvalues; i++) { + if (which[i] == COMPUTE) { + int icompute = modify->find_compute(ids[i]); + if (icompute < 0) + error->all(FLERR,"Compute ID for compute chunk/spread/atom " + "does not exist"); + + char *ptr = strstr(modify->compute[icompute]->style,"/chunk"); + if (!ptr || (ptr != modify->compute[icompute]->style + + strlen(modify->compute[icompute]->style) - strlen("/chunk"))) + error->all(FLERR,"Compute for compute chunk/spread/atom " + "does not calculate per-chunk values"); + + if (argindex[i] == 0) { + if (!modify->compute[icompute]->vector_flag) + error->all(FLERR,"Compute chunk/spread/atom compute " + "does not calculate global vector"); + } else { + if (!modify->compute[icompute]->array_flag) + error->all(FLERR,"Compute chunk/spread/atom compute " + "does not calculate global array"); + if (argindex[i] > modify->compute[icompute]->size_array_cols) + error->all(FLERR,"Compute chunk/spread/atom compute array " + "is accessed out-of-range"); + } + + } else if (which[i] == FIX) { + int ifix = modify->find_fix(ids[i]); + if (ifix < 0) + error->all(FLERR,"Fix ID for compute chunk/spread/atom does not exist"); + if (argindex[i] == 0) { + if (!modify->fix[ifix]->vector_flag) + error->all(FLERR,"Compute chunk/spread/atom fix " + "does not calculate global vector"); + } else { + if (!modify->fix[ifix]->array_flag) + error->all(FLERR,"Compute chunk/spread/atom fix " + "does not calculate global array"); + if (argindex[i] > modify->fix[ifix]->size_array_cols) + error->all(FLERR,"Compute chunk/spread/atom fix array " + "is accessed out-of-range"); + } + } + } + + // this compute produces a peratom vector or array + + peratom_flag = 1; + if (nvalues == 1) size_peratom_cols = 0; + else size_peratom_cols = nvalues; + + // per-atom vector or array + + nmax = 0; + vector_atom = NULL; + array_atom = NULL; +} + +/* ---------------------------------------------------------------------- */ + +ComputeChunkSpreadAtom::~ComputeChunkSpreadAtom() +{ + delete [] idchunk; + + delete [] which; + delete [] argindex; + for (int i = 0; i < nvalues; i++) delete [] ids[i]; + delete [] ids; + delete [] value2index; + + memory->destroy(vector_atom); + memory->destroy(array_atom); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeChunkSpreadAtom::init() +{ + init_chunk(); + + // set indices of all computes,fixes,variables + + for (int m = 0; m < nvalues; m++) { + if (which[m] == COMPUTE) { + int icompute = modify->find_compute(ids[m]); + if (icompute < 0) + error->all(FLERR,"Compute ID for compute chunk/spread/atom " + "does not exist"); + value2index[m] = icompute; + + } else if (which[m] == FIX) { + int ifix = modify->find_fix(ids[m]); + if (ifix < 0) + error->all(FLERR,"Fix ID for compute chunk/spread/atom does not exist"); + value2index[m] = ifix; + } + } +} + +/* ---------------------------------------------------------------------- */ + +void ComputeChunkSpreadAtom::init_chunk() +{ + int icompute = modify->find_compute(idchunk); + if (icompute < 0) + error->all(FLERR,"Chunk/atom compute does not exist for compute chunk/spread/atom"); + cchunk = (ComputeChunkAtom *) modify->compute[icompute]; + if (strcmp(cchunk->style,"chunk/atom") != 0) + error->all(FLERR,"Compute chunk/spread/atom does not use chunk/atom compute"); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeChunkSpreadAtom::compute_peratom() +{ + invoked_peratom = update->ntimestep; + + // grow local vector_atom or array_atom if necessary + + if (atom->nmax > nmax) { + if (nvalues == 1) { + memory->destroy(vector_atom); + nmax = atom->nmax; + memory->create(vector_atom,nmax,"chunk/spread/atom:vector_atom"); + } else { + memory->destroy(array_atom); + nmax = atom->nmax; + memory->create(array_atom,nmax,nvalues,"chunk/spread/atom:array_atom"); + } + } + + // compute chunk/atom assigns atoms to chunk IDs + // extract ichunk index vector from compute + // ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms + + int nchunk = cchunk->setup_chunks(); + cchunk->compute_ichunk(); + int *ichunk = cchunk->ichunk; + + // loop over values, access compute or fix + // loop over atoms, use chunk ID of each atom to store value from compute/fix + + int *mask = atom->mask; + int nlocal = atom->nlocal; + + int i,m,n,index,nstride; + double *ptr; + + for (m = 0; m < nvalues; m++) { + n = value2index[m]; + + // copy compute/fix values into vector_atom or array_atom + // nstride between values for each atom + + if (nvalues == 1) { + ptr = vector_atom; + nstride = 1; + } else { + ptr = &array_atom[0][m]; + nstride = nvalues; + } + + // invoke compute if not previously invoked + + if (which[m] == COMPUTE) { + Compute *compute = modify->compute[n]; + + if (argindex[m] == 0) { + if (!(compute->invoked_flag & INVOKED_VECTOR)) { + compute->compute_vector(); + compute->invoked_flag |= INVOKED_VECTOR; + } + double *cvector = compute->vector; + for (i = 0; i < nlocal; i++, ptr += nstride) { + *ptr = 0.0; + if (!(mask[i] & groupbit)) continue; + index = ichunk[i]-1; + if (index < 0 || index >= nchunk) continue; + *ptr = cvector[index]; + } + + } else { + if (!(compute->invoked_flag & INVOKED_ARRAY)) { + compute->compute_array(); + compute->invoked_flag |= INVOKED_ARRAY; + } + int icol = argindex[m]-1; + double **carray = compute->array; + for (i = 0; i < nlocal; i++, ptr += nstride) { + *ptr = 0.0; + if (!(mask[i] & groupbit)) continue; + index = ichunk[i]-1; + if (index < 0 || index >= nchunk) continue; + *ptr = carray[index][icol]; + } + } + + // access fix data, check if fix frequency is a match + // are assuming the fix global vector/array is per-chunk data + // check if index exceeds fix output length/rows + + } else if (which[m] == FIX) { + Fix *fix = modify->fix[n]; + if (update->ntimestep % fix->global_freq) + error->all(FLERR,"Fix used in compute chunk/spread/atom not " + "computed at compatible time"); + + if (argindex[m] == 0) { + int nfix = fix->size_vector; + for (i = 0; i < nlocal; i++, ptr += nstride) { + *ptr = 0.0; + if (!(mask[i] & groupbit)) continue; + index = ichunk[i]-1; + if (index < 0 || index >= nchunk || index >= nfix) continue; + *ptr = fix->compute_vector(index); + } + + } else { + int icol = argindex[m]-1; + int nfix = fix->size_array_rows; + for (i = 0; i < nlocal; i++, ptr += nstride) { + *ptr = 0.0; + if (!(mask[i] & groupbit)) continue; + index = ichunk[i]-1; + if (index < 0 || index >= nchunk || index >= nfix) continue; + *ptr = fix->compute_array(index,icol); + } + } + } + } +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based array +------------------------------------------------------------------------- */ + +double ComputeChunkSpreadAtom::memory_usage() +{ + double bytes = nmax*nvalues * sizeof(double); + return bytes; +} diff --git a/src/compute_chunk_spread_atom.h b/src/compute_chunk_spread_atom.h new file mode 100644 index 0000000000000000000000000000000000000000..80ee186450452fe885d433af30e369faa43bb8ba --- /dev/null +++ b/src/compute_chunk_spread_atom.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef COMPUTE_CLASS + +ComputeStyle(chunk/spread/atom,ComputeChunkSpreadAtom) + +#else + +#ifndef LMP_COMPUTE_CHUNK_SPREAD_ATOM_H +#define LMP_COMPUTE_CHUNK_SPREAD_ATOM_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeChunkSpreadAtom : public Compute { + public: + ComputeChunkSpreadAtom(class LAMMPS *, int, char **); + ~ComputeChunkSpreadAtom(); + void init(); + void compute_peratom(); + double memory_usage(); + + protected: + int mode,nvalues; + char *idchunk; + char **ids; + int *which,*argindex,*value2index; + + int nmax; + class ComputeChunkAtom *cchunk; + + void init_chunk(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/compute_cluster_atom.cpp b/src/compute_cluster_atom.cpp index 85934c5e6d20df3a6eaa915d8269d32988147120..0c34b426719ddaa0446b82cd3ad95a1eb4b69a54 100644 --- a/src/compute_cluster_atom.cpp +++ b/src/compute_cluster_atom.cpp @@ -89,7 +89,7 @@ void ComputeClusterAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeClusterAtom::init_list(int id, NeighList *ptr) +void ComputeClusterAtom::init_list(int /*id*/, NeighList *ptr) { list = ptr; } @@ -209,7 +209,7 @@ void ComputeClusterAtom::compute_peratom() /* ---------------------------------------------------------------------- */ int ComputeClusterAtom::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/compute_cna_atom.cpp b/src/compute_cna_atom.cpp index a1b97d94043dc537102f98cb3a05cbb7555a26a1..b8ad3f0f644eb3a7bd11d32d45808e9fabcb919e 100644 --- a/src/compute_cna_atom.cpp +++ b/src/compute_cna_atom.cpp @@ -100,7 +100,7 @@ void ComputeCNAAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeCNAAtom::init_list(int id, NeighList *ptr) +void ComputeCNAAtom::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/compute_contact_atom.cpp b/src/compute_contact_atom.cpp index f3c4513b0152a2edd090c31d07a46f832d925021..e60a51832a063e78c4ec22b3d8cf36765565716e 100644 --- a/src/compute_contact_atom.cpp +++ b/src/compute_contact_atom.cpp @@ -80,7 +80,7 @@ void ComputeContactAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeContactAtom::init_list(int id, NeighList *ptr) +void ComputeContactAtom::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/compute_coord_atom.cpp b/src/compute_coord_atom.cpp index b86d818d0608d99468658adb982df1afaccf7472..33b318ea17247718049eda4c4230df46f4f4dec9 100644 --- a/src/compute_coord_atom.cpp +++ b/src/compute_coord_atom.cpp @@ -153,7 +153,7 @@ void ComputeCoordAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeCoordAtom::init_list(int id, NeighList *ptr) +void ComputeCoordAtom::init_list(int /*id*/, NeighList *ptr) { list = ptr; } @@ -311,7 +311,7 @@ void ComputeCoordAtom::compute_peratom() /* ---------------------------------------------------------------------- */ int ComputeCoordAtom::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,m=0,j; for (i = 0; i < n; ++i) { diff --git a/src/compute_dihedral_local.cpp b/src/compute_dihedral_local.cpp index 42d1476ad25fb368b08b36bf99195f3a0750235b..7444630090f231aadf4aabdb2c6fa66e00c2e989 100644 --- a/src/compute_dihedral_local.cpp +++ b/src/compute_dihedral_local.cpp @@ -21,6 +21,9 @@ #include "domain.h" #include "force.h" #include "dihedral.h" +#include "input.h" +#include "variable.h" + #include "math_const.h" #include "memory.h" #include "error.h" @@ -31,11 +34,13 @@ using namespace MathConst; #define DELTA 10000 #define SMALL 0.001 +enum{PHI,VARIABLE}; + /* ---------------------------------------------------------------------- */ ComputeDihedralLocal::ComputeDihedralLocal(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg), - vlocal(NULL), alocal(NULL) + bstyle(NULL), vstr(NULL), vvar(NULL), pstr(NULL), vlocal(NULL), alocal(NULL) { if (narg < 4) error->all(FLERR,"Illegal compute dihedral/local command"); @@ -44,18 +49,80 @@ ComputeDihedralLocal::ComputeDihedralLocal(LAMMPS *lmp, int narg, char **arg) : "Compute dihedral/local used when dihedrals are not allowed"); local_flag = 1; - nvalues = narg - 3; - if (nvalues == 1) size_local_cols = 0; - else size_local_cols = nvalues; - pflag = -1; + // style args + + nvalues = narg - 3; + bstyle = new int[nvalues]; + vstr = new char*[nvalues]; + vvar = new int[nvalues]; + nvalues = 0; + nvar = 0; + + int iarg; + for (iarg = 3; iarg < narg; iarg++) { + if (strcmp(arg[iarg],"phi") == 0) { + bstyle[nvalues++] = PHI; + } else if (strncmp(arg[iarg],"v_",2) == 0) { + bstyle[nvalues++] = VARIABLE; + int n = strlen(arg[iarg]); + vstr[nvar] = new char[n]; + strcpy(vstr[nvar],&arg[iarg][2]); + nvar++; + } else break; + } - for (int iarg = 3; iarg < narg; iarg++) { - if (strcmp(arg[iarg],"phi") == 0) pflag = nvalues++; - else error->all(FLERR,"Invalid keyword in compute dihedral/local command"); + // optional args + + setflag = 0; + pstr = NULL; + + while (iarg < narg) { + if (strcmp(arg[iarg],"set") == 0) { + setflag = 1; + if (iarg+3 > narg) + error->all(FLERR,"Illegal compute dihedral/local command"); + if (strcmp(arg[iarg+1],"phi") == 0) { + delete [] pstr; + int n = strlen(arg[iarg+2]) + 1; + pstr = new char[n]; + strcpy(pstr,arg[iarg+2]); + } else error->all(FLERR,"Illegal compute dihedral/local command"); + iarg += 3; + } else error->all(FLERR,"Illegal compute dihedral/local command"); } + // error check + + if (nvar) { + if (!setflag) + error->all(FLERR,"Compute dihedral/local variable requires a set variable"); + for (int i = 0; i < nvar; i++) { + vvar[i] = input->variable->find(vstr[i]); + if (vvar[i] < 0) + error->all(FLERR, + "Variable name for copute dihedral/local does not exist"); + if (!input->variable->equalstyle(vvar[i])) + error->all(FLERR,"Variable for compute dihedral/local is invalid style"); + } + + if (pstr) { + pvar = input->variable->find(pstr); + if (pvar < 0) + error->all(FLERR, + "Variable name for compute dihedral/local does not exist"); + if (!input->variable->internalstyle(pvar)) + error->all(FLERR,"Variable for compute dihedral/local is invalid style"); + } + } else if (setflag) + error->all(FLERR,"Compute dihedral/local set with no variable"); + + // initialize output + + if (nvalues == 1) size_local_cols = 0; + else size_local_cols = nvalues; + nmax = 0; vlocal = NULL; alocal = NULL; @@ -65,6 +132,13 @@ ComputeDihedralLocal::ComputeDihedralLocal(LAMMPS *lmp, int narg, char **arg) : ComputeDihedralLocal::~ComputeDihedralLocal() { + delete [] bstyle; + for (int i = 0; i < nvar; i++) delete [] vstr[i]; + delete [] vstr; + delete [] vvar; + + delete [] pstr; + memory->destroy(vlocal); memory->destroy(alocal); } @@ -76,6 +150,22 @@ void ComputeDihedralLocal::init() if (force->dihedral == NULL) error->all(FLERR,"No dihedral style is defined for compute dihedral/local"); + if (nvar) { + for (int i = 0; i < nvar; i++) { + vvar[i] = input->variable->find(vstr[i]); + if (vvar[i] < 0) + error->all(FLERR, + "Variable name for compute dihedral/local does not exist"); + } + + if (pstr) { + pvar = input->variable->find(pstr); + if (pvar < 0) + error->all(FLERR, + "Variable name for compute dihedral/local does not exist"); + } + } + // do initial memory allocation so that memory_usage() is correct ncount = compute_dihedrals(0); @@ -107,12 +197,12 @@ void ComputeDihedralLocal::compute_local() int ComputeDihedralLocal::compute_dihedrals(int flag) { - int i,m,n,nd,atom1,atom2,atom3,atom4,imol,iatom; + int i,m,n,nd,atom1,atom2,atom3,atom4,imol,iatom,ivar; tagint tagprev; double vb1x,vb1y,vb1z,vb2x,vb2y,vb2z,vb3x,vb3y,vb3z,vb2xm,vb2ym,vb2zm; double ax,ay,az,bx,by,bz,rasq,rbsq,rgsq,rg,ra2inv,rb2inv,rabinv; - double s,c; - double *pbuf; + double s,c,phi; + double *ptr; double **x = atom->x; tagint *tag = atom->tag; @@ -130,14 +220,7 @@ int ComputeDihedralLocal::compute_dihedrals(int flag) int nlocal = atom->nlocal; int molecular = atom->molecular; - if (flag) { - if (nvalues == 1) { - if (pflag >= 0) pbuf = vlocal; - } else { - if (pflag >= 0 && alocal) pbuf = &alocal[0][pflag]; - else pbuf = NULL; - } - } + // loop over all atoms and their dihedrals m = n = 0; for (atom2 = 0; atom2 < nlocal; atom2++) { @@ -169,56 +252,75 @@ int ComputeDihedralLocal::compute_dihedrals(int flag) if (atom3 < 0 || !(mask[atom3] & groupbit)) continue; if (atom4 < 0 || !(mask[atom4] & groupbit)) continue; - if (flag) { - - // phi calculation from dihedral style harmonic - - if (pflag >= 0) { - vb1x = x[atom1][0] - x[atom2][0]; - vb1y = x[atom1][1] - x[atom2][1]; - vb1z = x[atom1][2] - x[atom2][2]; - domain->minimum_image(vb1x,vb1y,vb1z); - - vb2x = x[atom3][0] - x[atom2][0]; - vb2y = x[atom3][1] - x[atom2][1]; - vb2z = x[atom3][2] - x[atom2][2]; - domain->minimum_image(vb2x,vb2y,vb2z); - - vb2xm = -vb2x; - vb2ym = -vb2y; - vb2zm = -vb2z; - domain->minimum_image(vb2xm,vb2ym,vb2zm); - - vb3x = x[atom4][0] - x[atom3][0]; - vb3y = x[atom4][1] - x[atom3][1]; - vb3z = x[atom4][2] - x[atom3][2]; - domain->minimum_image(vb3x,vb3y,vb3z); - - ax = vb1y*vb2zm - vb1z*vb2ym; - ay = vb1z*vb2xm - vb1x*vb2zm; - az = vb1x*vb2ym - vb1y*vb2xm; - bx = vb3y*vb2zm - vb3z*vb2ym; - by = vb3z*vb2xm - vb3x*vb2zm; - bz = vb3x*vb2ym - vb3y*vb2xm; - - rasq = ax*ax + ay*ay + az*az; - rbsq = bx*bx + by*by + bz*bz; - rgsq = vb2xm*vb2xm + vb2ym*vb2ym + vb2zm*vb2zm; - rg = sqrt(rgsq); - - ra2inv = rb2inv = 0.0; - if (rasq > 0) ra2inv = 1.0/rasq; - if (rbsq > 0) rb2inv = 1.0/rbsq; - rabinv = sqrt(ra2inv*rb2inv); - - c = (ax*bx + ay*by + az*bz)*rabinv; - s = rg*rabinv*(ax*vb3x + ay*vb3y + az*vb3z); - - if (c > 1.0) c = 1.0; - if (c < -1.0) c = -1.0; - pbuf[n] = 180.0*atan2(s,c)/MY_PI; + if (!flag) { + m++; + continue; + } + + // phi calculation from dihedral style harmonic + + vb1x = x[atom1][0] - x[atom2][0]; + vb1y = x[atom1][1] - x[atom2][1]; + vb1z = x[atom1][2] - x[atom2][2]; + domain->minimum_image(vb1x,vb1y,vb1z); + + vb2x = x[atom3][0] - x[atom2][0]; + vb2y = x[atom3][1] - x[atom2][1]; + vb2z = x[atom3][2] - x[atom2][2]; + domain->minimum_image(vb2x,vb2y,vb2z); + + vb2xm = -vb2x; + vb2ym = -vb2y; + vb2zm = -vb2z; + domain->minimum_image(vb2xm,vb2ym,vb2zm); + + vb3x = x[atom4][0] - x[atom3][0]; + vb3y = x[atom4][1] - x[atom3][1]; + vb3z = x[atom4][2] - x[atom3][2]; + domain->minimum_image(vb3x,vb3y,vb3z); + + ax = vb1y*vb2zm - vb1z*vb2ym; + ay = vb1z*vb2xm - vb1x*vb2zm; + az = vb1x*vb2ym - vb1y*vb2xm; + bx = vb3y*vb2zm - vb3z*vb2ym; + by = vb3z*vb2xm - vb3x*vb2zm; + bz = vb3x*vb2ym - vb3y*vb2xm; + + rasq = ax*ax + ay*ay + az*az; + rbsq = bx*bx + by*by + bz*bz; + rgsq = vb2xm*vb2xm + vb2ym*vb2ym + vb2zm*vb2zm; + rg = sqrt(rgsq); + + ra2inv = rb2inv = 0.0; + if (rasq > 0) ra2inv = 1.0/rasq; + if (rbsq > 0) rb2inv = 1.0/rbsq; + rabinv = sqrt(ra2inv*rb2inv); + + c = (ax*bx + ay*by + az*bz)*rabinv; + s = rg*rabinv*(ax*vb3x + ay*vb3y + az*vb3z); + + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + phi = atan2(s,c); + + if (nvalues == 1) ptr = &vlocal[m]; + else ptr = alocal[m]; + + if (nvar) { + ivar = 0; + if (pstr) input->variable->internal_set(pvar,phi); + } + + for (n = 0; n < nvalues; n++) { + switch (bstyle[n]) { + case PHI: + ptr[n] = 180.0*phi/MY_PI; + break; + case VARIABLE: + ptr[n] = input->variable->compute_equal(vvar[ivar]); + ivar++; + break; } - n += nvalues; } m++; diff --git a/src/compute_dihedral_local.h b/src/compute_dihedral_local.h index c077e52dbd3470b75672d70773a0706d0e3b8498..d5f6a641833435a4f97de69f650df94e357aae63 100644 --- a/src/compute_dihedral_local.h +++ b/src/compute_dihedral_local.h @@ -33,8 +33,12 @@ class ComputeDihedralLocal : public Compute { double memory_usage(); private: - int nvalues,pflag; - int ncount; + int nvalues,nvar,ncount,setflag,tflag; + + int pvar; + int *bstyle,*vvar; + char *pstr; + char **vstr; int nmax; double *vlocal; diff --git a/src/compute_fragment_atom.cpp b/src/compute_fragment_atom.cpp index b9fb2331ecf35bca18a9f5803baad10c0273eaa2..bb273f3bdb11d6262d7f465851fc9144b956ade5 100644 --- a/src/compute_fragment_atom.cpp +++ b/src/compute_fragment_atom.cpp @@ -159,7 +159,7 @@ void ComputeFragmentAtom::compute_peratom() /* ---------------------------------------------------------------------- */ int ComputeFragmentAtom::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/compute_group_group.cpp b/src/compute_group_group.cpp index dc94db50f645ee35f9c1e5b928881aa5a584f155..51f84b020dba81007416e89aad5bd0308379d027 100644 --- a/src/compute_group_group.cpp +++ b/src/compute_group_group.cpp @@ -173,7 +173,7 @@ void ComputeGroupGroup::init() /* ---------------------------------------------------------------------- */ -void ComputeGroupGroup::init_list(int id, NeighList *ptr) +void ComputeGroupGroup::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/compute_hexorder_atom.cpp b/src/compute_hexorder_atom.cpp index cb2946beba8e7833feb9115566f38505108360cb..6d17ae15bd5eaf1ea29f503d469181c5511b4cb0 100644 --- a/src/compute_hexorder_atom.cpp +++ b/src/compute_hexorder_atom.cpp @@ -129,7 +129,7 @@ void ComputeHexOrderAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeHexOrderAtom::init_list(int id, NeighList *ptr) +void ComputeHexOrderAtom::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/compute_orientorder_atom.cpp b/src/compute_orientorder_atom.cpp index f263fdfaed0caa3cdeea54cf149b080c716bf7be..8a0a525fdc7a133cfc513cdc2e02b7ecad0dfae0 100644 --- a/src/compute_orientorder_atom.cpp +++ b/src/compute_orientorder_atom.cpp @@ -187,7 +187,7 @@ void ComputeOrientOrderAtom::init() /* ---------------------------------------------------------------------- */ -void ComputeOrientOrderAtom::init_list(int id, NeighList *ptr) +void ComputeOrientOrderAtom::init_list(int /*id*/, NeighList *ptr) { list = ptr; } @@ -542,4 +542,3 @@ double ComputeOrientOrderAtom::associated_legendre(int l, int m, double x) return p; } - diff --git a/src/compute_pair.cpp b/src/compute_pair.cpp index 444395bae5dc999fbf9181be76822762a2eeec58..df4f3a1ddb79f272c5527cccdb76df093c394b3e 100644 --- a/src/compute_pair.cpp +++ b/src/compute_pair.cpp @@ -13,6 +13,7 @@ #include #include +#include #include "compute_pair.h" #include "update.h" #include "force.h" @@ -29,7 +30,7 @@ ComputePair::ComputePair(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg), pstyle(NULL), pair(NULL), one(NULL) { - if (narg < 4 || narg > 5) error->all(FLERR,"Illegal compute pair command"); + if (narg < 4) error->all(FLERR,"Illegal compute pair command"); scalar_flag = 1; extscalar = 1; @@ -41,19 +42,34 @@ ComputePair::ComputePair(LAMMPS *lmp, int narg, char **arg) : pstyle = new char[n]; strcpy(pstyle,arg[3]); - if (narg == 5) { - if (strcmp(arg[4],"epair") == 0) evalue = EPAIR; - if (strcmp(arg[4],"evdwl") == 0) evalue = EVDWL; - if (strcmp(arg[4],"ecoul") == 0) evalue = ECOUL; - } else evalue = EPAIR; + int iarg = 4; + nsub = 0; + evalue = EPAIR; + + if (narg > iarg) { + if (isdigit(arg[iarg][0])) { + nsub = force->inumeric(FLERR,arg[iarg]); + ++iarg; + if (nsub <= 0) + error->all(FLERR,"Illegal compute pair command"); + } + } + + if (narg > iarg) { + if (strcmp(arg[iarg],"epair") == 0) evalue = EPAIR; + else if (strcmp(arg[iarg],"evdwl") == 0) evalue = EVDWL; + else if (strcmp(arg[iarg],"ecoul") == 0) evalue = ECOUL; + else error->all(FLERR, "Illegal compute pair command"); + ++iarg; + } // check if pair style with and without suffix exists - pair = force->pair_match(pstyle,1); + pair = force->pair_match(pstyle,1,nsub); if (!pair && lmp->suffix) { strcat(pstyle,"/"); strcat(pstyle,lmp->suffix); - pair = force->pair_match(pstyle,1); + pair = force->pair_match(pstyle,1,nsub); } if (!pair) @@ -84,7 +100,7 @@ void ComputePair::init() { // recheck for pair style in case it has been deleted - pair = force->pair_match(pstyle,1); + pair = force->pair_match(pstyle,1,nsub); if (!pair) error->all(FLERR,"Unrecognized pair style in compute pair command"); } diff --git a/src/compute_pair.h b/src/compute_pair.h index 9f2678aaab1cef6fe9131dfc78619312223bd258..57d52a5bab3cfe5050907436a271b3fb1a5b7e2c 100644 --- a/src/compute_pair.h +++ b/src/compute_pair.h @@ -33,7 +33,7 @@ class ComputePair : public Compute { void compute_vector(); private: - int evalue,npair; + int evalue,npair,nsub; char *pstyle; class Pair *pair; double *one; diff --git a/src/compute_pair_local.cpp b/src/compute_pair_local.cpp index 3f1147ed2778c3640c749ee76c7db66b28f9ca24..e4cbabfd3d34496498f9e122f0384c84cd90a0c8 100644 --- a/src/compute_pair_local.cpp +++ b/src/compute_pair_local.cpp @@ -139,7 +139,7 @@ void ComputePairLocal::init() /* ---------------------------------------------------------------------- */ -void ComputePairLocal::init_list(int id, NeighList *ptr) +void ComputePairLocal::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/compute_property_local.cpp b/src/compute_property_local.cpp index ad68459650a500a513f9d9e7718377f7a2870247..ddcf5913ca003bd9938974d196625d4de3381b8d 100644 --- a/src/compute_property_local.cpp +++ b/src/compute_property_local.cpp @@ -308,7 +308,7 @@ void ComputePropertyLocal::init() /* ---------------------------------------------------------------------- */ -void ComputePropertyLocal::init_list(int id, NeighList *ptr) +void ComputePropertyLocal::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/compute_rdf.cpp b/src/compute_rdf.cpp index f2635c09485ea9770b4adcd0770d207a5be83330..0a0e8fb684a921f3a2faa096ccad69f3d5b71f87 100644 --- a/src/compute_rdf.cpp +++ b/src/compute_rdf.cpp @@ -213,7 +213,7 @@ void ComputeRDF::init() /* ---------------------------------------------------------------------- */ -void ComputeRDF::init_list(int id, NeighList *ptr) +void ComputeRDF::init_list(int /*id*/, NeighList *ptr) { list = ptr; } diff --git a/src/compute_reduce.cpp b/src/compute_reduce.cpp index 7c61d666b2d9db9c9625b69bb08dfdafff49fa29..e3c3c5b70a9c3adbad74163e5b0ac9149c24c813 100644 --- a/src/compute_reduce.cpp +++ b/src/compute_reduce.cpp @@ -11,6 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include #include "compute_reduce.h" diff --git a/src/compute_reduce_chunk.cpp b/src/compute_reduce_chunk.cpp new file mode 100644 index 0000000000000000000000000000000000000000..beebc5f4115d7eaf5ca00425ca294918eda9602c --- /dev/null +++ b/src/compute_reduce_chunk.cpp @@ -0,0 +1,512 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include +#include +#include "compute_reduce_chunk.h" +#include "atom.h" +#include "update.h" +#include "modify.h" +#include "fix.h" +#include "compute.h" +#include "compute_chunk_atom.h" +#include "input.h" +#include "variable.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +enum{SUM,MINN,MAXX}; +enum{COMPUTE,FIX,VARIABLE}; + +#define INVOKED_PERATOM 8 + +#define BIG 1.0e20 + +/* ---------------------------------------------------------------------- */ + +ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg), + which(NULL), argindex(NULL), value2index(NULL), idchunk(NULL), ids(NULL), + vlocal(NULL), vglobal(NULL), alocal(NULL), aglobal(NULL), varatom(NULL) +{ + if (narg < 6) error->all(FLERR,"Illegal compute reduce/chunk command"); + + // ID of compute chunk/atom + + int n = strlen(arg[3]) + 1; + idchunk = new char[n]; + strcpy(idchunk,arg[3]); + init_chunk(); + + // mode + + if (strcmp(arg[4],"sum") == 0) mode = SUM; + else if (strcmp(arg[4],"min") == 0) mode = MINN; + else if (strcmp(arg[4],"max") == 0) mode = MAXX; + else error->all(FLERR,"Illegal compute reduce/chunk command"); + + int iarg = 5; + + // expand args if any have wildcard character "*" + + int expand = 0; + char **earg; + int nargnew = input->expand_args(narg-iarg,&arg[iarg],1,earg); + + if (earg != &arg[iarg]) expand = 1; + arg = earg; + + // parse values until one isn't recognized + + which = new int[nargnew]; + argindex = new int[nargnew]; + ids = new char*[nargnew]; + value2index = new int[nargnew]; + nvalues = 0; + + iarg = 0; + while (iarg < nargnew) { + ids[nvalues] = NULL; + + if (strncmp(arg[iarg],"c_",2) == 0 || + strncmp(arg[iarg],"f_",2) == 0 || + strncmp(arg[iarg],"v_",2) == 0) { + if (arg[iarg][0] == 'c') which[nvalues] = COMPUTE; + else if (arg[iarg][0] == 'f') which[nvalues] = FIX; + else if (arg[iarg][0] == 'v') which[nvalues] = VARIABLE; + + int n = strlen(arg[iarg]); + char *suffix = new char[n]; + strcpy(suffix,&arg[iarg][2]); + + char *ptr = strchr(suffix,'['); + if (ptr) { + if (suffix[strlen(suffix)-1] != ']') + error->all(FLERR,"Illegal compute reduce/chunk command"); + argindex[nvalues] = atoi(ptr+1); + *ptr = '\0'; + } else argindex[nvalues] = 0; + + n = strlen(suffix) + 1; + ids[nvalues] = new char[n]; + strcpy(ids[nvalues],suffix); + nvalues++; + delete [] suffix; + + } else error->all(FLERR,"Illegal compute reduce/chunk command"); + + iarg++; + } + + // if wildcard expansion occurred, free earg memory from expand_args() + + if (expand) { + for (int i = 0; i < nargnew; i++) delete [] earg[i]; + memory->sfree(earg); + } + + // error check + + for (int i = 0; i < nvalues; i++) { + if (which[i] == COMPUTE) { + int icompute = modify->find_compute(ids[i]); + if (icompute < 0) + error->all(FLERR,"Compute ID for compute reduce/chunk does not exist"); + if (!modify->compute[icompute]->peratom_flag) + error->all(FLERR,"Compute reduce/chunk compute does not " + "calculate per-atom values"); + if (argindex[i] == 0 && + modify->compute[icompute]->size_peratom_cols != 0) + error->all(FLERR,"Compute reduce/chunk compute does not " + "calculate a per-atom vector"); + if (argindex[i] && modify->compute[icompute]->size_peratom_cols == 0) + error->all(FLERR,"Compute reduce/chunk compute does not " + "calculate a per-atom array"); + if (argindex[i] && + argindex[i] > modify->compute[icompute]->size_peratom_cols) + error->all(FLERR, + "Compute reduce/chunk compute array is accessed out-of-range"); + + } else if (which[i] == FIX) { + int ifix = modify->find_fix(ids[i]); + if (ifix < 0) + error->all(FLERR,"Fix ID for compute reduce/chunk does not exist"); + if (!modify->fix[ifix]->peratom_flag) + error->all(FLERR,"Compute reduce/chunk fix does not " + "calculate per-atom values"); + if (argindex[i] == 0 && + modify->fix[ifix]->size_peratom_cols != 0) + error->all(FLERR,"Compute reduce/chunk fix does not " + "calculate a per-atom vector"); + if (argindex[i] && modify->fix[ifix]->size_peratom_cols == 0) + error->all(FLERR,"Compute reduce/chunk fix does not " + "calculate a per-atom array"); + if (argindex[i] && argindex[i] > modify->fix[ifix]->size_peratom_cols) + error->all(FLERR,"Compute reduce/chunk fix array is " + "accessed out-of-range"); + + } else if (which[i] == VARIABLE) { + int ivariable = input->variable->find(ids[i]); + if (ivariable < 0) + error->all(FLERR,"Variable name for compute reduce/chunk does not exist"); + if (input->variable->atomstyle(ivariable) == 0) + error->all(FLERR,"Compute reduce/chunk variable is " + "not atom-style variable"); + } + } + + // this compute produces either a vector or array + + if (nvalues == 1) { + vector_flag = 1; + size_vector_variable = 1; + extvector = 0; + } else { + array_flag = 1; + size_array_rows_variable = 1; + size_array_cols = nvalues; + extarray = 0; + } + + // setup + + if (mode == SUM) initvalue = 0.0; + else if (mode == MINN) initvalue = BIG; + else if (mode == MAXX) initvalue = -BIG; + + maxchunk = 0; + vlocal = vglobal = NULL; + alocal = aglobal = NULL; + + maxatom = 0; + varatom = NULL; +} + +/* ---------------------------------------------------------------------- */ + +ComputeReduceChunk::~ComputeReduceChunk() +{ + delete [] idchunk; + + delete [] which; + delete [] argindex; + for (int m = 0; m < nvalues; m++) delete [] ids[m]; + delete [] ids; + delete [] value2index; + + memory->destroy(vlocal); + memory->destroy(vglobal); + memory->destroy(alocal); + memory->destroy(aglobal); + + memory->destroy(varatom); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeReduceChunk::init() +{ + init_chunk(); + + // set indices of all computes,fixes,variables + + for (int m = 0; m < nvalues; m++) { + if (which[m] == COMPUTE) { + int icompute = modify->find_compute(ids[m]); + if (icompute < 0) + error->all(FLERR,"Compute ID for compute reduce/chunk does not exist"); + value2index[m] = icompute; + + } else if (which[m] == FIX) { + int ifix = modify->find_fix(ids[m]); + if (ifix < 0) + error->all(FLERR,"Fix ID for compute reduce/chunk does not exist"); + value2index[m] = ifix; + + } else if (which[m] == VARIABLE) { + int ivariable = input->variable->find(ids[m]); + if (ivariable < 0) + error->all(FLERR,"Variable name for compute reduce/chunk does not exist"); + value2index[m] = ivariable; + } + } +} + +/* ---------------------------------------------------------------------- */ + +void ComputeReduceChunk::init_chunk() +{ + int icompute = modify->find_compute(idchunk); + if (icompute < 0) + error->all(FLERR,"Chunk/atom compute does not exist for " + "compute reduce/chunk"); + cchunk = (ComputeChunkAtom *) modify->compute[icompute]; + if (strcmp(cchunk->style,"chunk/atom") != 0) + error->all(FLERR,"Compute reduce/chunk does not use chunk/atom compute"); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeReduceChunk::compute_vector() +{ + invoked_vector = update->ntimestep; + + // compute chunk/atom assigns atoms to chunk IDs + // extract ichunk index vector from compute + // ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms + + nchunk = cchunk->setup_chunks(); + cchunk->compute_ichunk(); + ichunk = cchunk->ichunk; + if (!nchunk) return; + + size_vector = nchunk; + + if (nchunk > maxchunk) { + memory->destroy(vlocal); + memory->destroy(vglobal); + maxchunk = nchunk; + memory->create(vlocal,maxchunk,"reduce/chunk:vlocal"); + memory->create(vglobal,maxchunk,"reduce/chunk:vglobal"); + vector = vglobal; + } + + // perform local reduction of single peratom value + + compute_one(0,vlocal,1); + + // reduce the per-chunk values across all procs + + if (mode == SUM) + MPI_Allreduce(vlocal,vglobal,nchunk,MPI_DOUBLE,MPI_SUM,world); + else if (mode == MINN) + MPI_Allreduce(vlocal,vglobal,nchunk,MPI_DOUBLE,MPI_MIN,world); + else if (mode == MAXX) + MPI_Allreduce(vlocal,vglobal,nchunk,MPI_DOUBLE,MPI_MAX,world); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeReduceChunk::compute_array() +{ + invoked_array = update->ntimestep; + + // compute chunk/atom assigns atoms to chunk IDs + // extract ichunk index vector from compute + // ichunk = 1 to Nchunk for included atoms, 0 for excluded atoms + + nchunk = cchunk->setup_chunks(); + cchunk->compute_ichunk(); + ichunk = cchunk->ichunk; + if (!nchunk) return; + + size_array_rows = nchunk; + + if (nchunk > maxchunk) { + memory->destroy(alocal); + memory->destroy(aglobal); + maxchunk = nchunk; + memory->create(alocal,maxchunk,nvalues,"reduce/chunk:alocal"); + memory->create(aglobal,maxchunk,nvalues,"reduce/chunk:aglobal"); + array = aglobal; + } + + // perform local reduction of all peratom values + + for (int m = 0; m < nvalues; m++) compute_one(m,&alocal[0][m],nvalues); + + // reduce the per-chunk values across all procs + + if (mode == SUM) + MPI_Allreduce(&alocal[0][0],&aglobal[0][0],nchunk*nvalues, + MPI_DOUBLE,MPI_SUM,world); + else if (mode == MINN) + MPI_Allreduce(&alocal[0][0],&aglobal[0][0],nchunk*nvalues, + MPI_DOUBLE,MPI_MIN,world); + else if (mode == MAXX) + MPI_Allreduce(&alocal[0][0],&aglobal[0][0],nchunk*nvalues, + MPI_DOUBLE,MPI_MAX,world); +} + +/* ---------------------------------------------------------------------- */ + +void ComputeReduceChunk::compute_one(int m, double *vchunk, int nstride) +{ + // initialize per-chunk values in accumulation vector + + for (int i = 0; i < nchunk; i += nstride) vchunk[i] = initvalue; + + // loop over my atoms + // use peratom input and chunk ID of each atom to update vector + + int *mask = atom->mask; + int nlocal = atom->nlocal; + + int index; + + if (which[m] == COMPUTE) { + Compute *compute = modify->compute[value2index[m]]; + + if (!(compute->invoked_flag & INVOKED_PERATOM)) { + compute->compute_peratom(); + compute->invoked_flag |= INVOKED_PERATOM; + } + + if (argindex[m] == 0) { + double *vcompute = compute->vector_atom; + for (int i = 0; i < nlocal; i++) { + if (!(mask[i] & groupbit)) continue; + index = ichunk[i]-1; + if (index < 0) continue; + combine(vchunk[index*nstride],vcompute[i]); + } + } else { + double **acompute = compute->array_atom; + int argindexm1 = argindex[m] - 1; + for (int i = 0; i < nlocal; i++) { + if (!(mask[i] & groupbit)) continue; + index = ichunk[i]-1; + if (index < 0) continue; + combine(vchunk[index*nstride],acompute[i][argindexm1]); + } + } + + // access fix fields, check if fix frequency is a match + + } else if (which[m] == FIX) { + Fix *fix = modify->fix[value2index[m]]; + if (update->ntimestep % fix->peratom_freq) + error->all(FLERR,"Fix used in compute reduce/chunk not " + "computed at compatible time"); + + if (argindex[m] == 0) { + double *vfix = fix->vector_atom; + for (int i = 0; i < nlocal; i++) { + if (!(mask[i] & groupbit)) continue; + index = ichunk[i]-1; + if (index < 0) continue; + combine(vchunk[index*nstride],vfix[i]); + } + } else { + double **afix = fix->array_atom; + int argindexm1 = argindex[m] - 1; + for (int i = 0; i < nlocal; i++) { + if (!(mask[i] & groupbit)) continue; + index = ichunk[i]-1; + if (index < 0) continue; + combine(vchunk[index*nstride],afix[i][argindexm1]); + } + } + + // evaluate atom-style variable + + } else if (which[m] == VARIABLE) { + if (atom->nmax > maxatom) { + memory->destroy(varatom); + maxatom = atom->nmax; + memory->create(varatom,maxatom,"reduce/chunk:varatom"); + } + + input->variable->compute_atom(value2index[m],igroup,varatom,1,0); + for (int i = 0; i < nlocal; i++) { + if (!(mask[i] & groupbit)) continue; + index = ichunk[i]-1; + if (index < 0) continue; + combine(vchunk[index*nstride],varatom[i]); + } + } +} + +/* ---------------------------------------------------------------------- + combine two values according to reduction mode +------------------------------------------------------------------------- */ + +void ComputeReduceChunk::combine(double &one, double two) +{ + if (mode == SUM) one += two; + else if (mode == MINN) { + if (two < one) one = two; + } else if (mode == MAXX) { + if (two > one) one = two; + } +} + +/* ---------------------------------------------------------------------- + lock methods: called by fix ave/time + these methods insure vector/array size is locked for Nfreq epoch + by passing lock info along to compute chunk/atom +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + increment lock counter +------------------------------------------------------------------------- */ + +void ComputeReduceChunk::lock_enable() +{ + cchunk->lockcount++; +} + +/* ---------------------------------------------------------------------- + decrement lock counter in compute chunk/atom, if it still exists +------------------------------------------------------------------------- */ + +void ComputeReduceChunk::lock_disable() +{ + int icompute = modify->find_compute(idchunk); + if (icompute >= 0) { + cchunk = (ComputeChunkAtom *) modify->compute[icompute]; + cchunk->lockcount--; + } +} + +/* ---------------------------------------------------------------------- + calculate and return # of chunks = length of vector/array +------------------------------------------------------------------------- */ + +int ComputeReduceChunk::lock_length() +{ + nchunk = cchunk->setup_chunks(); + return nchunk; +} + +/* ---------------------------------------------------------------------- + set the lock from startstep to stopstep +------------------------------------------------------------------------- */ + +void ComputeReduceChunk::lock(Fix *fixptr, bigint startstep, bigint stopstep) +{ + cchunk->lock(fixptr,startstep,stopstep); +} + +/* ---------------------------------------------------------------------- + unset the lock +------------------------------------------------------------------------- */ + +void ComputeReduceChunk::unlock(Fix *fixptr) +{ + cchunk->unlock(fixptr); +} + +/* ---------------------------------------------------------------------- + memory usage of local data +------------------------------------------------------------------------- */ + +double ComputeReduceChunk::memory_usage() +{ + double bytes = (bigint) maxatom * sizeof(double); + if (nvalues == 1) bytes += (bigint) maxchunk * 2 * sizeof(double); + else bytes += (bigint) maxchunk * nvalues * 2 * sizeof(double); + return bytes; +} diff --git a/src/compute_reduce_chunk.h b/src/compute_reduce_chunk.h new file mode 100644 index 0000000000000000000000000000000000000000..ac556907b7352cbcf7fb47d44e13a537286bdbae --- /dev/null +++ b/src/compute_reduce_chunk.h @@ -0,0 +1,77 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef COMPUTE_CLASS + +ComputeStyle(reduce/chunk,ComputeReduceChunk) + +#else + +#ifndef LMP_COMPUTE_REDUCE_CHUNK_H +#define LMP_COMPUTE_REDUCE_CHUNK_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputeReduceChunk : public Compute { + public: + ComputeReduceChunk(class LAMMPS *, int, char **); + ~ComputeReduceChunk(); + void init(); + void compute_vector(); + void compute_array(); + + void lock_enable(); + void lock_disable(); + int lock_length(); + void lock(class Fix *, bigint, bigint); + void unlock(class Fix *); + + double memory_usage(); + + private: + int mode,nvalues; + int *which,*argindex,*value2index; + char *idchunk; + char **ids; + + int nchunk; + int maxchunk,maxatom; + double initvalue; + double *vlocal,*vglobal; + double **alocal,**aglobal; + double *varatom; + + class ComputeChunkAtom *cchunk; + int *ichunk; + + void init_chunk(); + void compute_one(int, double *, int); + void combine(double &, double); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +*/ diff --git a/src/compute_temp_com.cpp b/src/compute_temp_com.cpp index 35f4512ab2b76e8c7b16d1de171588b6c2a547f6..f2ad40ea43361af4968a1d6bde367904ebc27d29 100644 --- a/src/compute_temp_com.cpp +++ b/src/compute_temp_com.cpp @@ -163,7 +163,7 @@ void ComputeTempCOM::compute_vector() remove velocity bias from atom I to leave thermal velocity ------------------------------------------------------------------------- */ -void ComputeTempCOM::remove_bias(int i, double *v) +void ComputeTempCOM::remove_bias(int /*i*/, double *v) { v[0] -= vbias[0]; v[1] -= vbias[1]; @@ -204,7 +204,7 @@ void ComputeTempCOM::remove_bias_all() assume remove_bias() was previously called ------------------------------------------------------------------------- */ -void ComputeTempCOM::restore_bias(int i, double *v) +void ComputeTempCOM::restore_bias(int /*i*/, double *v) { v[0] += vbias[0]; v[1] += vbias[1]; diff --git a/src/compute_temp_deform.cpp b/src/compute_temp_deform.cpp index 8729204e700d5bd105ed4ac35f4468068dfb8547..39780b5cf6fe724c64a82ead4dc70c773742e12e 100644 --- a/src/compute_temp_deform.cpp +++ b/src/compute_temp_deform.cpp @@ -277,7 +277,7 @@ void ComputeTempDeform::remove_bias_all() assume remove_bias() was previously called ------------------------------------------------------------------------- */ -void ComputeTempDeform::restore_bias(int i, double *v) +void ComputeTempDeform::restore_bias(int /*i*/, double *v) { v[0] += vbias[0]; v[1] += vbias[1]; @@ -289,7 +289,7 @@ void ComputeTempDeform::restore_bias(int i, double *v) assume remove_bias_thr() was previously called with the same buffer b ------------------------------------------------------------------------- */ -void ComputeTempDeform::restore_bias_thr(int i, double *v, double *b) +void ComputeTempDeform::restore_bias_thr(int /*i*/, double *v, double *b) { v[0] += b[0]; v[1] += b[1]; diff --git a/src/compute_temp_partial.cpp b/src/compute_temp_partial.cpp index 4b87a2249ed1f96593a901d264b1b9bd61f20621..4425aebdda76a45cc9eacb959c2e122aac464d5e 100644 --- a/src/compute_temp_partial.cpp +++ b/src/compute_temp_partial.cpp @@ -90,7 +90,7 @@ void ComputeTempPartial::dof_compute() /* ---------------------------------------------------------------------- */ -int ComputeTempPartial::dof_remove(int i) +int ComputeTempPartial::dof_remove(int /*i*/) { int nper = xflag+yflag+zflag; return (domain->dimension - nper); @@ -169,7 +169,7 @@ void ComputeTempPartial::compute_vector() remove velocity bias from atom I to leave thermal velocity ------------------------------------------------------------------------- */ -void ComputeTempPartial::remove_bias(int i, double *v) +void ComputeTempPartial::remove_bias(int /*i*/, double *v) { if (!xflag) { vbias[0] = v[0]; @@ -189,7 +189,7 @@ void ComputeTempPartial::remove_bias(int i, double *v) remove velocity bias from atom I to leave thermal velocity ------------------------------------------------------------------------- */ -void ComputeTempPartial::remove_bias_thr(int i, double *v, double *b) +void ComputeTempPartial::remove_bias_thr(int /*i*/, double *v, double *b) { if (!xflag) { b[0] = v[0]; @@ -275,7 +275,7 @@ void ComputeTempPartial::reapply_bias_all() assume remove_bias() was previously called ------------------------------------------------------------------------- */ -void ComputeTempPartial::restore_bias(int i, double *v) +void ComputeTempPartial::restore_bias(int /*i*/, double *v) { if (!xflag) v[0] += vbias[0]; if (!yflag) v[1] += vbias[1]; @@ -287,7 +287,7 @@ void ComputeTempPartial::restore_bias(int i, double *v) assume remove_bias_thr() was previously called with the same buffer b ------------------------------------------------------------------------- */ -void ComputeTempPartial::restore_bias_thr(int i, double *v, double *b) +void ComputeTempPartial::restore_bias_thr(int /*i*/, double *v, double *b) { if (!xflag) v[0] += b[0]; if (!yflag) v[1] += b[1]; diff --git a/src/compute_temp_ramp.cpp b/src/compute_temp_ramp.cpp index 42d258d8b2fe626d68524fc21af9b427dd477baf..ba572645f34f22c144f612ab1d29ccae1e2628b1 100644 --- a/src/compute_temp_ramp.cpp +++ b/src/compute_temp_ramp.cpp @@ -279,7 +279,7 @@ void ComputeTempRamp::remove_bias_all() assume remove_bias() was previously called ------------------------------------------------------------------------- */ -void ComputeTempRamp::restore_bias(int i, double *v) +void ComputeTempRamp::restore_bias(int /*i*/, double *v) { v[v_dim] += vbias[v_dim]; } @@ -289,7 +289,7 @@ void ComputeTempRamp::restore_bias(int i, double *v) assume remove_bias_thr() was previously called with the same buffer b ------------------------------------------------------------------------- */ -void ComputeTempRamp::restore_bias_thr(int i, double *v, double *b) +void ComputeTempRamp::restore_bias_thr(int /*i*/, double *v, double *b) { v[v_dim] += b[v_dim]; } diff --git a/src/compute_temp_region.cpp b/src/compute_temp_region.cpp index bde70a20f0c44058961dab409ca605bfe4e7a81e..4aa4dac0a11c36437bbfac84898553de73c439f0 100644 --- a/src/compute_temp_region.cpp +++ b/src/compute_temp_region.cpp @@ -253,7 +253,7 @@ void ComputeTempRegion::remove_bias_all() assume remove_bias() was previously called ------------------------------------------------------------------------- */ -void ComputeTempRegion::restore_bias(int i, double *v) +void ComputeTempRegion::restore_bias(int /*i*/, double *v) { v[0] += vbias[0]; v[1] += vbias[1]; @@ -265,7 +265,7 @@ void ComputeTempRegion::restore_bias(int i, double *v) assume remove_bias_thr() was previously called with the same buffer b ------------------------------------------------------------------------- */ -void ComputeTempRegion::restore_bias_thr(int i, double *v, double *b) +void ComputeTempRegion::restore_bias_thr(int /*i*/, double *v, double *b) { v[0] += b[0]; v[1] += b[1]; diff --git a/src/dihedral_zero.cpp b/src/dihedral_zero.cpp index bdd2eaadd3d484e5f709531be0ac43635b826ed1..46facdb6dbe716471f4004c7d646b49f60cdee01 100644 --- a/src/dihedral_zero.cpp +++ b/src/dihedral_zero.cpp @@ -99,13 +99,13 @@ void DihedralZero::coeff(int narg, char **arg) proc 0 writes out coeffs to restart file ------------------------------------------------------------------------- */ -void DihedralZero::write_restart(FILE *fp) {} +void DihedralZero::write_restart(FILE * /*fp*/) {} /* ---------------------------------------------------------------------- proc 0 reads coeffs from restart file, bcasts them ------------------------------------------------------------------------- */ -void DihedralZero::read_restart(FILE *fp) +void DihedralZero::read_restart(FILE * /*fp*/) { allocate(); for (int i = 1; i <= atom->ndihedraltypes; i++) setflag[i] = 1; @@ -119,4 +119,3 @@ void DihedralZero::write_data(FILE *fp) { for (int i = 1; i <= atom->ndihedraltypes; i++) fprintf(fp,"%d\n",i); } - diff --git a/src/domain.cpp b/src/domain.cpp index 4c1d12018b1b6076819e3938239e70129c61d989..8238ab7eead9f2b7a21761b91f6b9b95bb17b519 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -1176,12 +1176,12 @@ int Domain::closest_image(int i, int j) if J is not a valid index like -1, just return it ------------------------------------------------------------------------- */ -int Domain::closest_image(double *pos, int j) +int Domain::closest_image(const double * const pos, int j) { if (j < 0) return j; - int *sametag = atom->sametag; - double **x = atom->x; + const int * const sametag = atom->sametag; + const double * const * const x = atom->x; int closest = j; double delx = pos[0] - x[j][0]; @@ -1208,13 +1208,10 @@ int Domain::closest_image(double *pos, int j) /* ---------------------------------------------------------------------- find and return Xj image = periodic image of Xj that is closest to Xi for triclinic, add/subtract tilt factors in other dims as needed - not currently used (Jan 2017): - used to be called by pair TIP4P styles but no longer, - due to use of other closest_image() method + called by ServerMD class and LammpsInterface in lib/atc. ------------------------------------------------------------------------- */ -void Domain::closest_image(const double * const xi, const double * const xj, - double * const xjimage) +void Domain::closest_image(const double * const xi, const double * const xj, double * const xjimage) { double dx = xj[0] - xi[0]; double dy = xj[1] - xi[1]; @@ -1618,7 +1615,7 @@ void Domain::image_flip(int m, int n, int p) called from create_atoms() in library.cpp ------------------------------------------------------------------------- */ -int Domain::ownatom(int id, double *x, imageint *image, int shrinkexceed) +int Domain::ownatom(int /*id*/, double *x, imageint *image, int shrinkexceed) { double lamda[3]; double *coord,*blo,*bhi,*slo,*shi; diff --git a/src/domain.h b/src/domain.h index 5581f9a45fc85eb2a5d79f353e5bc53e41ba2e89..9ebdd6ae9477cec5739992096ea7d5bf5655355a 100644 --- a/src/domain.h +++ b/src/domain.h @@ -115,9 +115,8 @@ class Domain : protected Pointers { void minimum_image(double *); void minimum_image_once(double *); int closest_image(int, int); - int closest_image(double *, int); - void closest_image(const double * const, const double * const, - double * const); + int closest_image(const double * const, int); + void closest_image(const double * const, const double * const, double * const); void remap(double *, imageint &); void remap(double *); void remap_near(double *, double *); diff --git a/src/dump.cpp b/src/dump.cpp index 7c171015bb4e201f8a8602294ad53c2c9937fbf6..7cd80dcf71ac2cc7a964389674983cbcabb7c274 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -45,7 +45,7 @@ enum{ASCEND,DESCEND}; /* ---------------------------------------------------------------------- */ -Dump::Dump(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) +Dump::Dump(LAMMPS *lmp, int /*narg*/, char **arg) : Pointers(lmp) { MPI_Comm_rank(world,&me); MPI_Comm_size(world,&nprocs); diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index 4c3950c0992deacc6b7741f1da30d42239b53265..17ad4b89ef2a1eec6782165f024426173d70f1ad 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -1023,12 +1023,12 @@ int DumpCustom::count() } else if (thresh_op[ithresh] == XOR) { if (lastflag) { for (i = 0; i < nlocal; i++, ptr += nstride) - if (choose[i] && (*ptr == 0.0 && values[i] == 0.0) || + if ((choose[i] && *ptr == 0.0 && values[i] == 0.0) || (*ptr != 0.0 && values[i] != 0.0)) choose[i] = 0; } else { for (i = 0; i < nlocal; i++, ptr += nstride) - if (choose[i] && (*ptr == 0.0 && value == 0.0) || + if ((choose[i] && *ptr == 0.0 && value == 0.0) || (*ptr != 0.0 && value != 0.0)) choose[i] = 0; } diff --git a/src/dump_image.cpp b/src/dump_image.cpp index 60a1f545c9715d951d07590891e4f31888b3746c..a488f65161909a05b598832c3d15a109f346eb21 100644 --- a/src/dump_image.cpp +++ b/src/dump_image.cpp @@ -1193,7 +1193,7 @@ void DumpImage::create_image() /* ---------------------------------------------------------------------- */ int DumpImage::pack_forward_comm(int n, int *list, double *buf, - int pbc_flag, int *pbc) + int /*pbc_flag*/, int * /*pbc*/) { int i,j,m; diff --git a/src/dump_local.cpp b/src/dump_local.cpp index 0d5172b5c1bdaf0de61828a464bc0e7b09a61006..8dc055469064c4751a5d3b1a0b7586de417c5a95 100644 --- a/src/dump_local.cpp +++ b/src/dump_local.cpp @@ -326,7 +326,7 @@ int DumpLocal::count() /* ---------------------------------------------------------------------- */ -void DumpLocal::pack(tagint *dummy) +void DumpLocal::pack(tagint * /*dummy*/) { for (int n = 0; n < size_one; n++) (this->*pack_choice[n])(n); } diff --git a/src/error.cpp b/src/error.cpp index 3feaf1d1acde855d71ca3d3fd79ed5afd83934d2..913239ac495638986f9d799f5925078161ac8f79 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -75,7 +75,7 @@ void Error::universe_all(const char *file, int line, const char *str) update->whichflag = 0; char msg[100]; - sprintf(msg, "ERROR: %s (%s:%d)\n", str, file, line); + snprintf(msg, 100, "ERROR: %s (%s:%d)\n", str, truncpath(file), line); throw LAMMPSException(msg); #else MPI_Finalize(); @@ -100,7 +100,7 @@ void Error::universe_one(const char *file, int line, const char *str) update->whichflag = 0; char msg[100]; - sprintf(msg, "ERROR: %s (%s:%d)\n", str, file, line); + snprintf(msg, 100, "ERROR: %s (%s:%d)\n", str, truncpath(file), line); throw LAMMPSAbortException(msg, universe->uworld); #else MPI_Abort(universe->uworld,1); @@ -151,7 +151,7 @@ void Error::all(const char *file, int line, const char *str) update->whichflag = 0; char msg[100]; - sprintf(msg, "ERROR: %s (%s:%d)\n", str, file, line); + snprintf(msg, 100, "ERROR: %s (%s:%d)\n", str, truncpath(file), line); if (universe->nworlds > 1) { throw LAMMPSAbortException(msg, universe->uworld); @@ -201,7 +201,7 @@ void Error::one(const char *file, int line, const char *str) update->whichflag = 0; char msg[100]; - sprintf(msg, "ERROR on proc %d: %s (%s:%d)\n", me, str, file, line); + snprintf(msg, 100, "ERROR on proc %d: %s (%s:%d)\n", me, str, truncpath(file), line); throw LAMMPSAbortException(msg, world); #else MPI_Abort(world,1); diff --git a/src/fix.cpp b/src/fix.cpp index a54e2957985207ee6c5a27f59ae70483763d251b..634bc2393dc71dab874972c9f474d4991d54de12 100644 --- a/src/fix.cpp +++ b/src/fix.cpp @@ -31,7 +31,7 @@ int Fix::instance_total = 0; /* ---------------------------------------------------------------------- */ -Fix::Fix(LAMMPS *lmp, int narg, char **arg) : +Fix::Fix(LAMMPS *lmp, int /*narg*/, char **arg) : Pointers(lmp), id(NULL), style(NULL), extlist(NULL), vector_atom(NULL), array_atom(NULL), vector_local(NULL), array_local(NULL), eatom(NULL), vatom(NULL) @@ -81,6 +81,7 @@ Fix::Fix(LAMMPS *lmp, int narg, char **arg) : scalar_flag = vector_flag = array_flag = 0; peratom_flag = local_flag = 0; + global_freq = local_freq = peratom_freq = -1; size_vector_variable = size_array_rows_variable = 0; comm_forward = comm_reverse = comm_border = 0; diff --git a/src/fix_adapt.cpp b/src/fix_adapt.cpp index 42cd1bd1992de2c9d474b018634bd33052e8b03f..950bc242534893b23ada9ae57203f428cd467ba0 100644 --- a/src/fix_adapt.cpp +++ b/src/fix_adapt.cpp @@ -476,7 +476,7 @@ void FixAdapt::init() /* ---------------------------------------------------------------------- */ -void FixAdapt::setup_pre_force(int vflag) +void FixAdapt::setup_pre_force(int /*vflag*/) { change_settings(); } @@ -491,7 +491,7 @@ void FixAdapt::setup_pre_force_respa(int vflag, int ilevel) /* ---------------------------------------------------------------------- */ -void FixAdapt::pre_force(int vflag) +void FixAdapt::pre_force(int /*vflag*/) { if (nevery == 0) return; if (update->ntimestep % nevery) return; diff --git a/src/fix_addforce.cpp b/src/fix_addforce.cpp index c2eedccd6151e6306bcf11d6f7a380413434850a..d66457a1f19ef1a903d22c87099d6c5cb75d01bb 100644 --- a/src/fix_addforce.cpp +++ b/src/fix_addforce.cpp @@ -361,7 +361,7 @@ void FixAddForce::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixAddForce::post_force_respa(int vflag, int ilevel, int iloop) +void FixAddForce::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/fix_ave_atom.cpp b/src/fix_ave_atom.cpp index a8c3be07af55fe5eab76b1c35fbd3afe0b2340f4..c8cbad75c969adc32517e122f6da84e5ba3236f6 100644 --- a/src/fix_ave_atom.cpp +++ b/src/fix_ave_atom.cpp @@ -283,7 +283,7 @@ void FixAveAtom::init() only does something if nvalid = current timestep ------------------------------------------------------------------------- */ -void FixAveAtom::setup(int vflag) +void FixAveAtom::setup(int /*vflag*/) { end_of_step(); } @@ -432,7 +432,7 @@ void FixAveAtom::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixAveAtom::copy_arrays(int i, int j, int delflag) +void FixAveAtom::copy_arrays(int i, int j, int /*delflag*/) { for (int m = 0; m < nvalues; m++) array[j][m] = array[i][m]; diff --git a/src/fix_ave_chunk.cpp b/src/fix_ave_chunk.cpp index 5f727fd3f747f6c9ec21cf7fcdf873cf57ecf5cb..7aed4dcbe7b6844742f4fb03462e16bb4d060d4a 100644 --- a/src/fix_ave_chunk.cpp +++ b/src/fix_ave_chunk.cpp @@ -63,7 +63,6 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) : strcpy(idchunk,arg[6]); global_freq = nfreq; - peratom_freq = nfreq; no_change_box = 1; // expand args if any have wildcard character "*" @@ -225,7 +224,7 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) : fp = fopen(arg[iarg+1],"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix ave/chunk file %s",arg[iarg+1]); + snprintf(str,128,"Cannot open fix ave/chunk file %s",arg[iarg+1]); error->one(FLERR,str); } } @@ -557,7 +556,7 @@ void FixAveChunk::init() that nchunk may not track it ------------------------------------------------------------------------- */ -void FixAveChunk::setup(int vflag) +void FixAveChunk::setup(int /*vflag*/) { end_of_step(); } diff --git a/src/fix_ave_correlate.cpp b/src/fix_ave_correlate.cpp index 418464a2484b4884e58a2966a410eb9e092b1d38..5c95f20ec2eec92658465585f4dbce83eda498a7 100644 --- a/src/fix_ave_correlate.cpp +++ b/src/fix_ave_correlate.cpp @@ -149,7 +149,7 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS * lmp, int narg, char **arg): fp = fopen(arg[iarg+1],"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix ave/correlate file %s",arg[iarg+1]); + snprintf(str,128,"Cannot open fix ave/correlate file %s",arg[iarg+1]); error->one(FLERR,str); } } @@ -404,7 +404,7 @@ void FixAveCorrelate::init() only does something if nvalid = current timestep ------------------------------------------------------------------------- */ -void FixAveCorrelate::setup(int vflag) +void FixAveCorrelate::setup(int /*vflag*/) { end_of_step(); } diff --git a/src/fix_ave_histo.cpp b/src/fix_ave_histo.cpp index 7aa599389979bac8cdfe48614a5302c7834a2bac..a5bf8db557853771ebb077da829d522491c17d63 100644 --- a/src/fix_ave_histo.cpp +++ b/src/fix_ave_histo.cpp @@ -559,7 +559,7 @@ void FixAveHisto::init() only does something if nvalid = current timestep ------------------------------------------------------------------------- */ -void FixAveHisto::setup(int vflag) +void FixAveHisto::setup(int /*vflag*/) { end_of_step(); } @@ -937,7 +937,7 @@ void FixAveHisto::options(int iarg, int narg, char **arg) fp = fopen(arg[iarg+1],"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix ave/histo file %s",arg[iarg+1]); + snprintf(str,128,"Cannot open fix ave/histo file %s",arg[iarg+1]); error->one(FLERR,str); } } diff --git a/src/fix_ave_time.cpp b/src/fix_ave_time.cpp index c3ace296842b0cb3738c62b635ed7fb48854e48a..50654b6561a04027c695fa6e3e0a913064bd0950 100644 --- a/src/fix_ave_time.cpp +++ b/src/fix_ave_time.cpp @@ -529,7 +529,7 @@ void FixAveTime::init() only does something if nvalid = current timestep ------------------------------------------------------------------------- */ -void FixAveTime::setup(int vflag) +void FixAveTime::setup(int /*vflag*/) { end_of_step(); } @@ -1042,7 +1042,7 @@ void FixAveTime::options(int iarg, int narg, char **arg) fp = fopen(arg[iarg+1],"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix ave/time file %s",arg[iarg+1]); + snprintf(str,128,"Cannot open fix ave/time file %s",arg[iarg+1]); error->one(FLERR,str); } } diff --git a/src/fix_aveforce.cpp b/src/fix_aveforce.cpp index 4432a5dd36d8aeb369a34c0523bc1592a83050a7..1c87ba57851a0e5de4864b1ba3be8d6f845aae8e 100644 --- a/src/fix_aveforce.cpp +++ b/src/fix_aveforce.cpp @@ -194,7 +194,7 @@ void FixAveForce::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixAveForce::post_force(int vflag) +void FixAveForce::post_force(int /*vflag*/) { // update region if necessary @@ -259,7 +259,7 @@ void FixAveForce::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixAveForce::post_force_respa(int vflag, int ilevel, int iloop) +void FixAveForce::post_force_respa(int vflag, int ilevel, int /*iloop*/) { // ave + extra force on selected RESPA level // just ave on all other levels diff --git a/src/fix_balance.cpp b/src/fix_balance.cpp index e748e0ae31c0fd0e550d35dff5b5f3898daeccac..8995a57afe0d6fd7a22bd66a3f6f89e9b5cc6ef0 100644 --- a/src/fix_balance.cpp +++ b/src/fix_balance.cpp @@ -160,7 +160,7 @@ void FixBalance::init() /* ---------------------------------------------------------------------- */ -void FixBalance::setup(int vflag) +void FixBalance::setup(int /*vflag*/) { // compute final imbalance factor if setup_pre_exchange() invoked balancer // this is called at end of run setup, before output diff --git a/src/fix_drag.cpp b/src/fix_drag.cpp index 6a69dddbf5d744a8028c3aac143def239e3991cf..e4cf12d1ffcc2215ece204d559aa4ab943b5b23f 100644 --- a/src/fix_drag.cpp +++ b/src/fix_drag.cpp @@ -90,7 +90,7 @@ void FixDrag::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixDrag::post_force(int vflag) +void FixDrag::post_force(int /*vflag*/) { // apply drag force to atoms in group of magnitude f_mag // apply in direction (r-r0) if atom is further than delta away @@ -132,7 +132,7 @@ void FixDrag::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixDrag::post_force_respa(int vflag, int ilevel, int iloop) +void FixDrag::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/fix_dt_reset.cpp b/src/fix_dt_reset.cpp index f2a50fd6d1c416ee9b8c1f551a1ef56305a3b945..7566094b48050d21cd6f281e9b8582706d8a7de2 100644 --- a/src/fix_dt_reset.cpp +++ b/src/fix_dt_reset.cpp @@ -129,7 +129,7 @@ void FixDtReset::init() /* ---------------------------------------------------------------------- */ -void FixDtReset::setup(int vflag) +void FixDtReset::setup(int /*vflag*/) { end_of_step(); } diff --git a/src/fix_enforce2d.cpp b/src/fix_enforce2d.cpp index 791a52c50cb39e13c61d2d8159820c71c03dbb87..986ded5d16d10f859f10acd41cefcdc61fe33985 100644 --- a/src/fix_enforce2d.cpp +++ b/src/fix_enforce2d.cpp @@ -78,7 +78,7 @@ void FixEnforce2D::init() flist[nfixlist++] = modify->fix[i]; else { char msg[256]; - sprintf(msg,"Fix enforce2d must be defined after fix %s",modify->fix[i]->style); + snprintf(msg,256,"Fix enforce2d must be defined after fix %s",modify->fix[i]->style); error->all(FLERR,msg); } } @@ -112,7 +112,7 @@ void FixEnforce2D::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixEnforce2D::post_force(int vflag) +void FixEnforce2D::post_force(int /*vflag*/) { double **v = atom->v; double **f = atom->f; @@ -164,7 +164,7 @@ void FixEnforce2D::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixEnforce2D::post_force_respa(int vflag, int ilevel, int iloop) +void FixEnforce2D::post_force_respa(int vflag, int /*ilevel*/, int /*iloop*/) { post_force(vflag); } diff --git a/src/fix_external.cpp b/src/fix_external.cpp index 4fcc842f899401eebc0f21e2fdf0abe86a7f3e41..5ac9206e7fae6630bf4bf76284df1173432f8f9a 100644 --- a/src/fix_external.cpp +++ b/src/fix_external.cpp @@ -129,7 +129,7 @@ void FixExternal::min_setup(int vflag) store eflag, so can use it in post_force to tally per-atom energies ------------------------------------------------------------------------- */ -void FixExternal::pre_reverse(int eflag, int vflag) +void FixExternal::pre_reverse(int eflag, int /*vflag*/) { eflag_caller = eflag; } @@ -305,7 +305,7 @@ void FixExternal::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixExternal::copy_arrays(int i, int j, int delflag) +void FixExternal::copy_arrays(int i, int j, int /*delflag*/) { fexternal[j][0] = fexternal[i][0]; fexternal[j][1] = fexternal[i][1]; diff --git a/src/fix_gravity.cpp b/src/fix_gravity.cpp index 2baf3ff24d192a3362219beb0d971855ba137170..bc10eb280782bf83023b24a1202336e4b3e5ddf8 100644 --- a/src/fix_gravity.cpp +++ b/src/fix_gravity.cpp @@ -249,7 +249,7 @@ void FixGravity::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixGravity::post_force(int vflag) +void FixGravity::post_force(int /*vflag*/) { // update gravity due to variables @@ -302,7 +302,7 @@ void FixGravity::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixGravity::post_force_respa(int vflag, int ilevel, int iloop) +void FixGravity::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/fix_group.cpp b/src/fix_group.cpp index 10736964e788d5b76d47ea392737c35f714fedb9..0980ff5456089ad2936049fdbfab70fe335bb1f7 100644 --- a/src/fix_group.cpp +++ b/src/fix_group.cpp @@ -176,7 +176,7 @@ void FixGroup::init() assign atoms to group ------------------------------------------------------------------------- */ -void FixGroup::setup(int vflag) +void FixGroup::setup(int /*vflag*/) { set_group(); } @@ -192,7 +192,7 @@ void FixGroup::post_integrate() /* ---------------------------------------------------------------------- */ -void FixGroup::post_integrate_respa(int ilevel, int iloop) +void FixGroup::post_integrate_respa(int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_integrate(); } @@ -259,7 +259,7 @@ void FixGroup::set_group() /* ---------------------------------------------------------------------- */ -void *FixGroup::extract(const char *str, int &unused) +void *FixGroup::extract(const char *str, int &/*unused*/) { if (strcmp(str,"property") == 0 && propflag) return (void *) idprop; if (strcmp(str,"variable") == 0 && varflag) return (void *) idvar; diff --git a/src/fix_halt.cpp b/src/fix_halt.cpp index 7de09a0fa4b9add400543a97a62f2f8a73ad2f74..983f993ae8b617afab02823f2768a3dbb087a3eb 100644 --- a/src/fix_halt.cpp +++ b/src/fix_halt.cpp @@ -184,7 +184,7 @@ void FixHalt::end_of_step() // print message with ID of fix halt in case multiple instances char str[128]; - sprintf(str,"Fix halt %s condition met on step %ld with value %g", + sprintf(str,"Fix halt %s condition met on step " BIGINT_FORMAT " with value %g", id,update->ntimestep,attvalue); if (eflag == HARD) { diff --git a/src/fix_indent.cpp b/src/fix_indent.cpp index ade8cee5328d711ddbfd6ccb4088fe49120f7b88..b8e07dfd53f358cdf1f305ab3a16864e0ed8c8f5 100644 --- a/src/fix_indent.cpp +++ b/src/fix_indent.cpp @@ -182,7 +182,7 @@ void FixIndent::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixIndent::post_force(int vflag) +void FixIndent::post_force(int /*vflag*/) { // indenter values, 0 = energy, 1-3 = force components // wrap variable evaluations with clear/add @@ -357,7 +357,7 @@ void FixIndent::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixIndent::post_force_respa(int vflag, int ilevel, int iloop) +void FixIndent::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index e4c36cc73917fe0f7d6b8b7ad094741d94cb1f8d..d829982274e9431c30368c5362e228b954ec9b8d 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -298,7 +298,7 @@ void FixLangevin::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixLangevin::post_force(int vflag) +void FixLangevin::post_force(int /*vflag*/) { double *rmass = atom->rmass; @@ -441,7 +441,7 @@ void FixLangevin::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixLangevin::post_force_respa(int vflag, int ilevel, int iloop) +void FixLangevin::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_force(vflag); } @@ -896,7 +896,7 @@ void FixLangevin::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixLangevin::copy_arrays(int i, int j, int delflag) +void FixLangevin::copy_arrays(int i, int j, int /*delflag*/) { for (int m = 0; m < nvalues; m++) franprev[j][m] = franprev[i][m]; diff --git a/src/fix_lineforce.cpp b/src/fix_lineforce.cpp index e90152c4e1092ef95b94df1371f6131f94e8d979..aea1a2a25bc3c4b54ca6428ed17dec3baca36a49 100644 --- a/src/fix_lineforce.cpp +++ b/src/fix_lineforce.cpp @@ -80,7 +80,7 @@ void FixLineForce::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixLineForce::post_force(int vflag) +void FixLineForce::post_force(int /*vflag*/) { double **f = atom->f; int *mask = atom->mask; @@ -98,7 +98,7 @@ void FixLineForce::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixLineForce::post_force_respa(int vflag, int ilevel, int iloop) +void FixLineForce::post_force_respa(int vflag, int /*ilevel*/, int /*iloop*/) { post_force(vflag); } diff --git a/src/fix_minimize.cpp b/src/fix_minimize.cpp index 06a3ac900d7cd28209682056d923b6889ecc37d2..fa39643a1bc9beba894349396b1e325ec59a208d 100644 --- a/src/fix_minimize.cpp +++ b/src/fix_minimize.cpp @@ -184,7 +184,7 @@ void FixMinimize::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixMinimize::copy_arrays(int i, int j, int delflag) +void FixMinimize::copy_arrays(int i, int j, int /*delflag*/) { int m,iper,nper,ni,nj; diff --git a/src/fix_move.cpp b/src/fix_move.cpp index 9eadfa5ab4c7c9b2a41102e9997f90178633d9bc..2f9fb0ebaa596bdbc37553f6e2f2344c49e6f515 100644 --- a/src/fix_move.cpp +++ b/src/fix_move.cpp @@ -453,7 +453,7 @@ void FixMove::init() set x,v of particles ------------------------------------------------------------------------- */ -void FixMove::initial_integrate(int vflag) +void FixMove::initial_integrate(int /*vflag*/) { int flag; double ddotr,dx,dy,dz; @@ -945,7 +945,7 @@ void FixMove::final_integrate() /* ---------------------------------------------------------------------- */ -void FixMove::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixMove::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) { // outermost level - update v and x // all other levels - nothing @@ -955,7 +955,7 @@ void FixMove::initial_integrate_respa(int vflag, int ilevel, int iloop) /* ---------------------------------------------------------------------- */ -void FixMove::final_integrate_respa(int ilevel, int iloop) +void FixMove::final_integrate_respa(int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) final_integrate(); } @@ -1019,7 +1019,7 @@ void FixMove::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixMove::copy_arrays(int i, int j, int delflag) +void FixMove::copy_arrays(int i, int j, int /*delflag*/) { xoriginal[j][0] = xoriginal[i][0]; xoriginal[j][1] = xoriginal[i][1]; @@ -1238,7 +1238,7 @@ int FixMove::maxsize_restart() size of atom nlocal's restart data ------------------------------------------------------------------------- */ -int FixMove::size_restart(int nlocal) +int FixMove::size_restart(int /*nlocal*/) { return nrestart; } diff --git a/src/fix_neigh_history.cpp b/src/fix_neigh_history.cpp index 90b77821e68cb47e06c9cafb8fc4eeed97f6d56e..c21b494aa41d0d515535afe9c64e7ef9c37f4273 100644 --- a/src/fix_neigh_history.cpp +++ b/src/fix_neigh_history.cpp @@ -35,7 +35,7 @@ enum{DEFAULT,NPARTNER,PERPARTNER}; // also set in fix neigh/history/omp FixNeighHistory::FixNeighHistory(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), - npartner(NULL), partner(NULL), valuepartner(NULL), pair(NULL), + pair(NULL), npartner(NULL), partner(NULL), valuepartner(NULL), ipage_atom(NULL), dpage_atom(NULL), ipage_neigh(NULL), dpage_neigh(NULL) { if (narg != 4) error->all(FLERR,"Illegal fix NEIGH_HISTORY command"); @@ -688,7 +688,7 @@ void FixNeighHistory::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixNeighHistory::copy_arrays(int i, int j, int delflag) +void FixNeighHistory::copy_arrays(int i, int j, int /*delflag*/) { // just copy pointers for partner and valuepartner // b/c can't overwrite chunk allocation inside ipage_atom,dpage_atom diff --git a/src/fix_nh.cpp b/src/fix_nh.cpp index 73c70420c5bc84e001d448a5d580b1fe10ce9ece..a1a562f2bb078602875e8b8581891e891c9736d3 100644 --- a/src/fix_nh.cpp +++ b/src/fix_nh.cpp @@ -742,7 +742,7 @@ void FixNH::init() compute T,P before integrator starts ------------------------------------------------------------------------- */ -void FixNH::setup(int vflag) +void FixNH::setup(int /*vflag*/) { // tdof needed by compute_temp_target() @@ -827,7 +827,7 @@ void FixNH::setup(int vflag) 1st half of Verlet update ------------------------------------------------------------------------- */ -void FixNH::initial_integrate(int vflag) +void FixNH::initial_integrate(int /*vflag*/) { // update eta_press_dot @@ -922,7 +922,7 @@ void FixNH::final_integrate() /* ---------------------------------------------------------------------- */ -void FixNH::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixNH::initial_integrate_respa(int /*vflag*/, int ilevel, int /*iloop*/) { // set timesteps by level @@ -991,7 +991,7 @@ void FixNH::initial_integrate_respa(int vflag, int ilevel, int iloop) /* ---------------------------------------------------------------------- */ -void FixNH::final_integrate_respa(int ilevel, int iloop) +void FixNH::final_integrate_respa(int ilevel, int /*iloop*/) { // set timesteps by level diff --git a/src/fix_nve.cpp b/src/fix_nve.cpp index 58e33b9744b7c84eac6ca72b6d05ae7b502b571d..959483230e5753b43c802c0755605e4789803c85 100644 --- a/src/fix_nve.cpp +++ b/src/fix_nve.cpp @@ -62,7 +62,7 @@ void FixNVE::init() allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixNVE::initial_integrate(int vflag) +void FixNVE::initial_integrate(int /*vflag*/) { double dtfm; @@ -143,7 +143,7 @@ void FixNVE::final_integrate() /* ---------------------------------------------------------------------- */ -void FixNVE::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixNVE::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) { dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel] * force->ftm2v; @@ -157,7 +157,7 @@ void FixNVE::initial_integrate_respa(int vflag, int ilevel, int iloop) /* ---------------------------------------------------------------------- */ -void FixNVE::final_integrate_respa(int ilevel, int iloop) +void FixNVE::final_integrate_respa(int ilevel, int /*iloop*/) { dtf = 0.5 * step_respa[ilevel] * force->ftm2v; final_integrate(); diff --git a/src/fix_nve_limit.cpp b/src/fix_nve_limit.cpp index f659597af7aeeb0d35081ed02aa43736d58fe8a1..b4fb43e56fc5b95aea196875028d905208877041 100644 --- a/src/fix_nve_limit.cpp +++ b/src/fix_nve_limit.cpp @@ -83,7 +83,7 @@ void FixNVELimit::init() allow for both per-type and per-atom mass ------------------------------------------------------------------------- */ -void FixNVELimit::initial_integrate(int vflag) +void FixNVELimit::initial_integrate(int /*vflag*/) { double dtfm,vsq,scale; @@ -202,7 +202,7 @@ void FixNVELimit::final_integrate() /* ---------------------------------------------------------------------- */ -void FixNVELimit::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixNVELimit::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) { dtv = step_respa[ilevel]; dtf = 0.5 * step_respa[ilevel] * force->ftm2v; @@ -213,7 +213,7 @@ void FixNVELimit::initial_integrate_respa(int vflag, int ilevel, int iloop) /* ---------------------------------------------------------------------- */ -void FixNVELimit::final_integrate_respa(int ilevel, int iloop) +void FixNVELimit::final_integrate_respa(int ilevel, int /*iloop*/) { dtf = 0.5 * step_respa[ilevel] * force->ftm2v; final_integrate(); diff --git a/src/fix_nve_noforce.cpp b/src/fix_nve_noforce.cpp index 3403f4f5ec6b7f2eb7b71229159c18f3136b252e..d4fca9e6760444e23db32386a7d181e08e742e3f 100644 --- a/src/fix_nve_noforce.cpp +++ b/src/fix_nve_noforce.cpp @@ -54,7 +54,7 @@ void FixNVENoforce::init() /* ---------------------------------------------------------------------- */ -void FixNVENoforce::initial_integrate(int vflag) +void FixNVENoforce::initial_integrate(int /*vflag*/) { double **x = atom->x; double **v = atom->v; diff --git a/src/fix_nve_sphere.cpp b/src/fix_nve_sphere.cpp index fe37324cfbac2164ea0bd04940df8145f12f7e7f..0bee8b868538ccf11f9c92e556e38dd009ad3c06 100644 --- a/src/fix_nve_sphere.cpp +++ b/src/fix_nve_sphere.cpp @@ -97,7 +97,7 @@ void FixNVESphere::init() /* ---------------------------------------------------------------------- */ -void FixNVESphere::initial_integrate(int vflag) +void FixNVESphere::initial_integrate(int /*vflag*/) { double dtfm,dtirotate,msq,scale,s2,inv_len_mu; double g[3]; diff --git a/src/fix_planeforce.cpp b/src/fix_planeforce.cpp index f90be6a233a330a9687ce56b7864d2bdda6128e6..45dc782fcf086da5fd4bf8c586a04f7ec383d58f 100644 --- a/src/fix_planeforce.cpp +++ b/src/fix_planeforce.cpp @@ -80,7 +80,7 @@ void FixPlaneForce::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixPlaneForce::post_force(int vflag) +void FixPlaneForce::post_force(int /*vflag*/) { double **f = atom->f; int *mask = atom->mask; @@ -98,7 +98,7 @@ void FixPlaneForce::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixPlaneForce::post_force_respa(int vflag, int ilevel, int iloop) +void FixPlaneForce::post_force_respa(int vflag, int /*ilevel*/, int /*iloop*/) { post_force(vflag); } diff --git a/src/fix_press_berendsen.cpp b/src/fix_press_berendsen.cpp index 792154e93fe6dc222d1e9902019297731f48a486..95db004436a512a5d00f5a8aa506202d53084907 100644 --- a/src/fix_press_berendsen.cpp +++ b/src/fix_press_berendsen.cpp @@ -334,7 +334,7 @@ void FixPressBerendsen::init() compute T,P before integrator starts ------------------------------------------------------------------------- */ -void FixPressBerendsen::setup(int vflag) +void FixPressBerendsen::setup(int /*vflag*/) { // trigger virial computation on next timestep diff --git a/src/fix_print.cpp b/src/fix_print.cpp index 16218e0088e7ab0d04c560bbb975bdace7d41ebd..969fcf8140b2f25eefaba582940ce822ec720fc8 100644 --- a/src/fix_print.cpp +++ b/src/fix_print.cpp @@ -60,7 +60,7 @@ FixPrint::FixPrint(LAMMPS *lmp, int narg, char **arg) : else fp = fopen(arg[iarg+1],"a"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix print file %s",arg[iarg+1]); + snprintf(str,128,"Cannot open fix print file %s",arg[iarg+1]); error->one(FLERR,str); } } diff --git a/src/fix_property_atom.cpp b/src/fix_property_atom.cpp index 5ad4dfa4ba1bf2a3d4cee54695d80d28aa98bc71..c89419f85014de0b089c2823b0b0730abf8d5fa9 100644 --- a/src/fix_property_atom.cpp +++ b/src/fix_property_atom.cpp @@ -224,7 +224,7 @@ void FixPropertyAtom::read_data_section(char *keyword, int n, char *buf, if (nwords != nvalue+1) { char str[128]; - sprintf(str,"Incorrect %s format in data file",keyword); + snprintf(str,128,"Incorrect %s format in data file",keyword); error->all(FLERR,str); } @@ -242,7 +242,7 @@ void FixPropertyAtom::read_data_section(char *keyword, int n, char *buf, values[0] = strtok(buf," \t\n\r\f"); if (values[0] == NULL) { char str[128]; - sprintf(str,"Too few lines in %s section of data file",keyword); + snprintf(str,128,"Too few lines in %s section of data file",keyword); error->one(FLERR,str); } int format_ok = 1; @@ -252,14 +252,14 @@ void FixPropertyAtom::read_data_section(char *keyword, int n, char *buf, } if (!format_ok) { char str[128]; - sprintf(str,"Incorrect %s format in data file",keyword); + snprintf(str,128,"Incorrect %s format in data file",keyword); error->all(FLERR,str); } itag = ATOTAGINT(values[0]) + id_offset; if (itag <= 0 || itag > map_tag_max) { char str[128]; - sprintf(str,"Invalid atom ID in %s section of data file",keyword); + snprintf(str,128,"Invalid atom ID in %s section of data file",keyword); error->one(FLERR,str); } @@ -292,7 +292,7 @@ void FixPropertyAtom::read_data_section(char *keyword, int n, char *buf, return # of lines in section of data file labeled by keyword ------------------------------------------------------------------------- */ -bigint FixPropertyAtom::read_data_skip_lines(char *keyword) +bigint FixPropertyAtom::read_data_skip_lines(char * /*keyword*/) { return atom->natoms; } @@ -304,7 +304,7 @@ bigint FixPropertyAtom::read_data_skip_lines(char *keyword) ny = columns = tag + nvalues ------------------------------------------------------------------------- */ -void FixPropertyAtom::write_data_section_size(int mth, int &nx, int &ny) +void FixPropertyAtom::write_data_section_size(int /*mth*/, int &nx, int &ny) { nx = atom->nlocal; ny = nvalue + 1; @@ -315,7 +315,7 @@ void FixPropertyAtom::write_data_section_size(int mth, int &nx, int &ny) buf allocated by caller as Nlocal by Nvalues+1 ------------------------------------------------------------------------- */ -void FixPropertyAtom::write_data_section_pack(int mth, double **buf) +void FixPropertyAtom::write_data_section_pack(int /*mth*/, double **buf) { int i; @@ -354,7 +354,7 @@ void FixPropertyAtom::write_data_section_pack(int mth, double **buf) only called by proc 0 ------------------------------------------------------------------------- */ -void FixPropertyAtom::write_data_section_keyword(int mth, FILE *fp) +void FixPropertyAtom::write_data_section_keyword(int /*mth*/, FILE *fp) { if (nvalue == 1 && style[0] == MOLECULE) fprintf(fp,"\nMolecules\n\n"); else if (nvalue == 1 && style[0] == CHARGE) fprintf(fp,"\nCharges\n\n"); @@ -368,8 +368,8 @@ void FixPropertyAtom::write_data_section_keyword(int mth, FILE *fp) only called by proc 0 ------------------------------------------------------------------------- */ -void FixPropertyAtom::write_data_section(int mth, FILE *fp, - int n, double **buf, int index) +void FixPropertyAtom::write_data_section(int /*mth*/, FILE *fp, + int n, double **buf, int /*index*/) { int m; @@ -443,7 +443,7 @@ void FixPropertyAtom::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixPropertyAtom::copy_arrays(int i, int j, int delflag) +void FixPropertyAtom::copy_arrays(int i, int j, int /*delflag*/) { for (int m = 0; m < nvalue; m++) { if (style[m] == MOLECULE) @@ -644,7 +644,7 @@ int FixPropertyAtom::maxsize_restart() size of atom nlocal's restart data ------------------------------------------------------------------------- */ -int FixPropertyAtom::size_restart(int nlocal) +int FixPropertyAtom::size_restart(int /*nlocal*/) { return nvalue+1; } diff --git a/src/fix_read_restart.cpp b/src/fix_read_restart.cpp index b384234b99973c51aa8c8a8ce765e99257bc5b0d..3c3178f4af3e6d05866eea3e1ce3d81108100618 100644 --- a/src/fix_read_restart.cpp +++ b/src/fix_read_restart.cpp @@ -96,7 +96,7 @@ void FixReadRestart::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixReadRestart::copy_arrays(int i, int j, int delflag) +void FixReadRestart::copy_arrays(int i, int j, int /*delflag*/) { count[j] = count[i]; for (int m = 0; m < count[i]; m++) extra[j][m] = extra[i][m]; diff --git a/src/fix_recenter.cpp b/src/fix_recenter.cpp index 49e370ac806ead4df1a1845dacdd1341503d9630..75b383d67a2f46ef99e7d721c70964c9d47b654b 100644 --- a/src/fix_recenter.cpp +++ b/src/fix_recenter.cpp @@ -149,7 +149,7 @@ void FixRecenter::init() /* ---------------------------------------------------------------------- */ -void FixRecenter::initial_integrate(int vflag) +void FixRecenter::initial_integrate(int /*vflag*/) { // target COM // bounding box around domain works for both orthogonal and triclinic @@ -211,7 +211,7 @@ void FixRecenter::initial_integrate(int vflag) /* ---------------------------------------------------------------------- */ -void FixRecenter::initial_integrate_respa(int vflag, int ilevel, int iloop) +void FixRecenter::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) { // outermost level - operate recenter // all other levels - nothing diff --git a/src/fix_respa.cpp b/src/fix_respa.cpp index 3b9aad1286c4e62dbab97e505cdd3afcd7ab6cee..64461ba7ca2044277ab86fc5ccc83a7fbcbf2f6a 100644 --- a/src/fix_respa.cpp +++ b/src/fix_respa.cpp @@ -93,7 +93,7 @@ void FixRespa::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixRespa::copy_arrays(int i, int j, int delflag) +void FixRespa::copy_arrays(int i, int j, int /*delflag*/) { for (int k = 0; k < nlevels; k++) { f_level[j][k][0] = f_level[i][k][0]; diff --git a/src/fix_restrain.cpp b/src/fix_restrain.cpp index 6ad229fea7e70e16099b90cf9aee1e7b615e0ed3..bb09116374d0f03572f9b5f2da5ddc2588af435f 100644 --- a/src/fix_restrain.cpp +++ b/src/fix_restrain.cpp @@ -188,7 +188,7 @@ void FixRestrain::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixRestrain::post_force(int vflag) +void FixRestrain::post_force(int /*vflag*/) { energy = 0.0; @@ -204,7 +204,7 @@ void FixRestrain::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixRestrain::post_force_respa(int vflag, int ilevel, int iloop) +void FixRestrain::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/fix_setforce.cpp b/src/fix_setforce.cpp index 89b340b0ae422558e666f81190bb3c4055abf69c..fc8b7aeb59862fb78860b507f31f9477fa3888a0 100644 --- a/src/fix_setforce.cpp +++ b/src/fix_setforce.cpp @@ -219,7 +219,7 @@ void FixSetForce::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixSetForce::post_force(int vflag) +void FixSetForce::post_force(int /*vflag*/) { double **x = atom->x; double **f = atom->f; @@ -293,7 +293,7 @@ void FixSetForce::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixSetForce::post_force_respa(int vflag, int ilevel, int iloop) +void FixSetForce::post_force_respa(int vflag, int ilevel, int /*iloop*/) { // set force to desired value on requested level, 0.0 on other levels diff --git a/src/fix_spring.cpp b/src/fix_spring.cpp index ecb84eeb0f0ead6b4aec161ae43b8a38d6e8fc89..328a0eeafda12cf3f71efffb8d8168b6e27fe9ae 100644 --- a/src/fix_spring.cpp +++ b/src/fix_spring.cpp @@ -159,7 +159,7 @@ void FixSpring::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixSpring::post_force(int vflag) +void FixSpring::post_force(int /*vflag*/) { if (styleflag == TETHER) spring_tether(); else spring_couple(); @@ -335,7 +335,7 @@ void FixSpring::spring_couple() /* ---------------------------------------------------------------------- */ -void FixSpring::post_force_respa(int vflag, int ilevel, int iloop) +void FixSpring::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/fix_spring_chunk.cpp b/src/fix_spring_chunk.cpp index 53e9285a9c7ddd4869bb760c8b5cc60be790b073..5b5d95b111b5d7eb8eb8b3049217be5272be3d3a 100644 --- a/src/fix_spring_chunk.cpp +++ b/src/fix_spring_chunk.cpp @@ -144,7 +144,7 @@ void FixSpringChunk::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixSpringChunk::post_force(int vflag) +void FixSpringChunk::post_force(int /*vflag*/) { int i,m; double dx,dy,dz,r; @@ -231,7 +231,7 @@ void FixSpringChunk::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixSpringChunk::post_force_respa(int vflag, int ilevel, int iloop) +void FixSpringChunk::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/fix_spring_rg.cpp b/src/fix_spring_rg.cpp index c2e226a343dc657b5661f24b6991d390cac4f1ff..28c89690061eb2c92c3a6b587e9833f052b0be3f 100644 --- a/src/fix_spring_rg.cpp +++ b/src/fix_spring_rg.cpp @@ -95,7 +95,7 @@ void FixSpringRG::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixSpringRG::post_force(int vflag) +void FixSpringRG::post_force(int /*vflag*/) { // compute current Rg and center-of-mass @@ -142,7 +142,7 @@ void FixSpringRG::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixSpringRG::post_force_respa(int vflag, int ilevel, int iloop) +void FixSpringRG::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/fix_spring_self.cpp b/src/fix_spring_self.cpp index 1a5c89c6a15b43832f190d7f73dcfeaef3cf6383..670883af41b3bc29f865789e0d57a0b7decc5de2 100644 --- a/src/fix_spring_self.cpp +++ b/src/fix_spring_self.cpp @@ -148,7 +148,7 @@ void FixSpringSelf::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixSpringSelf::post_force(int vflag) +void FixSpringSelf::post_force(int /*vflag*/) { double **x = atom->x; double **f = atom->f; @@ -181,7 +181,7 @@ void FixSpringSelf::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixSpringSelf::post_force_respa(int vflag, int ilevel, int iloop) +void FixSpringSelf::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } @@ -227,7 +227,7 @@ void FixSpringSelf::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixSpringSelf::copy_arrays(int i, int j, int delflag) +void FixSpringSelf::copy_arrays(int i, int j, int /*delflag*/) { xoriginal[j][0] = xoriginal[i][0]; xoriginal[j][1] = xoriginal[i][1]; @@ -303,7 +303,7 @@ int FixSpringSelf::maxsize_restart() size of atom nlocal's restart data ------------------------------------------------------------------------- */ -int FixSpringSelf::size_restart(int nlocal) +int FixSpringSelf::size_restart(int /*nlocal*/) { return 4; } diff --git a/src/fix_store.cpp b/src/fix_store.cpp index 350e12097270c1e64f80313af5665ca60e719963..9db65d0987be99c813071c5a827ec8361e98fba8 100644 --- a/src/fix_store.cpp +++ b/src/fix_store.cpp @@ -229,7 +229,7 @@ void FixStore::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixStore::copy_arrays(int i, int j, int delflag) +void FixStore::copy_arrays(int i, int j, int /*delflag*/) { if (disable) return; @@ -324,7 +324,7 @@ int FixStore::maxsize_restart() size of atom nlocal's restart data ------------------------------------------------------------------------- */ -int FixStore::size_restart(int nlocal) +int FixStore::size_restart(int /*nlocal*/) { if (disable) return 1; return nvalues+1; diff --git a/src/fix_store_force.cpp b/src/fix_store_force.cpp index 5e2150f68d004cdd6a82d0f416ddbd00311520d7..a841714098e1f808217afcf13d7335a7a4fd3199 100644 --- a/src/fix_store_force.cpp +++ b/src/fix_store_force.cpp @@ -95,7 +95,7 @@ void FixStoreForce::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixStoreForce::post_force(int vflag) +void FixStoreForce::post_force(int /*vflag*/) { if (atom->nmax > nmax) { nmax = atom->nmax; @@ -118,7 +118,7 @@ void FixStoreForce::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixStoreForce::post_force_respa(int vflag, int ilevel, int iloop) +void FixStoreForce::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == nlevels_respa-1) post_force(vflag); } diff --git a/src/fix_store_state.cpp b/src/fix_store_state.cpp index 3195e983e35019adb4c627f20a62bffa18dae2e3..da899a173cc22fe837d9e177064b343159d901a5 100644 --- a/src/fix_store_state.cpp +++ b/src/fix_store_state.cpp @@ -446,7 +446,7 @@ void FixStoreState::init() /* ---------------------------------------------------------------------- */ -void FixStoreState::setup(int vflag) +void FixStoreState::setup(int /*vflag*/) { // if first invocation, store current values for compute, fix, variable @@ -580,7 +580,7 @@ void FixStoreState::grow_arrays(int nmax) copy values within local atom-based array ------------------------------------------------------------------------- */ -void FixStoreState::copy_arrays(int i, int j, int delflag) +void FixStoreState::copy_arrays(int i, int j, int /*delflag*/) { for (int m = 0; m < nvalues; m++) values[j][m] = values[i][m]; } @@ -646,7 +646,7 @@ int FixStoreState::maxsize_restart() size of atom nlocal's restart data ------------------------------------------------------------------------- */ -int FixStoreState::size_restart(int nlocal) +int FixStoreState::size_restart(int /*nlocal*/) { return nvalues+1; } diff --git a/src/fix_tmd.cpp b/src/fix_tmd.cpp index 39d4173a63a058a40030512287d7441123266d63..4cbb244bc01b5a38ca11828f81081bfa47e7fcea 100644 --- a/src/fix_tmd.cpp +++ b/src/fix_tmd.cpp @@ -75,7 +75,7 @@ nfileevery(0), fp(NULL), xf(NULL), xold(NULL) fp = fopen(arg[6],"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open fix tmd file %s",arg[6]); + snprintf(str,128,"Cannot open fix tmd file %s",arg[6]); error->one(FLERR,str); } fprintf(fp,"%s %s\n","# Step rho_target rho_old gamma_back", @@ -170,7 +170,7 @@ void FixTMD::init() /* ---------------------------------------------------------------------- */ -void FixTMD::initial_integrate(int vflag) +void FixTMD::initial_integrate(int /*vflag*/) { double a,b,c,d,e; double dx,dy,dz,dxkt,dykt,dzkt; @@ -335,7 +335,7 @@ void FixTMD::grow_arrays(int nmax) copy values within local atom-based arrays ------------------------------------------------------------------------- */ -void FixTMD::copy_arrays(int i, int j, int delflag) +void FixTMD::copy_arrays(int i, int j, int /*delflag*/) { xf[j][0] = xf[i][0]; xf[j][1] = xf[i][1]; @@ -412,7 +412,7 @@ void FixTMD::readfile(char *file) m++; } - MPI_Bcast(&eof,sizeof(char *)/sizeof(char),MPI_CHAR,0,world); + MPI_Bcast(&eof,sizeof(char *),MPI_CHAR,0,world); MPI_Bcast(&nlines,1,MPI_INT,0,world); MPI_Bcast(&m,1,MPI_INT,0,world); MPI_Bcast(buffer,m,MPI_CHAR,0,world); @@ -523,7 +523,7 @@ void FixTMD::open(char *file) else { #ifdef LAMMPS_GZIP char gunzip[128]; - sprintf(gunzip,"gzip -c -d %s",file); + snprintf(gunzip,128,"gzip -c -d %s",file); #ifdef _WIN32 fp = _popen(gunzip,"rb"); @@ -538,7 +538,7 @@ void FixTMD::open(char *file) if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",file); + snprintf(str,128,"Cannot open file %s",file); error->one(FLERR,str); } } diff --git a/src/fix_vector.cpp b/src/fix_vector.cpp index 9b7f01697084ce3e705dc1920de8b11f0b024a62..6387af767606cac35b701410c5a4cbf8fabdf50d 100644 --- a/src/fix_vector.cpp +++ b/src/fix_vector.cpp @@ -239,7 +239,7 @@ void FixVector::init() only does something if nvalid = current timestep ------------------------------------------------------------------------- */ -void FixVector::setup(int vflag) +void FixVector::setup(int /*vflag*/) { end_of_step(); } diff --git a/src/fix_viscous.cpp b/src/fix_viscous.cpp index 1d2609c8b68ff782ba1e41c7798f4e944a6ed646..e8451423227decc258780ff3b65a76a66e11f9eb 100644 --- a/src/fix_viscous.cpp +++ b/src/fix_viscous.cpp @@ -109,7 +109,7 @@ void FixViscous::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixViscous::post_force(int vflag) +void FixViscous::post_force(int /*vflag*/) { // apply drag force to atoms in group // direction is opposed to velocity vector @@ -134,7 +134,7 @@ void FixViscous::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixViscous::post_force_respa(int vflag, int ilevel, int iloop) +void FixViscous::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/fix_wall.cpp b/src/fix_wall.cpp index 096bbe618a5a9b3fa234292807912f32642d210c..e84d01191d43bc800b115e89cfb2ae9636461635 100644 --- a/src/fix_wall.cpp +++ b/src/fix_wall.cpp @@ -343,7 +343,7 @@ void FixWall::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixWall::post_force_respa(int vflag, int ilevel, int iloop) +void FixWall::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/fix_wall_region.cpp b/src/fix_wall_region.cpp index ea1b62bfa5e160688cd7913e9cad106e5db60535..ff147d74463827b410f6c7bb9b92a90eb83bc93d 100644 --- a/src/fix_wall_region.cpp +++ b/src/fix_wall_region.cpp @@ -287,7 +287,7 @@ void FixWallRegion::post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixWallRegion::post_force_respa(int vflag, int ilevel, int iloop) +void FixWallRegion::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); } diff --git a/src/force.cpp b/src/force.cpp index 8ee301982d168c6f5c8389bee86d3d2404bcf903..91fccd71978662e8e2ea7801a0e9831acb522214 100644 --- a/src/force.cpp +++ b/src/force.cpp @@ -182,8 +182,8 @@ void Force::init() if (pair_restart) { if (!pair) { char msg[128]; - sprintf(msg,"Must re-specify non-restarted pair style (%s) " - "after read_restart", pair_restart); + snprintf(msg,128,"Must re-specify non-restarted pair style (%s) " + "after read_restart", pair_restart); error->all(FLERR,msg); } } diff --git a/src/group.cpp b/src/group.cpp index dd5e53bb3c58234655c8fcf76c171dc84cf386b1..3bc3f3d7bf9e7c47275a50b53bf31f07b4da7174 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -629,7 +629,7 @@ int Group::find_unused() do not include molID = 0 ------------------------------------------------------------------------- */ -void Group::add_molecules(int igroup, int bit) +void Group::add_molecules(int /*igroup*/, int bit) { // hash = unique molecule IDs of atoms already in group diff --git a/src/image.cpp b/src/image.cpp index 301a2af88f23588dfcdea129fe2c283ae6269cb0..3df167bbf60b519184a128d9bceb0ba258ab0a72 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -1017,6 +1017,8 @@ void Image::write_JPG(FILE *fp) jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); +#else + LMP_UNUSED_PARAM(fp); #endif } @@ -1074,6 +1076,8 @@ void Image::write_PNG(FILE *fp) png_destroy_write_struct(&png_ptr, &info_ptr); delete[] row_pointers; +#else + LMP_UNUSED_PARAM(fp); #endif } diff --git a/src/imbalance_var.cpp b/src/imbalance_var.cpp index acb3da8d1370ed6215549effa3a340abd492f82c..e089b1df0ce3e522dbd518b128cd1a867e429668 100644 --- a/src/imbalance_var.cpp +++ b/src/imbalance_var.cpp @@ -52,7 +52,7 @@ int ImbalanceVar::options(int narg, char **arg) /* -------------------------------------------------------------------- */ -void ImbalanceVar::init(int flag) +void ImbalanceVar::init(int /*flag*/) { id = input->variable->find(name); if (id < 0) { diff --git a/src/improper_zero.cpp b/src/improper_zero.cpp index 25ab3e7bbafa554104b440245c07dda93a18f924..8a1fa529c6dc1658c5d268d3acc268d2da5b7af7 100644 --- a/src/improper_zero.cpp +++ b/src/improper_zero.cpp @@ -99,13 +99,13 @@ void ImproperZero::coeff(int narg, char **arg) proc 0 writes out coeffs to restart file ------------------------------------------------------------------------- */ -void ImproperZero::write_restart(FILE *fp) {} +void ImproperZero::write_restart(FILE * /*fp*/) {} /* ---------------------------------------------------------------------- proc 0 reads coeffs from restart file, bcasts them ------------------------------------------------------------------------- */ -void ImproperZero::read_restart(FILE *fp) +void ImproperZero::read_restart(FILE * /*fp*/) { allocate(); for (int i = 1; i <= atom->nimpropertypes; i++) setflag[i] = 1; diff --git a/src/info.cpp b/src/info.cpp index 748354e8784aeda7a28d347e896ab3b53d8c56e1..672ce72b74968483a83cdfa3955dd6a0627cba3a 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -44,7 +44,7 @@ #include "error.h" #include -#include +#include #include #include @@ -117,7 +117,8 @@ static const char bstyles[] = "pfsm"; using namespace LAMMPS_NS; using namespace std; -static void print_columns(FILE* fp, vector & styles); +template +static void print_columns(FILE* fp, map * styles); /* ---------------------------------------------------------------------- */ @@ -686,196 +687,98 @@ void Info::available_styles(FILE * out, int flags) void Info::atom_styles(FILE * out) { fprintf(out, "\nAtom styles:\n"); - - vector styles; - - for(Atom::AtomVecCreatorMap::iterator it = atom->avec_map->begin(); it != atom->avec_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, atom->avec_map); fprintf(out, "\n\n\n"); } void Info::integrate_styles(FILE * out) { fprintf(out, "\nIntegrate styles:\n"); - - vector styles; - - for(Update::IntegrateCreatorMap::iterator it = update->integrate_map->begin(); it != update->integrate_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, update->integrate_map); fprintf(out, "\n\n\n"); } void Info::minimize_styles(FILE * out) { fprintf(out, "\nMinimize styles:\n"); - - vector styles; - - for(Update::MinimizeCreatorMap::iterator it = update->minimize_map->begin(); it != update->minimize_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, update->minimize_map); fprintf(out, "\n\n\n"); } void Info::pair_styles(FILE * out) { fprintf(out, "\nPair styles:\n"); - - vector styles; - - for(Force::PairCreatorMap::iterator it = force->pair_map->begin(); it != force->pair_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, force->pair_map); fprintf(out, "\n\n\n"); } void Info::bond_styles(FILE * out) { fprintf(out, "\nBond styles:\n"); - - vector styles; - - for(Force::BondCreatorMap::iterator it = force->bond_map->begin(); it != force->bond_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, force->bond_map); fprintf(out, "\n\n\n"); } void Info::angle_styles(FILE * out) { fprintf(out, "\nAngle styles:\n"); - - vector styles; - - for(Force::AngleCreatorMap::iterator it = force->angle_map->begin(); it != force->angle_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, force->angle_map); fprintf(out, "\n\n\n"); } void Info::dihedral_styles(FILE * out) { fprintf(out, "\nDihedral styles:\n"); - - vector styles; - - for(Force::DihedralCreatorMap::iterator it = force->dihedral_map->begin(); it != force->dihedral_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, force->dihedral_map); fprintf(out, "\n\n\n"); } void Info::improper_styles(FILE * out) { fprintf(out, "\nImproper styles:\n"); - - vector styles; - - for(Force::ImproperCreatorMap::iterator it = force->improper_map->begin(); it != force->improper_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, force->improper_map); fprintf(out, "\n\n\n"); } void Info::kspace_styles(FILE * out) { fprintf(out, "\nKSpace styles:\n"); - - vector styles; - - for(Force::KSpaceCreatorMap::iterator it = force->kspace_map->begin(); it != force->kspace_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, force->kspace_map); fprintf(out, "\n\n\n"); } void Info::fix_styles(FILE * out) { fprintf(out, "\nFix styles:\n"); - - vector styles; - - for(Modify::FixCreatorMap::iterator it = modify->fix_map->begin(); it != modify->fix_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, modify->fix_map); fprintf(out, "\n\n\n"); } void Info::compute_styles(FILE * out) { fprintf(out, "\nCompute styles:\n"); - - vector styles; - - for(Modify::ComputeCreatorMap::iterator it = modify->compute_map->begin(); it != modify->compute_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, modify->compute_map); fprintf(out, "\n\n\n"); } void Info::region_styles(FILE * out) { fprintf(out, "\nRegion styles:\n"); - - vector styles; - - for(Domain::RegionCreatorMap::iterator it = domain->region_map->begin(); it != domain->region_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, domain->region_map); fprintf(out, "\n\n\n"); } void Info::dump_styles(FILE * out) { fprintf(out, "\nDump styles:\n"); - - vector styles; - - for(Output::DumpCreatorMap::iterator it = output->dump_map->begin(); it != output->dump_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, output->dump_map); fprintf(out, "\n\n\n"); } void Info::command_styles(FILE * out) { fprintf(out, "\nCommand styles (add-on input script commands):\n"); - - vector styles; - - for(Input::CommandCreatorMap::iterator it = input->command_map->begin(); it != input->command_map->end(); ++it) { - styles.push_back(it->first); - } - - print_columns(out, styles); + print_columns(out, input->command_map); fprintf(out, "\n\n\n"); } @@ -1110,41 +1013,42 @@ bool Info::is_defined(const char *category, const char *name) return false; } -static void print_columns(FILE* fp, vector & styles) +template +static void print_columns(FILE* fp, map * styles) { - if (styles.size() == 0) { + if (styles->empty()) { fprintf(fp, "\nNone"); return; } - std::sort(styles.begin(), styles.end()); - + // std::map keys are already sorted int pos = 80; - for (int i = 0; i < styles.size(); ++i) { + for(typename map::iterator it = styles->begin(); it != styles->end(); ++it) { + const string & style_name = it->first; // skip "secret" styles - if (isupper(styles[i][0])) continue; + if (isupper(style_name[0])) continue; - int len = styles[i].length(); + int len = style_name.length(); if (pos + len > 80) { fprintf(fp,"\n"); pos = 0; } if (len < 16) { - fprintf(fp,"%-16s",styles[i].c_str()); + fprintf(fp,"%-16s", style_name.c_str()); pos += 16; } else if (len < 32) { - fprintf(fp,"%-32s",styles[i].c_str()); + fprintf(fp,"%-32s", style_name.c_str()); pos += 32; } else if (len < 48) { - fprintf(fp,"%-48s",styles[i].c_str()); + fprintf(fp,"%-48s", style_name.c_str()); pos += 48; } else if (len < 64) { - fprintf(fp,"%-64s",styles[i].c_str()); + fprintf(fp,"%-64s", style_name.c_str()); pos += 64; } else { - fprintf(fp,"%-80s",styles[i].c_str()); + fprintf(fp,"%-80s", style_name.c_str()); pos += 80; } } diff --git a/src/input.cpp b/src/input.cpp index f41c8458eae18e2b3200decaa69b0ff5c8b4fe22..2834e369131585a2b0d903f11250026bb8729419 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -267,7 +267,7 @@ void Input::file(const char *filename) infile = fopen(filename,"r"); if (infile == NULL) { char str[128]; - sprintf(str,"Cannot open input script %s",filename); + snprintf(str,128,"Cannot open input script %s",filename); error->one(FLERR,str); } infiles[0] = infile; @@ -526,7 +526,7 @@ void Input::substitute(char *&str, char *&str2, int &max, int &max2, int flag) *fmtflag='\0'; } - sprintf(immediate,fmtstr,variable->compute_equal(var)); + snprintf(immediate,256,fmtstr,variable->compute_equal(var)); value = immediate; // single character variable name, e.g. $a @@ -541,7 +541,7 @@ void Input::substitute(char *&str, char *&str2, int &max, int &max2, int flag) if (value == NULL) { char str[128]; - sprintf(str,"Substitution for illegal variable %s",var); + snprintf(str,128,"Substitution for illegal variable %s",var); error->one(FLERR,str); } // check if storage in str2 needs to be expanded @@ -1047,7 +1047,7 @@ void Input::include() infile = fopen(arg[0],"r"); if (infile == NULL) { char str[128]; - sprintf(str,"Cannot open input script %s",arg[0]); + snprintf(str,128,"Cannot open input script %s",arg[0]); error->one(FLERR,str); } infiles[nfile++] = infile; @@ -1072,7 +1072,7 @@ void Input::jump() infile = fopen(arg[0],"r"); if (infile == NULL) { char str[128]; - sprintf(str,"Cannot open input script %s",arg[0]); + snprintf(str,128,"Cannot open input script %s",arg[0]); error->one(FLERR,str); } infiles[nfile-1] = infile; @@ -1117,7 +1117,7 @@ void Input::log() if (logfile == NULL) { char str[128]; - sprintf(str,"Cannot open logfile %s",arg[0]); + snprintf(str,128,"Cannot open logfile %s",arg[0]); error->one(FLERR,str); } } @@ -1196,7 +1196,7 @@ void Input::print() else fp = fopen(arg[iarg+1],"a"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open print file %s",arg[iarg+1]); + snprintf(str,128,"Cannot open print file %s",arg[iarg+1]); error->one(FLERR,str); } } diff --git a/src/integrate.cpp b/src/integrate.cpp index 97d28d6d7c2b6bccbc70d6f973017f31d86cc6d4..d6b27e042d2ee7042d10d0af4bf4376423efc054 100644 --- a/src/integrate.cpp +++ b/src/integrate.cpp @@ -24,7 +24,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -Integrate::Integrate(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) +Integrate::Integrate(LAMMPS *lmp, int /*narg*/, char **/*arg*/) : Pointers(lmp) { elist_global = elist_atom = NULL; vlist_global = vlist_atom = NULL; diff --git a/src/kspace.cpp b/src/kspace.cpp index fc8b12288ba0679f17d0cbca31287c24208f142b..b92cd1e9dcf2475cbbbbfa8d8f6512ecd7ef5cad 100644 --- a/src/kspace.cpp +++ b/src/kspace.cpp @@ -30,7 +30,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -KSpace::KSpace(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) +KSpace::KSpace(LAMMPS *lmp, int /*narg*/, char **/*arg*/) : Pointers(lmp) { order_allocated = 0; energy = 0.0; @@ -580,7 +580,11 @@ void KSpace::modify_params(int narg, char **arg) else if (strcmp(arg[iarg+1],"no") == 0) auto_disp_flag = 0; else error->all(FLERR,"Illegal kspace_modify command"); iarg += 2; - } else error->all(FLERR,"Illegal kspace_modify command"); + } else { + int n = modify_param(narg-iarg,&arg[iarg]); + if (n == 0) error->all(FLERR,"Illegal kspace_modify command"); + iarg += n; + } } } diff --git a/src/kspace.h b/src/kspace.h index 28c7bcef2a489a12621ad34c116322ef91ee2d14..c25dc93f4519808730e62c02b521f1f278042c8d 100644 --- a/src/kspace.h +++ b/src/kspace.h @@ -126,6 +126,8 @@ class KSpace : protected Pointers { virtual int timing(int, double &, double &) {return 0;} virtual int timing_1d(int, double &) {return 0;} virtual int timing_3d(int, double &) {return 0;} + + virtual int modify_param(int, char **) {return 0;} virtual double memory_usage() {return 0.0;} /* ---------------------------------------------------------------------- diff --git a/src/lammps.cpp b/src/lammps.cpp index df6519f9f4b899c5c5c26cb13ea93eca601f695d..04d8daa47883de4f63856813a655e784d40517a6 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -47,8 +47,8 @@ #include "accelerator_omp.h" #include "timer.h" #include "python.h" -#include "memory.h" #include "version.h" +#include "memory.h" #include "error.h" #include "lmpinstalledpkgs.h" @@ -73,12 +73,46 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) output = NULL; python = NULL; + clientserver = 0; + cslib = NULL; + cscomm = 0; + screen = NULL; logfile = NULL; infile = NULL; initclock = MPI_Wtime(); + // check if -mpi is first arg + // if so, then 2 apps were launched with one mpirun command + // this means passed communicator (e.g. MPI_COMM_WORLD) is bigger than LAMMPS + // e.g. for client/server coupling with another code + // in the future LAMMPS might leverage this in other ways + // universe communicator needs to shrink to be just LAMMPS + // syntax: -mpi color + // color = integer for this app, different than other app(s) + // do the following: + // perform an MPI_Comm_split() to create a new LAMMPS-only subcomm + // NOTE: this assumes other app(s) does same thing, else will hang! + // re-create universe with subcomm + // store full multi-app comm in cscomm + // cscomm is used by CSLIB package to exchange messages w/ other app + + int iarg = 1; + if (narg-iarg >= 2 && (strcmp(arg[iarg],"-mpi") == 0 || + strcmp(arg[iarg],"-m") == 0)) { + int me,nprocs; + MPI_Comm_rank(communicator,&me); + MPI_Comm_size(communicator,&nprocs); + int color = atoi(arg[iarg+1]); + MPI_Comm subcomm; + MPI_Comm_split(communicator,color,me,&subcomm); + cscomm = communicator; + communicator = subcomm; + delete universe; + universe = new Universe(this,communicator); + } + // parse input switches int inflag = 0; @@ -107,59 +141,30 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) int *pfirst = NULL; int *plast = NULL; - int iarg = 1; + iarg = 1; while (iarg < narg) { - if (strcmp(arg[iarg],"-partition") == 0 || - strcmp(arg[iarg],"-p") == 0) { - universe->existflag = 1; + + if (strcmp(arg[iarg],"-echo") == 0 || + strcmp(arg[iarg],"-e") == 0) { if (iarg+2 > narg) error->universe_all(FLERR,"Invalid command-line argument"); - iarg++; - while (iarg < narg && arg[iarg][0] != '-') { - universe->add_world(arg[iarg]); - iarg++; - } + iarg += 2; + + } else if (strcmp(arg[iarg],"-help") == 0 || + strcmp(arg[iarg],"-h") == 0) { + if (iarg+1 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + helpflag = 1; + citeflag = 0; + iarg += 1; + } else if (strcmp(arg[iarg],"-in") == 0 || strcmp(arg[iarg],"-i") == 0) { if (iarg+2 > narg) error->universe_all(FLERR,"Invalid command-line argument"); inflag = iarg + 1; iarg += 2; - } else if (strcmp(arg[iarg],"-screen") == 0 || - strcmp(arg[iarg],"-sc") == 0) { - if (iarg+2 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - screenflag = iarg + 1; - iarg += 2; - } else if (strcmp(arg[iarg],"-log") == 0 || - strcmp(arg[iarg],"-l") == 0) { - if (iarg+2 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - logflag = iarg + 1; - iarg += 2; - } else if (strcmp(arg[iarg],"-var") == 0 || - strcmp(arg[iarg],"-v") == 0) { - if (iarg+3 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - iarg += 3; - while (iarg < narg && arg[iarg][0] != '-') iarg++; - } else if (strcmp(arg[iarg],"-echo") == 0 || - strcmp(arg[iarg],"-e") == 0) { - if (iarg+2 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - iarg += 2; - } else if (strcmp(arg[iarg],"-pscreen") == 0 || - strcmp(arg[iarg],"-ps") == 0) { - if (iarg+2 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - partscreenflag = iarg + 1; - iarg += 2; - } else if (strcmp(arg[iarg],"-plog") == 0 || - strcmp(arg[iarg],"-pl") == 0) { - if (iarg+2 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - partlogflag = iarg + 1; - iarg += 2; + } else if (strcmp(arg[iarg],"-kokkos") == 0 || strcmp(arg[iarg],"-k") == 0) { if (iarg+2 > narg) @@ -172,6 +177,26 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) kkfirst = iarg; while (iarg < narg && arg[iarg][0] != '-') iarg++; kklast = iarg; + + } else if (strcmp(arg[iarg],"-log") == 0 || + strcmp(arg[iarg],"-l") == 0) { + if (iarg+2 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + logflag = iarg + 1; + iarg += 2; + + } else if (strcmp(arg[iarg],"-mpi") == 0 || + strcmp(arg[iarg],"-m") == 0) { + if (iarg+2 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + if (iarg != 1) error->universe_all(FLERR,"Invalid command-line argument"); + iarg += 2; + + } else if (strcmp(arg[iarg],"-nocite") == 0 || + strcmp(arg[iarg],"-nc") == 0) { + citeflag = 0; + iarg++; + } else if (strcmp(arg[iarg],"-package") == 0 || strcmp(arg[iarg],"-pk") == 0) { if (iarg+2 > narg) @@ -188,31 +213,32 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) else break; } plast[npack++] = iarg; - } else if (strcmp(arg[iarg],"-suffix") == 0 || - strcmp(arg[iarg],"-sf") == 0) { + + } else if (strcmp(arg[iarg],"-partition") == 0 || + strcmp(arg[iarg],"-p") == 0) { + universe->existflag = 1; if (iarg+2 > narg) error->universe_all(FLERR,"Invalid command-line argument"); - delete [] suffix; - delete [] suffix2; - suffix2 = NULL; - suffix_enable = 1; - // hybrid option to set fall-back for suffix2 - if (strcmp(arg[iarg+1],"hybrid") == 0) { - if (iarg+4 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - int n = strlen(arg[iarg+2]) + 1; - suffix = new char[n]; - strcpy(suffix,arg[iarg+2]); - n = strlen(arg[iarg+3]) + 1; - suffix2 = new char[n]; - strcpy(suffix2,arg[iarg+3]); - iarg += 4; - } else { - int n = strlen(arg[iarg+1]) + 1; - suffix = new char[n]; - strcpy(suffix,arg[iarg+1]); - iarg += 2; + iarg++; + while (iarg < narg && arg[iarg][0] != '-') { + universe->add_world(arg[iarg]); + iarg++; } + + } else if (strcmp(arg[iarg],"-plog") == 0 || + strcmp(arg[iarg],"-pl") == 0) { + if (iarg+2 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + partlogflag = iarg + 1; + iarg += 2; + + } else if (strcmp(arg[iarg],"-pscreen") == 0 || + strcmp(arg[iarg],"-ps") == 0) { + if (iarg+2 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + partscreenflag = iarg + 1; + iarg += 2; + } else if (strcmp(arg[iarg],"-reorder") == 0 || strcmp(arg[iarg],"-ro") == 0) { if (iarg+3 > narg) @@ -221,6 +247,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) error->universe_all(FLERR,"Cannot use -reorder after -partition"); universe->reorder(arg[iarg+1],arg[iarg+2]); iarg += 3; + } else if (strcmp(arg[iarg],"-restart") == 0 || strcmp(arg[iarg],"-r") == 0) { if (iarg+3 > narg) @@ -241,17 +268,47 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) wdfirst = iarg; while (iarg < narg && arg[iarg][0] != '-') iarg++; wdlast = iarg; - } else if (strcmp(arg[iarg],"-nocite") == 0 || - strcmp(arg[iarg],"-nc") == 0) { - citeflag = 0; - iarg++; - } else if (strcmp(arg[iarg],"-help") == 0 || - strcmp(arg[iarg],"-h") == 0) { - if (iarg+1 > narg) + + } else if (strcmp(arg[iarg],"-screen") == 0 || + strcmp(arg[iarg],"-sc") == 0) { + if (iarg+2 > narg) error->universe_all(FLERR,"Invalid command-line argument"); - helpflag = 1; - citeflag = 0; - iarg += 1; + screenflag = iarg + 1; + iarg += 2; + + } else if (strcmp(arg[iarg],"-suffix") == 0 || + strcmp(arg[iarg],"-sf") == 0) { + if (iarg+2 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + delete [] suffix; + delete [] suffix2; + suffix2 = NULL; + suffix_enable = 1; + // hybrid option to set fall-back for suffix2 + if (strcmp(arg[iarg+1],"hybrid") == 0) { + if (iarg+4 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + int n = strlen(arg[iarg+2]) + 1; + suffix = new char[n]; + strcpy(suffix,arg[iarg+2]); + n = strlen(arg[iarg+3]) + 1; + suffix2 = new char[n]; + strcpy(suffix2,arg[iarg+3]); + iarg += 4; + } else { + int n = strlen(arg[iarg+1]) + 1; + suffix = new char[n]; + strcpy(suffix,arg[iarg+1]); + iarg += 2; + } + + } else if (strcmp(arg[iarg],"-var") == 0 || + strcmp(arg[iarg],"-v") == 0) { + if (iarg+3 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + iarg += 3; + while (iarg < narg && arg[iarg][0] != '-') iarg++; + } else error->universe_all(FLERR,"Invalid command-line argument"); } @@ -328,7 +385,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) else infile = fopen(arg[inflag],"r"); if (infile == NULL) { char str[128]; - sprintf(str,"Cannot open input script %s",arg[inflag]); + snprintf(str,128,"Cannot open input script %s",arg[inflag]); error->one(FLERR,str); } } @@ -359,7 +416,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) screen = NULL; else { char str[128]; - sprintf(str,"%s.%d",arg[screenflag],universe->iworld); + snprintf(str,128,"%s.%d",arg[screenflag],universe->iworld); screen = fopen(str,"w"); if (screen == NULL) error->one(FLERR,"Cannot open screen file"); } @@ -367,7 +424,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) screen = NULL; else { char str[128]; - sprintf(str,"%s.%d",arg[partscreenflag],universe->iworld); + snprintf(str,128,"%s.%d",arg[partscreenflag],universe->iworld); screen = fopen(str,"w"); if (screen == NULL) error->one(FLERR,"Cannot open screen file"); } else screen = NULL; @@ -383,7 +440,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) logfile = NULL; else { char str[128]; - sprintf(str,"%s.%d",arg[logflag],universe->iworld); + snprintf(str,128,"%s.%d",arg[logflag],universe->iworld); logfile = fopen(str,"w"); if (logfile == NULL) error->one(FLERR,"Cannot open logfile"); } @@ -391,7 +448,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) logfile = NULL; else { char str[128]; - sprintf(str,"%s.%d",arg[partlogflag],universe->iworld); + snprintf(str,128,"%s.%d",arg[partlogflag],universe->iworld); logfile = fopen(str,"w"); if (logfile == NULL) error->one(FLERR,"Cannot open logfile"); } else logfile = NULL; @@ -400,7 +457,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) infile = fopen(arg[inflag],"r"); if (infile == NULL) { char str[128]; - sprintf(str,"Cannot open input script %s",arg[inflag]); + snprintf(str,128,"Cannot open input script %s",arg[inflag]); error->one(FLERR,str); } } else infile = NULL; @@ -522,10 +579,10 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) if (restartflag) { char cmd[128]; - sprintf(cmd,"read_restart %s\n",rfile); + snprintf(cmd,128,"read_restart %s\n",rfile); if (restartremapflag) strcat(cmd," remap\n"); input->one(cmd); - sprintf(cmd,"write_data %s",dfile); + snprintf(cmd,128,"write_data %s",dfile); for (iarg = wdfirst; iarg < wdlast; iarg++) sprintf(&cmd[strlen(cmd)]," %s",arg[iarg]); strcat(cmd," noinit\n"); @@ -595,6 +652,14 @@ LAMMPS::~LAMMPS() delete [] suffix; delete [] suffix2; + // free the MPI comm created by -mpi command-line arg processed in constructor + // it was passed to universe as if original universe world + // may have been split later by partitions, universe will free the splits + // free a copy of uorig here, so check in universe destructor will still work + + MPI_Comm copy = universe->uorig; + if (cscomm) MPI_Comm_free(©); + delete input; delete universe; delete error; @@ -814,6 +879,7 @@ void LAMMPS::help() "-in filename : read input from file, not stdin (-i)\n" "-kokkos on/off ... : turn KOKKOS mode on or off (-k)\n" "-log none/filename : where to send log output (-l)\n" + "-mpicolor color : which exe in a multi-exe mpirun cmd (-m)\n" "-nocite : disable writing log.cite file (-nc)\n" "-package style ... : invoke package command (-pk)\n" "-partition size1 size2 ... : assign partition sizes (-p)\n" diff --git a/src/lammps.h b/src/lammps.h index b2c867347108edee9814906e42185db56a9a21f9..5ccef3026ed068ba2d10c291d629f652d30c3321 100644 --- a/src/lammps.h +++ b/src/lammps.h @@ -51,6 +51,10 @@ class LAMMPS { int num_package; // number of cmdline package commands int cite_enable; // 1 if generating log.cite, 0 if disabled + int clientserver; // 0 = neither, 1 = client, 2 = server + void *cslib; // client/server messaging via CSlib + MPI_Comm cscomm; // MPI comm for client+server in mpi/one mode + class KokkosLMP *kokkos; // KOKKOS accelerator class class AtomKokkos *atomKK; // KOKKOS version of Atom class class MemoryKokkos *memoryKK; // KOKKOS version of Memory class diff --git a/src/library.cpp b/src/library.cpp index 13e07568667d6319bd52b2c9fe6166decf292953..a46689da09a39fd999111a63cef48c7baf6ec839 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -336,7 +336,7 @@ void lammps_free(void *ptr) customize by adding names ------------------------------------------------------------------------- */ -int lammps_extract_setting(void *ptr, char *name) +int lammps_extract_setting(void * /*ptr*/, char *name) { if (strcmp(name,"bigint") == 0) return sizeof(bigint); if (strcmp(name,"tagint") == 0) return sizeof(tagint); @@ -1515,7 +1515,8 @@ void lammps_create_atoms(void *ptr, int n, tagint *id, int *type, if (lmp->atom->natoms != natoms_prev + n) { char str[128]; sprintf(str,"Library warning in lammps_create_atoms, " - "invalid total atoms %ld %ld",lmp->atom->natoms,natoms_prev+n); + "invalid total atoms " BIGINT_FORMAT " " BIGINT_FORMAT, + lmp->atom->natoms,natoms_prev+n); if (lmp->comm->me == 0) lmp->error->warning(FLERR,str); } diff --git a/src/lmptype.h b/src/lmptype.h index 7e359d2abeda05c1b0ec992cb7b113b9be7e67ab..7c3dbc1c3dad802948b6abc189422e811e54d496 100644 --- a/src/lmptype.h +++ b/src/lmptype.h @@ -213,4 +213,8 @@ typedef int bigint; #include "lmpwindows.h" #endif +// suppress unused parameter warning + +#define LMP_UNUSED_PARAM(x) (void)(x) + #endif diff --git a/src/math_extra.cpp b/src/math_extra.cpp index b70986ce914904edc8b3a2cbf41fb3b3e9ade210..0bba2ad40125e7ffa6a65f8fa22552e77bba8371 100644 --- a/src/math_extra.cpp +++ b/src/math_extra.cpp @@ -590,7 +590,7 @@ void inertia_triangle(double *v0, double *v1, double *v2, return symmetric inertia tensor as 6-vector in Voigt notation ------------------------------------------------------------------------- */ -void inertia_triangle(double *idiag, double *quat, double mass, +void inertia_triangle(double *idiag, double *quat, double /*mass*/, double *inertia) { double p[3][3],ptrans[3][3],itemp[3][3],tensor[3][3]; diff --git a/src/memory.cpp b/src/memory.cpp index 429cf75c00ab9975a7859201301c9e963b1bf1e8..7a23a230791c51f078b1195e7867dfb2d91c4739 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -121,6 +121,7 @@ void Memory::sfree(void *ptr) void Memory::fail(const char *name) { char str[128]; - sprintf(str,"Cannot create/grow a vector/array of pointers for %s",name); + snprintf(str,128, + "Cannot create/grow a vector/array of pointers for %s",name); error->one(FLERR,str); } diff --git a/src/memory.h b/src/memory.h index f2faecf6e177587e4aaf9dfc14991c6ef4f94f58..20ea426f909c0aabe619398e44f9b72bbaf40216 100644 --- a/src/memory.h +++ b/src/memory.h @@ -50,7 +50,7 @@ class Memory : protected Pointers { } template - TYPE **create(TYPE **&array, int n, const char *name) + TYPE **create(TYPE **& /*array*/, int /*n*/, const char *name) {fail(name); return NULL;} /* ---------------------------------------------------------------------- @@ -68,7 +68,7 @@ class Memory : protected Pointers { } template - TYPE **grow(TYPE **&array, int n, const char *name) + TYPE **grow(TYPE **& /*array*/, int /*n*/, const char *name) {fail(name); return NULL;} /* ---------------------------------------------------------------------- @@ -96,7 +96,7 @@ class Memory : protected Pointers { } template - TYPE **create1d_offset(TYPE **&array, int nlo, int nhi, const char *name) + TYPE **create1d_offset(TYPE **& /*array*/, int /*nlo*/, int /*nhi*/, const char *name) {fail(name); return NULL;} /* ---------------------------------------------------------------------- @@ -131,7 +131,7 @@ class Memory : protected Pointers { } template - TYPE ***create(TYPE ***&array, int n1, int n2, const char *name) + TYPE ***create(TYPE ***& /*array*/, int /*n1*/, int /*n2*/, const char *name) {fail(name); return NULL;} /* ---------------------------------------------------------------------- @@ -158,7 +158,7 @@ class Memory : protected Pointers { } template - TYPE ***grow(TYPE ***&array, int n1, int n2, const char *name) + TYPE ***grow(TYPE ***& /*array*/, int /*n1*/, int /*n2*/, const char *name) {fail(name); return NULL;} /* ---------------------------------------------------------------------- @@ -198,7 +198,7 @@ class Memory : protected Pointers { } template - TYPE ***create_ragged(TYPE ***&array, int n1, int *n2, const char *name) + TYPE ***create_ragged(TYPE ***& /*array*/, int /*n1*/, int * /*n2*/, const char *name) {fail(name); return NULL;} /* ---------------------------------------------------------------------- @@ -217,7 +217,7 @@ class Memory : protected Pointers { } template - TYPE ***create2d_offset(TYPE ***&array, int n1, int n2lo, int n2hi, + TYPE ***create2d_offset(TYPE ***& /*array*/, int /*n1*/, int /*n2lo*/, int /*n2hi*/, const char *name) {fail(name); return NULL;} /* ---------------------------------------------------------------------- @@ -262,7 +262,7 @@ class Memory : protected Pointers { } template - TYPE ****create(TYPE ****&array, int n1, int n2, int n3, const char *name) + TYPE ****create(TYPE ****& /*array*/, int /*n1*/, int /*n2*/, int /*n3*/, const char *name) {fail(name); return NULL;} /* ---------------------------------------------------------------------- @@ -297,7 +297,7 @@ class Memory : protected Pointers { } template - TYPE ****grow(TYPE ****&array, int n1, int n2, int n3, const char *name) + TYPE ****grow(TYPE ****& /*array*/, int /*n1*/, int /*n2*/, int /*n3*/, const char *name) {fail(name); return NULL;} /* ---------------------------------------------------------------------- @@ -330,8 +330,8 @@ class Memory : protected Pointers { } template - TYPE ****create3d_offset(TYPE ****&array, int n1lo, int n1hi, - int n2, int n3, const char *name) + TYPE ****create3d_offset(TYPE ****& /*array*/, int /*n1lo*/, int /*n1hi*/, + int /*n2*/, int /*n3*/, const char *name) {fail(name); return NULL;} /* ---------------------------------------------------------------------- @@ -374,8 +374,8 @@ class Memory : protected Pointers { } template - TYPE ****create3d_offset(TYPE ****&array, int n1lo, int n1hi, - int n2lo, int n2hi, int n3lo, int n3hi, + TYPE ****create3d_offset(TYPE ****& /*array*/, int /*n1lo*/, int /*n1hi*/, + int /*n2lo*/, int /*n2hi*/, int /*n3lo*/, int /*n3hi*/, const char *name) {fail(name); return NULL;} @@ -432,7 +432,7 @@ class Memory : protected Pointers { } template - TYPE *****create(TYPE *****&array, int n1, int n2, int n3, int n4, + TYPE *****create(TYPE *****& /*array*/, int /*n1*/, int /*n2*/, int /*n3*/, int /*n4*/, const char *name) {fail(name); return NULL;} @@ -478,8 +478,8 @@ class Memory : protected Pointers { } template - TYPE ****create4d_offset(TYPE *****&array, int n1, int n2lo, int n2hi, - int n3lo, int n3hi, int n4lo, int n4hi, + TYPE ****create4d_offset(TYPE *****& /*array*/, int /*n1*/, int /*n2lo*/, int /*n2hi*/, + int /*n3lo*/, int /*n3hi*/, int /*n4lo*/, int /*n4hi*/, const char *name) {fail(name); return NULL;} @@ -546,8 +546,8 @@ class Memory : protected Pointers { } template - TYPE ******create(TYPE ******&array, int n1, int n2, int n3, int n4, - int n5, const char *name) + TYPE ******create(TYPE ******& /*array*/, int /*n1*/, int /*n2*/, int /*n3*/, int /*n4*/, + int /*n5*/, const char *name) {fail(name); return NULL;} /* ---------------------------------------------------------------------- diff --git a/src/modify.cpp b/src/modify.cpp index c5a680a3bd6b0e928db0c1f055fb63af3d58e468..8a0d1afa2c8db7a7194079b88903520b5b52bf96 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -239,7 +239,8 @@ void Modify::init() for (i = 0; i < nfix; i++) if (!fix[i]->dynamic_group_allow && group->dynamic[fix[i]->igroup]) { char str[128]; - sprintf(str,"Fix %s does not allow use of dynamic group",fix[i]->id); + snprintf(str,128, + "Fix %s does not allow use of dynamic group",fix[i]->id); error->all(FLERR,str); } @@ -247,7 +248,7 @@ void Modify::init() if (!compute[i]->dynamic_group_allow && group->dynamic[compute[i]->igroup]) { char str[128]; - sprintf(str,"Compute %s does not allow use of dynamic group",fix[i]->id); + snprintf(str,128,"Compute %s does not allow use of dynamic group",fix[i]->id); error->all(FLERR,str); } @@ -889,7 +890,7 @@ void Modify::add_fix(int narg, char **arg, int trysuffix) if (fix[ifix] == NULL) { char str[128]; - sprintf(str,"Unknown fix style %s",arg[2]); + snprintf(str,128,"Unknown fix style %s",arg[2]); error->all(FLERR,str); } @@ -1191,7 +1192,7 @@ void Modify::add_compute(int narg, char **arg, int trysuffix) if (compute[ncompute] == NULL) { char str[128]; - sprintf(str,"Unknown compute style %s",arg[2]); + snprintf(str,128,"Unknown compute style %s",arg[2]); error->all(FLERR,str); } diff --git a/src/molecule.cpp b/src/molecule.cpp index dfbe3e1e08e07527096f6db6d4de80557c370415..454459084a70aceca4a09ad9b8972e2c1167a4a7 100644 --- a/src/molecule.cpp +++ b/src/molecule.cpp @@ -1632,7 +1632,7 @@ void Molecule::open(char *file) fp = fopen(file,"r"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open molecule file %s",file); + snprintf(str,128,"Cannot open molecule file %s",file); error->one(FLERR,str); } } diff --git a/src/neighbor.cpp b/src/neighbor.cpp index 912a636227b84b0fb81a549a7297698bbd98c1b0..84494bfbc5945c19e729c390bf3cc2fb95621e02 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -1408,7 +1408,6 @@ void Neighbor::init_topology() void Neighbor::print_pairwise_info() { int i,m; - char str[128]; NeighRequest *rq; FILE *out; @@ -1457,18 +1456,17 @@ void Neighbor::print_pairwise_info() rq = requests[i]; if (rq->pair) { char *pname = force->pair_match_ptr((Pair *) rq->requestor); - sprintf(str," (%d) pair %s",i+1,pname); + fprintf(out," (%d) pair %s",i+1,pname); } else if (rq->fix) { - sprintf(str," (%d) fix %s",i+1,((Fix *) rq->requestor)->style); + fprintf(out," (%d) fix %s",i+1,((Fix *) rq->requestor)->style); } else if (rq->compute) { - sprintf(str," (%d) compute %s",i+1, + fprintf(out," (%d) compute %s",i+1, ((Compute *) rq->requestor)->style); } else if (rq->command) { - sprintf(str," (%d) command %s",i+1,rq->command_style); + fprintf(out," (%d) command %s",i+1,rq->command_style); } else if (rq->neigh) { - sprintf(str," (%d) neighbor class addition",i+1); + fprintf(out," (%d) neighbor class addition",i+1); } - fprintf(out,"%s",str); if (rq->occasional) fprintf(out,", occasional"); else fprintf(out,", perpetual"); @@ -2193,7 +2191,7 @@ void Neighbor::set(int narg, char **arg) ditto for lastcall and last_setup_bins ------------------------------------------------------------------------- */ -void Neighbor::reset_timestep(bigint ntimestep) +void Neighbor::reset_timestep(bigint /*ntimestep*/) { for (int i = 0; i < nbin; i++) neigh_bin[i]->last_bin = -1; diff --git a/src/pair.cpp b/src/pair.cpp index 5c308cc7ce51e840713abfaeacdcbd8190ce95e9..18d561bdb55230ef2f63f6fc01f600916bcad8ab 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -301,7 +301,7 @@ void Pair::init_style() specific pair style can override this function ------------------------------------------------------------------------- */ -void Pair::init_list(int which, NeighList *ptr) +void Pair::init_list(int /*which*/, NeighList *ptr) { list = ptr; } diff --git a/src/pair_beck.cpp b/src/pair_beck.cpp index cc8e14bf2c6c93164a1795b79352a7568f24f515..d9c0fb902c9f833a128344fd9944c205e50518e3 100644 --- a/src/pair_beck.cpp +++ b/src/pair_beck.cpp @@ -327,9 +327,9 @@ void PairBeck::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairBeck::single(int i, int j, int itype, int jtype, +double PairBeck::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double factor_lj, double &fforce) { double phi_beck,r,rinv; diff --git a/src/pair_born.cpp b/src/pair_born.cpp index ce7a255fd4935a41e1a20d00fe4ea8757894600f..1a1db9dd905822810dc6cc201c1bf2bc8c006d8e 100644 --- a/src/pair_born.cpp +++ b/src/pair_born.cpp @@ -407,8 +407,8 @@ void PairBorn::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairBorn::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, +double PairBorn::single(int /*i*/, int /*j*/, int itype, int jtype, + double rsq, double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r6inv,r,rexp,forceborn,phiborn; diff --git a/src/pair_buck.cpp b/src/pair_buck.cpp index 450ce291cb9814629e0ade5d1398cd595744d95c..8b6d79234bb174ff3fffc26ad5278c563d3f40c0 100644 --- a/src/pair_buck.cpp +++ b/src/pair_buck.cpp @@ -380,8 +380,8 @@ void PairBuck::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairBuck::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, +double PairBuck::single(int /*i*/, int /*j*/, int itype, int jtype, + double rsq, double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r6inv,r,rexp,forcebuck,phibuck; diff --git a/src/pair_coul_cut.cpp b/src/pair_coul_cut.cpp index edcf26bffe990d91219eaeaa60d53e20bf57181a..8741abdb895893da53453faff9466ffdd0ee7d3d 100644 --- a/src/pair_coul_cut.cpp +++ b/src/pair_coul_cut.cpp @@ -284,8 +284,8 @@ void PairCoulCut::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairCoulCut::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, +double PairCoulCut::single(int i, int j, int /*itype*/, int /*jtype*/, + double rsq, double factor_coul, double /*factor_lj*/, double &fforce) { double r2inv,rinv,forcecoul,phicoul; diff --git a/src/pair_coul_debye.cpp b/src/pair_coul_debye.cpp index ee08ab3294909b1865bc16100b3a390468fa31d3..432a0155982b67189228de7d978fc6eeb632e725 100644 --- a/src/pair_coul_debye.cpp +++ b/src/pair_coul_debye.cpp @@ -163,8 +163,8 @@ void PairCoulDebye::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairCoulDebye::single(int i, int j, int itype, int jtype, - double rsq, double factor_coul, double factor_lj, +double PairCoulDebye::single(int i, int j, int /*itype*/, int /*jtype*/, + double rsq, double factor_coul, double /*factor_lj*/, double &fforce) { double r2inv,r,rinv,forcecoul,phicoul,screening; diff --git a/src/pair_coul_dsf.cpp b/src/pair_coul_dsf.cpp index f20eae43bdbdde3fe252d25f3f6194404e8e81bb..8cd5f7feceff4366d4cfc5ef24275889fc8aea0e 100644 --- a/src/pair_coul_dsf.cpp +++ b/src/pair_coul_dsf.cpp @@ -221,7 +221,7 @@ void PairCoulDSF::init_style() init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairCoulDSF::init_one(int i, int j) +double PairCoulDSF::init_one(int /*i*/, int /*j*/) { return cut_coul; } @@ -291,8 +291,8 @@ void PairCoulDSF::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairCoulDSF::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairCoulDSF::single(int i, int j, int /*itype*/, int /*jtype*/, double rsq, + double factor_coul, double /*factor_lj*/, double &fforce) { double r2inv,r,erfcc,erfcd,prefactor,t; diff --git a/src/pair_coul_streitz.cpp b/src/pair_coul_streitz.cpp index 1d725f4ca87c637ffb1e9855a126fe1e95f0cf41..920770ed7f83f8c16096a3d5e2a46614a24427e2 100644 --- a/src/pair_coul_streitz.cpp +++ b/src/pair_coul_streitz.cpp @@ -258,7 +258,7 @@ void PairCoulStreitz::read_file(char *file) fp = fopen(file,"r"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open coul/streitz potential file %s",file); + snprintf(str,128,"Cannot open coul/streitz potential file %s",file); error->one(FLERR,str); } } diff --git a/src/pair_coul_wolf.cpp b/src/pair_coul_wolf.cpp index cd582f0693abaafffb3d04af52996cf7ea033c8a..762491166efe79abd0a87478921429568e1fccfe 100644 --- a/src/pair_coul_wolf.cpp +++ b/src/pair_coul_wolf.cpp @@ -219,7 +219,7 @@ void PairCoulWolf::init_style() init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairCoulWolf::init_one(int i, int j) +double PairCoulWolf::init_one(int /*i*/, int /*j*/) { return cut_coul; } @@ -290,8 +290,8 @@ void PairCoulWolf::read_restart_settings(FILE *fp) only the pair part is calculated here ------------------------------------------------------------------------- */ -double PairCoulWolf::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairCoulWolf::single(int i, int j, int /*itype*/, int /*jtype*/, double rsq, + double factor_coul, double /*factor_lj*/, double &fforce) { double r,prefactor; diff --git a/src/pair_dpd.cpp b/src/pair_dpd.cpp index c209de87ed15e7aad81c1e1c01322509d4045720..5c5fc4254b4005baaf3ca9b57cf9b6445be00e2b 100644 --- a/src/pair_dpd.cpp +++ b/src/pair_dpd.cpp @@ -390,8 +390,8 @@ void PairDPD::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairDPD::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_dpd, double &fforce) +double PairDPD::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_dpd, double &fforce) { double r,rinv,wd,phi; diff --git a/src/pair_gauss.cpp b/src/pair_gauss.cpp index fe53bcc9e1b2af7b61b3074170521887b8166252..426389753b79ecbc215e1d9f9d157c61751abc95 100644 --- a/src/pair_gauss.cpp +++ b/src/pair_gauss.cpp @@ -347,8 +347,8 @@ void PairGauss::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairGauss::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairGauss::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double /*factor_lj*/, double &fforce) { double philj = diff --git a/src/pair_hybrid.cpp b/src/pair_hybrid.cpp index dc74dd040dde23f9b72fe87ab39417a54de263a6..03747e1de3faa91f7e142372de7922904c522d28 100644 --- a/src/pair_hybrid.cpp +++ b/src/pair_hybrid.cpp @@ -844,7 +844,7 @@ void PairHybrid::modify_params(int narg, char **arg) store a local per pair style override for special_lj and special_coul ------------------------------------------------------------------------- */ -void PairHybrid::modify_special(int m, int narg, char **arg) +void PairHybrid::modify_special(int m, int /*narg*/, char **arg) { double special[4]; int i; diff --git a/src/pair_lj96_cut.cpp b/src/pair_lj96_cut.cpp index 28677a393ef3745a969ae3ca03dcb47f09ed5e53..457eba0e7958d401fb9f1ee24226408e6455fe26 100644 --- a/src/pair_lj96_cut.cpp +++ b/src/pair_lj96_cut.cpp @@ -678,8 +678,8 @@ void PairLJ96Cut::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJ96Cut::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairLJ96Cut::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r3inv,r6inv,forcelj,philj; diff --git a/src/pair_lj_cubic.cpp b/src/pair_lj_cubic.cpp index 4b140e5f05d416fce943890c9412d8f1962a5a3e..770caa6359b850b2944ebaa9f304b108fb56f20f 100644 --- a/src/pair_lj_cubic.cpp +++ b/src/pair_lj_cubic.cpp @@ -175,7 +175,7 @@ void PairLJCubic::allocate() global settings ------------------------------------------------------------------------- */ -void PairLJCubic::settings(int narg, char **arg) +void PairLJCubic::settings(int narg, char **/*arg*/) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); @@ -321,9 +321,9 @@ void PairLJCubic::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJCubic::single(int i, int j, int itype, int jtype, +double PairLJCubic::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r6inv,forcelj,philj; diff --git a/src/pair_lj_cut.cpp b/src/pair_lj_cut.cpp index bb2db6aa2fc025cbec62d10111ee2d838caf1715..13a546f5a5411ca5c19f425defc0f4e9605141d7 100644 --- a/src/pair_lj_cut.cpp +++ b/src/pair_lj_cut.cpp @@ -672,8 +672,8 @@ void PairLJCut::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJCut::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairLJCut::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r6inv,forcelj,philj; diff --git a/src/pair_lj_expand.cpp b/src/pair_lj_expand.cpp index ba72d7d45f39884c80c061d3b6a3b9bc6b5157dd..9aa58b3b88adb1f9257cac3ff9ed94f15032c3a9 100644 --- a/src/pair_lj_expand.cpp +++ b/src/pair_lj_expand.cpp @@ -396,8 +396,8 @@ void PairLJExpand::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJExpand::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairLJExpand::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r,rshift,rshiftsq,r2inv,r6inv,forcelj,philj; diff --git a/src/pair_lj_gromacs.cpp b/src/pair_lj_gromacs.cpp index 6b2219d2c5cef92f4da305e343e4111eb4fc751b..495e96c3680388e44add0f6ac4ae537db44b1be1 100644 --- a/src/pair_lj_gromacs.cpp +++ b/src/pair_lj_gromacs.cpp @@ -414,9 +414,9 @@ void PairLJGromacs::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJGromacs::single(int i, int j, int itype, int jtype, +double PairLJGromacs::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r6inv,forcelj,philj; diff --git a/src/pair_lj_smooth.cpp b/src/pair_lj_smooth.cpp index 23256d486ed09fcf2a48e31ebefd65aead569372..a12046bb3bf9783892d20617e0700d959f88689c 100644 --- a/src/pair_lj_smooth.cpp +++ b/src/pair_lj_smooth.cpp @@ -425,8 +425,8 @@ void PairLJSmooth::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJSmooth::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairLJSmooth::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r6inv,forcelj,philj,r,t,tsq,fskin; diff --git a/src/pair_lj_smooth_linear.cpp b/src/pair_lj_smooth_linear.cpp index 592a7f6f41a1ad75eae1a537e3e02e5c88b29bfb..17c789bceed7c2ac3de4881a9924e4971b9198dd 100644 --- a/src/pair_lj_smooth_linear.cpp +++ b/src/pair_lj_smooth_linear.cpp @@ -326,9 +326,9 @@ void PairLJSmoothLinear::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairLJSmoothLinear::single(int i, int j, int itype, int jtype, +double PairLJSmoothLinear::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, + double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r6inv,forcelj,philj,r,rinv; diff --git a/src/pair_mie_cut.cpp b/src/pair_mie_cut.cpp index 1f9267ca30898ed75de80279c23bb3b74d670e88..c1e1c1ff507cd36b769b34577423fe2951d76d45 100644 --- a/src/pair_mie_cut.cpp +++ b/src/pair_mie_cut.cpp @@ -682,8 +682,8 @@ void PairMIECut::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairMIECut::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_mie, +double PairMIECut::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_mie, double &fforce) { double r2inv,rgamR,rgamA,forcemie,phimie; diff --git a/src/pair_morse.cpp b/src/pair_morse.cpp index 32ddd723b2c0dcf062a2f3f1261651786b092bbc..c1031343e19e40d63b37a2cf0371f3a117d32109 100644 --- a/src/pair_morse.cpp +++ b/src/pair_morse.cpp @@ -334,8 +334,8 @@ void PairMorse::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairMorse::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairMorse::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r,dr,dexp,phi; diff --git a/src/pair_soft.cpp b/src/pair_soft.cpp index f428893fd107a0726dcf9532a49d55ddb288b8b3..d1c51ac6006cdb83be753bec80f64783b2048133 100644 --- a/src/pair_soft.cpp +++ b/src/pair_soft.cpp @@ -307,8 +307,8 @@ void PairSoft::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairSoft::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairSoft::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r,arg,philj; diff --git a/src/pair_table.cpp b/src/pair_table.cpp index 9e9e41a54c6eac3671c7260937d9ca401254b35b..0d692caccbcd53e3829193b70a152d050ba9edee 100644 --- a/src/pair_table.cpp +++ b/src/pair_table.cpp @@ -362,7 +362,7 @@ void PairTable::read_table(Table *tb, char *file, char *keyword) FILE *fp = force->open_potential(file); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",file); + snprintf(str,128,"Cannot open file %s",file); error->one(FLERR,str); } @@ -993,8 +993,8 @@ void PairTable::read_restart_settings(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairTable::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairTable::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { int itable; diff --git a/src/pair_ufm.cpp b/src/pair_ufm.cpp index 965fe0204e739a526f5f7ebe13e981f2b5c22984..a9f076f504a3303f83d96ad545f7f0ca8315450a 100644 --- a/src/pair_ufm.cpp +++ b/src/pair_ufm.cpp @@ -353,8 +353,8 @@ void PairUFM::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairUFM::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairUFM::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double expuf,phiuf; diff --git a/src/pair_yukawa.cpp b/src/pair_yukawa.cpp index 040664abec071e8b776a9315f2e33521d6221f2a..af520fd3da793056af62a4907e48a56b5154dd7e 100644 --- a/src/pair_yukawa.cpp +++ b/src/pair_yukawa.cpp @@ -319,8 +319,8 @@ void PairYukawa::write_data_all(FILE *fp) /* ---------------------------------------------------------------------- */ -double PairYukawa::single(int i, int j, int itype, int jtype, double rsq, - double factor_coul, double factor_lj, +double PairYukawa::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, double &fforce) { double r2inv,r,rinv,screening,forceyukawa,phi; diff --git a/src/pair_zbl.cpp b/src/pair_zbl.cpp index 98048f61d0751393e4a23b672b84c6698e669db2..f23a1e5d56c210c08efb0f1bbd7f18a9a6a28c9f 100644 --- a/src/pair_zbl.cpp +++ b/src/pair_zbl.cpp @@ -267,8 +267,8 @@ double PairZBL::init_one(int i, int j) /* ---------------------------------------------------------------------- */ -double PairZBL::single(int i, int j, int itype, int jtype, double rsq, - double dummy1, double dummy2, +double PairZBL::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*dummy1*/, double /*dummy2*/, double &fforce) { double phi,r,t,eswitch,fswitch; diff --git a/src/rcb.cpp b/src/rcb.cpp index 13e27b6fbfda836c53b381db8171f59f4b921e0d..630cef309a581c5da789d2d659783139573427c6 100644 --- a/src/rcb.cpp +++ b/src/rcb.cpp @@ -1108,7 +1108,7 @@ void RCB::compute_old(int dimension, int n, double **x, double *wt, merge of each component of an RCB bounding box ------------------------------------------------------------------------- */ -void box_merge(void *in, void *inout, int *len, MPI_Datatype *dptr) +void box_merge(void *in, void *inout, int * /*len*/, MPI_Datatype * /*dptr*/) { RCB::BBox *box1 = (RCB::BBox *) in; @@ -1138,7 +1138,7 @@ void box_merge(void *in, void *inout, int *len, MPI_Datatype *dptr) all procs must get same proclo,prochi ------------------------------------------------------------------------- */ -void median_merge(void *in, void *inout, int *len, MPI_Datatype *dptr) +void median_merge(void *in, void *inout, int * /*len*/, MPI_Datatype * /*dptr*/) { RCB::Median *med1 = (RCB::Median *) in; diff --git a/src/read_data.cpp b/src/read_data.cpp index 5faa8f9646517ff8952a5d035372099c256d2070..26c406c1d6822de7a412736b50cc64572d787a12 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -706,7 +706,7 @@ void ReadData::command(int narg, char **arg) } else { char str[128]; - sprintf(str,"Unknown identifier in data file: %s",keyword); + snprintf(str,128,"Unknown identifier in data file: %s",keyword); error->all(FLERR,str); } @@ -1919,7 +1919,7 @@ void ReadData::open(char *file) else { #ifdef LAMMPS_GZIP char gunzip[128]; - sprintf(gunzip,"gzip -c -d %s",file); + snprintf(gunzip,128,"gzip -c -d %s",file); #ifdef _WIN32 fp = _popen(gunzip,"rb"); @@ -1934,7 +1934,7 @@ void ReadData::open(char *file) if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",file); + snprintf(str,128,"Cannot open file %s",file); error->one(FLERR,str); } } diff --git a/src/read_restart.cpp b/src/read_restart.cpp index 7d8e6ca3955c0d547e354cde414ba3838864cf18..252c48d251ec8aefb414779752c6699e21d539ec 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -64,7 +64,7 @@ enum{VERSION,SMALLINT,TAGINT,BIGINT, ATOM_ID,ATOM_MAP_STYLE,ATOM_MAP_USER,ATOM_SORTFREQ,ATOM_SORTBIN, COMM_MODE,COMM_CUTOFF,COMM_VEL,NO_PAIR, EXTRA_BOND_PER_ATOM,EXTRA_ANGLE_PER_ATOM,EXTRA_DIHEDRAL_PER_ATOM, - EXTRA_IMPROPER_PER_ATOM,EXTRA_SPECIAL_PER_ATOM}; + EXTRA_IMPROPER_PER_ATOM,EXTRA_SPECIAL_PER_ATOM,ATOM_MAXSPECIAL}; #define LB_FACTOR 1.1 @@ -138,7 +138,7 @@ void ReadRestart::command(int narg, char **arg) fp = fopen(hfile,"rb"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open restart file %s",hfile); + snprintf(str,128,"Cannot open restart file %s",hfile); error->one(FLERR,str); } if (multiproc) delete [] hfile; @@ -297,7 +297,7 @@ void ReadRestart::command(int narg, char **arg) fp = fopen(procfile,"rb"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open restart file %s",procfile); + snprintf(str,128,"Cannot open restart file %s",procfile); error->one(FLERR,str); } @@ -369,7 +369,7 @@ void ReadRestart::command(int narg, char **arg) fp = fopen(procfile,"rb"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open restart file %s",procfile); + snprintf(str,128,"Cannot open restart file %s",procfile); error->one(FLERR,str); } delete [] procfile; @@ -926,6 +926,8 @@ void ReadRestart::header(int incompatible) atom->extra_improper_per_atom = read_int(); } else if (flag == EXTRA_SPECIAL_PER_ATOM) { force->special_extra = read_int(); + } else if (flag == ATOM_MAXSPECIAL) { + atom->maxspecial = read_int(); } else error->all(FLERR,"Invalid flag in header section of restart file"); diff --git a/src/reader.cpp b/src/reader.cpp index f6e8bd39ebec8522ea68c9e0ca099f9ea07edd9f..22a21812e61ecfc525d7b701baf28eb943ce547f 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -41,7 +41,7 @@ void Reader::open_file(const char *file) else { #ifdef LAMMPS_GZIP char gunzip[1024]; - sprintf(gunzip,"gzip -c -d %s",file); + snprintf(gunzip,1024,"gzip -c -d %s",file); #ifdef _WIN32 fp = _popen(gunzip,"rb"); @@ -56,7 +56,7 @@ void Reader::open_file(const char *file) if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open file %s",file); + snprintf(str,128,"Cannot open file %s",file); error->one(FLERR,str); } } diff --git a/src/reader_xyz.cpp b/src/reader_xyz.cpp index 5cb3476510f093abbe51f745043e0d063356fe29..37d30bd740992e1d78d6f9573b8431fe9bf5f471 100644 --- a/src/reader_xyz.cpp +++ b/src/reader_xyz.cpp @@ -117,9 +117,9 @@ void ReaderXYZ::skip() only called by proc 0 ------------------------------------------------------------------------- */ -bigint ReaderXYZ::read_header(double box[3][3], int &triclinic, +bigint ReaderXYZ::read_header(double /*box*/[3][3], int &triclinic, int fieldinfo, int nfield, - int *fieldtype, char **fieldlabel, + int *fieldtype, char **/*fieldlabel*/, int scaleflag, int wrapflag, int &fieldflag, int &xflag, int &yflag, int &zflag) { diff --git a/src/region.cpp b/src/region.cpp index 88a414b13438fb2acc8008c7e635645fb1026c30..c52c0181aaf6e6dbeef9c204f60f7f4f796a661b 100644 --- a/src/region.cpp +++ b/src/region.cpp @@ -28,7 +28,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -Region::Region(LAMMPS *lmp, int narg, char **arg) : +Region::Region(LAMMPS *lmp, int /*narg*/, char **arg) : Pointers(lmp), id(NULL), style(NULL), contact(NULL), list(NULL), xstr(NULL), ystr(NULL), zstr(NULL), tstr(NULL) diff --git a/src/reset_ids.cpp b/src/reset_ids.cpp index fd898bd3ab63db79f7b45e659ae346e6d19bdab9..b2cf7a9bbce2a5286c5415a8e34148bef37d9aad 100644 --- a/src/reset_ids.cpp +++ b/src/reset_ids.cpp @@ -28,7 +28,7 @@ ResetIDs::ResetIDs(LAMMPS *lmp) : Pointers(lmp) {} /* ---------------------------------------------------------------------- */ -void ResetIDs::command(int narg, char **arg) +void ResetIDs::command(int narg, char **/*arg*/) { if (domain->box_exist == 0) error->all(FLERR,"Reset_ids command before simulation box is defined"); diff --git a/src/respa.cpp b/src/respa.cpp index 73e280b03d806fa038d388e2943d067465cce3d2..26bae5a1cb3c7be8c5cc160e90d209b2d09b5359 100644 --- a/src/respa.cpp +++ b/src/respa.cpp @@ -774,7 +774,7 @@ void Respa::recurse(int ilevel) clear other arrays as needed ------------------------------------------------------------------------- */ -void Respa::force_clear(int newtonflag) +void Respa::force_clear(int /*newtonflag*/) { if (external_force_clear) return; diff --git a/src/universe.cpp b/src/universe.cpp index 45b4318ec900862d85d8a7c3999ae181bd1b1f6d..410d12dcb3839c82a9c1d87dba0c552a297476e9 100644 --- a/src/universe.cpp +++ b/src/universe.cpp @@ -204,7 +204,7 @@ void Universe::add_world(char *str) if (!valid) { char msg[128]; - sprintf(msg,"Invalid partition string '%s'",str); + snprintf(msg,128,"Invalid partition string '%s'",str); error->universe_all(FLERR,msg); } } else nper = nprocs; @@ -269,7 +269,7 @@ char *date2num(const char *version) year = atoi(version); } - char *ver = new char[10]; + char *ver = new char[64]; sprintf(ver,"%04d%02d%02d", year % 10000, month, day % 100); return ver; diff --git a/src/variable.cpp b/src/variable.cpp index f005221400509f76fd5887f0323fa11cc8f30a32..1595456f3314debb00fe13038a51d8d5276f9342 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -528,7 +528,7 @@ void Variable::set(int narg, char **arg) for (int i = 0; i < n-1; i++) if (!isalnum(names[nvar][i]) && names[nvar][i] != '_') { char errmsg[128]; - sprintf(errmsg,"Variable name '%s' must have only alphanumeric " + snprintf(errmsg,128,"Variable name '%s' must have only alphanumeric " "characters or underscore",names[nvar]); error->all(FLERR,errmsg); } @@ -586,7 +586,7 @@ int Variable::next(int narg, char **arg) ivar = find(arg[iarg]); if (ivar < 0) { char errmsg[128]; - sprintf(errmsg,"Invalid variable '%s' in next command",arg[iarg]); + snprintf(errmsg,128,"Invalid variable '%s' in next command",arg[iarg]); error->all(FLERR,errmsg); } if (style[ivar] == ULOOP && style[find(arg[0])] == UNIVERSE) continue; @@ -733,7 +733,7 @@ int Variable::find(char *name) called when atom is created ------------------------------------------------------------------------- */ -void Variable::set_arrays(int i) +void Variable::set_arrays(int /*i*/) { for (int i = 0; i < nvar; i++) if (reader[i] && style[i] == ATOMFILE) @@ -886,7 +886,7 @@ char *Variable::retrieve(char *name) int ifunc = python->variable_match(data[ivar][0],name,0); if (ifunc < 0) { char errmsg[128]; - sprintf(errmsg,"Python variable '%s' does not match Python function",name); + snprintf(errmsg,128,"Python variable '%s' does not match Python function",name); error->all(FLERR,errmsg); } python->invoke_function(ifunc,data[ivar][1]); @@ -1597,7 +1597,7 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) int ifix = modify->find_fix(word+2); if (ifix < 0) { char msg[128]; - sprintf(msg,"Invalid fix ID '%s' in variable formula",word+2); + snprintf(msg,128,"Invalid fix ID '%s' in variable formula",word+2); print_var_error(FLERR,msg,ivar); } Fix *fix = modify->fix[ifix]; @@ -2032,8 +2032,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) argstack,nargstack,ivar)); else { char msg[128]; - sprintf(msg,"Invalid math/group/special function '%s()'" - "in variable formula", word); + snprintf(msg,128,"Invalid math/group/special function '%s()'" + "in variable formula", word); print_var_error(FLERR,msg,ivar); } delete [] contents; @@ -2092,7 +2092,7 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) int flag = output->thermo->evaluate_keyword(word,&value1); if (flag) { char msg[128]; - sprintf(msg,"Invalid thermo keyword '%s' in variable formula",word); + snprintf(msg,128,"Invalid thermo keyword '%s' in variable formula",word); print_var_error(FLERR,msg,ivar); } if (tree) { @@ -3733,7 +3733,7 @@ int Variable::group_function(char *word, char *contents, Tree **tree, if (strcmp(word,"count") == 0) { if (narg == 1) value = group->count(igroup); - else if (narg == 2) + else if (narg == 2) value = group->count(igroup,region_function(args[1],ivar)); else print_var_error(FLERR,"Invalid group function in variable formula",ivar); @@ -3744,7 +3744,7 @@ int Variable::group_function(char *word, char *contents, Tree **tree, } else if (strcmp(word,"charge") == 0) { if (narg == 1) value = group->charge(igroup); - else if (narg == 2) + else if (narg == 2) value = group->charge(igroup,region_function(args[1],ivar)); else print_var_error(FLERR,"Invalid group function in variable formula",ivar); @@ -3795,7 +3795,7 @@ int Variable::group_function(char *word, char *contents, Tree **tree, } else if (strcmp(word,"bound") == 0) { double minmax[6]; if (narg == 2) group->bounds(igroup,minmax); - else if (narg == 3) + else if (narg == 3) group->bounds(igroup,minmax,region_function(args[2],ivar)); else print_var_error(FLERR,"Invalid group function in variable formula",ivar); if (strcmp(args[1],"xmin") == 0) value = minmax[0]; @@ -3959,7 +3959,7 @@ int Variable::special_function(char *word, char *contents, Tree **tree, double *argstack, int &nargstack, int ivar) { bigint sx,sxx; - double value,xvalue,sy,sxy; + double value,sy,sxy; // word not a match to any special function @@ -4013,7 +4013,7 @@ int Variable::special_function(char *word, char *contents, Tree **tree, int icompute = modify->find_compute(&args[0][2]); if (icompute < 0) { char msg[128]; - sprintf(msg,"Invalid compute ID '%s' in variable formula",word+2); + snprintf(msg,128,"Invalid compute ID '%s' in variable formula",word+2); print_var_error(FLERR,msg,ivar); } compute = modify->compute[icompute]; @@ -4055,7 +4055,7 @@ int Variable::special_function(char *word, char *contents, Tree **tree, } else index = 0; int ifix = modify->find_fix(&args[0][2]); - if (ifix < 0) + if (ifix < 0) print_var_error(FLERR,"Invalid fix ID in variable formula",ivar); fix = modify->fix[ifix]; if (index == 0 && fix->vector_flag) { @@ -4656,7 +4656,7 @@ void Variable::print_var_error(const char *srcfile, int lineno, if ((ivar >= 0) && (ivar < nvar)) { char msg[128]; - sprintf(msg,"Variable %s: %s",names[ivar],errmsg); + snprintf(msg,128,"Variable %s: %s",names[ivar],errmsg); error->all(srcfile,lineno,msg); } else error->all(srcfile,lineno,errmsg); } @@ -4944,7 +4944,7 @@ VarReader::VarReader(LAMMPS *lmp, char *name, char *file, int flag) : fp = fopen(file,"r"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open file variable file %s",file); + snprintf(str,128,"Cannot open file variable file %s",file); error->one(FLERR,str); } } diff --git a/src/velocity.cpp b/src/velocity.cpp index f83f778f8b15dfecfbd7b755da0fc7dfb19f93d7..3a0b95fb4da91ea6e77d6ff24a012e493137d610 100644 --- a/src/velocity.cpp +++ b/src/velocity.cpp @@ -410,7 +410,7 @@ void Velocity::create(double t_desired, int seed) /* ---------------------------------------------------------------------- */ -void Velocity::set(int narg, char **arg) +void Velocity::set(int /*narg*/, char **arg) { int xstyle,ystyle,zstyle,varflag; double vx,vy,vz; @@ -579,7 +579,7 @@ void Velocity::set(int narg, char **arg) rescale velocities of a group after computing its temperature ------------------------------------------------------------------------- */ -void Velocity::scale(int narg, char **arg) +void Velocity::scale(int /*narg*/, char **arg) { double t_desired = force->numeric(FLERR,arg[0]); @@ -628,7 +628,7 @@ void Velocity::scale(int narg, char **arg) apply a ramped set of velocities ------------------------------------------------------------------------- */ -void Velocity::ramp(int narg, char **arg) +void Velocity::ramp(int /*narg*/, char **arg) { // set scale factors @@ -705,7 +705,7 @@ void Velocity::ramp(int narg, char **arg) zero linear or angular momentum of a group ------------------------------------------------------------------------- */ -void Velocity::zero(int narg, char **arg) +void Velocity::zero(int /*narg*/, char **arg) { if (strcmp(arg[0],"linear") == 0) { if (rfix < 0) zero_momentum(); diff --git a/src/version.h b/src/version.h index db73df1ad124b44dd86c4e3f314a9bdcb162255a..d9d93cac0e8fac0ca6cec3cb5307e656adf50073 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "16 Aug 2018" +#define LAMMPS_VERSION "10 Oct 2018" diff --git a/src/write_coeff.cpp b/src/write_coeff.cpp index 5f82a480fd9242a745998709bc6748ed80212fb0..99172c09f0f3913f5f2049a118e77e58ea8996c6 100644 --- a/src/write_coeff.cpp +++ b/src/write_coeff.cpp @@ -51,7 +51,7 @@ void WriteCoeff::command(int narg, char **arg) char str[256], coeff[256]; FILE *one = fopen(file,"wb+"); if (one == NULL) { - sprintf(str,"Cannot open coeff file %s",file); + snprintf(str,256,"Cannot open coeff file %s",file); error->one(FLERR,str); } @@ -86,7 +86,7 @@ void WriteCoeff::command(int narg, char **arg) FILE *two = fopen(file+4,"w"); if (two == NULL) { - sprintf(str,"Cannot open coeff file %s",file+4); + snprintf(str,256,"Cannot open coeff file %s",file+4); error->one(FLERR,str); } fprintf(two,"# LAMMPS coeff file via write_coeff, version %s\n", diff --git a/src/write_data.cpp b/src/write_data.cpp index 96bf081157eaf13096dd215477950a5ee0792201..f18e30de52832cd4554c1bd5923795e20f5dfe63 100644 --- a/src/write_data.cpp +++ b/src/write_data.cpp @@ -183,7 +183,7 @@ void WriteData::write(char *file) fp = fopen(file,"w"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open data file %s",file); + snprintf(str,128,"Cannot open data file %s",file); error->one(FLERR,str); } } diff --git a/src/write_restart.cpp b/src/write_restart.cpp index 1bfbb382a8c6b835bb315652a91c93c90fd7123d..e0e17cd2928c149ca610802d691cd53d3ea91ba6 100644 --- a/src/write_restart.cpp +++ b/src/write_restart.cpp @@ -63,7 +63,7 @@ enum{VERSION,SMALLINT,TAGINT,BIGINT, ATOM_ID,ATOM_MAP_STYLE,ATOM_MAP_USER,ATOM_SORTFREQ,ATOM_SORTBIN, COMM_MODE,COMM_CUTOFF,COMM_VEL,NO_PAIR, EXTRA_BOND_PER_ATOM,EXTRA_ANGLE_PER_ATOM,EXTRA_DIHEDRAL_PER_ATOM, - EXTRA_IMPROPER_PER_ATOM,EXTRA_SPECIAL_PER_ATOM}; + EXTRA_IMPROPER_PER_ATOM,EXTRA_SPECIAL_PER_ATOM,ATOM_MAXSPECIAL}; /* ---------------------------------------------------------------------- */ @@ -269,7 +269,7 @@ void WriteRestart::write(char *file) fp = fopen(hfile,"wb"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open restart file %s",hfile); + snprintf(str,128,"Cannot open restart file %s",hfile); error->one(FLERR,str); } if (multiproc) delete [] hfile; @@ -334,7 +334,7 @@ void WriteRestart::write(char *file) fp = fopen(multiname,"wb"); if (fp == NULL) { char str[128]; - sprintf(str,"Cannot open restart file %s",multiname); + snprintf(str,128,"Cannot open restart file %s",multiname); error->one(FLERR,str); } write_int(PROCSPERFILE,nclusterprocs); @@ -533,7 +533,7 @@ void WriteRestart::header() write_int(EXTRA_ANGLE_PER_ATOM,atom->extra_angle_per_atom); write_int(EXTRA_DIHEDRAL_PER_ATOM,atom->extra_dihedral_per_atom); write_int(EXTRA_IMPROPER_PER_ATOM,atom->extra_improper_per_atom); - write_int(EXTRA_SPECIAL_PER_ATOM,force->special_extra); + write_int(ATOM_MAXSPECIAL,atom->maxspecial); // -1 flag signals end of header