diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b91e58a83f..164bc05d60 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 50b970249a..1ce415678e 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 460d177c92..610fb5b57c 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 0000000000..586df83c2d --- /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 0000000000..608ccda777 --- /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 29ea372597..a89d098dd0 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 85375cd2aa..21e728c1f0 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 400b7593cf..7850972f3b 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 81f3623499..e4ba2fe6a1 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 0000000000..d49650bfaa --- /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 1046171de1..df30af36f5 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 cee78aced3..4b3a347bf1 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 08c1c72180..f8b52056fc 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 5c33a0a4d4..fb96699743 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 c00ce1f420..ad18695e46 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 4f71e9eb18..f1aa4bb671 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 773217e3a0..500130ecee 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 0000000000..0caad589fb --- /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 13db1272b9..6f54681342 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 48069d3120..773202f126 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 028e274c9b..81b618a6e2 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 d90e8d6403..58828d5c9e 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 a126344505..d56b7fa767 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 1de0291501..090101d5ea 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 cbe2261986..1d7c754fa7 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 0000000000..d2e6d704e9 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 0000000000..fce1db99b8 --- /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 0000000000..2d20da706e 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 0000000000..a9c29ce189 --- /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 d279b5e975..695b949f7e 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 dd3402ba86..0980120a10 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 438ea561a1..730b492699 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 7c3db89152..3323334600 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 3535349b46..3e7db9bc8e 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 8e52acf4b8..82a4450d17 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 0000000000..aa6b8eab76 --- /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 d7b4924d8c..0214db1ece 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 741078e7eb..9a9656784c 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 f787801c36..10139d907c 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 8be4b66e78..a12bf13f2e 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 1e737df655..4dfe4e2f6c 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 1b9adb49a5..b549f99be2 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 0e2feb1869..9f7e2f3000 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 8bcab6dd24..b4e441557d 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 cc15ac0ae0..bd22de057c 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 3d0b27370e..ff9b14c12c 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 b672c5ff25..7ba5d15ac4 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 49c14bc5f0..cd822c778f 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 0000000000..fd8edc5e67 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 c5e5aff61b..dab2ea385e 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 a6b881cb79..ac12dd7b2e 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 cf94b40281..4ab1eddf21 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 892774be38..6efcfd5f62 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 55d0d616f4..583ecf39fe 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 c1a52fd0d0..6e363b28f7 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 029c8f831c..3c382de1ba 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 1f02368429..54f995c565 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 9a3ea93fc3..e76af83962 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 02139a8c69..1b7387b46b 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 9c862d7b8e..1fc00bc2e3 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 2b93cc7d49..85c9a6550d 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 8e407d14ea..a3d0bf4f46 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 3ae4639dc2..bddefc5031 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: +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/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 +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 ef876a7d42..bf078fb576 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 eb787df5d6..f74c9c9ed7 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 647ff71e36..dd12685dc5 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 0abf54430e..238909d1b4 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 6c837885cd..4c87091e7e 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 8d9625e1bd..4e7810aa61 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 9beded1b16..a990ab626f 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 6725170928..a5707d280e 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 28bc90fa01..350ab13b92 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 ef787f53ac..17e854a37f 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 61596d3b31..8dcf328dd3 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 40b82f3f61..335ff2d209 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 7eb950f78e..6c2fb84940 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 0663dba176..c4b0d4865e 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 a731b09116..baa306a1c8 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 690f0fcc98..16f6d9abad 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 900952ba0b..e94a9a52ef 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 8f4f486595..e3074eae8f 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 eab186f715..8d32f1c4f9 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 a337a495e0..d28ec334f5 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 d54a201034..98eedafa6c 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 ab454c16d2..7cf40f6813 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 d01253c4b3..8c81ce5925 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 4f1f5962d9..f4d1b01e88 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 e517dd4855..e39ddd3cec 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 b8ba584816..485b8c95a0 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 7a871f5c81..e2190dea21 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 2711d128e9..0928139d7d 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 7cc6cfea5b..f6f7b43a38 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 42815def6b..31bd5619a3 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 03cf86eb92..2245e32607 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 b45b7dfb01..ec2dc3ccb9 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 17903aabd0..483e5be6bd 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 00935f0ae2..1874ad152e 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 f97037784c..620b9b1d36 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 79c1006c97..04d24ff029 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 e51cbc9873..337a92517e 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 41ae06eb8c..c8348c45ed 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 dfa19474e5..f76607cc91 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 849e8f0671..a5d893f2a3 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 7f10e17076..6af543cbae 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 92db590198..cb02c05c23 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 fd845d0a71..88442d63a1 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 ade780ddee..89aabebd3c 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 31c18b4f1f..ea5a6e357b 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 140b745f09..fd744e5bbf 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 c31ab4938d..1646abc671 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 25a5c2cdae..c4976f699d 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 a7ee112614..98989bd015 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 2ac383a974..735d462b73 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 e62a827a78..0ae68435e5 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 b1969cb79d..cd78816bae 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 39bfffd119..0e3624cf8a 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 60a2fe59a1..e39cc54d41 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 d05429ebab..66b55a48fb 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 f768a29c41..1d2983afff 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 46487fdce7..821e50e4cf 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 e0571ccf88..315180e1db 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 756cf49922..f709c02a84 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 60fbfcd888..ee0505847c 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 aec1d5d55a..d0a08fa0da 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 54079027c5..18afe0aa97 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 2fc6e02681..7906c5fc52 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 2cb2cb6113..3ec2eecc60 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 b6fabbb27c..3e22a51f3e 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 5fc21282f6..d13151a12e 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 e6ad418de6..54e4e3419f 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 acea7a5607..c15e0ca46d 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 561364518f..ee063ce57f 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 88e6748001..3c43861054 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 a6429bf6d6..9607848e1a 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 4e48c4bb29..9a9a8e3a02 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 cf775c9b36..55ad8d952b 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 c7239f2c41..78fb1652eb 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 3f43340af8..3b261b7810 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 a07ba29cab..c317c06c00 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 fe293138be..830591921e 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 732eaa3a36..5000fb079d 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 f5410816d7..2c7cf26150 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 95e1f4be5a..551896431a 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 78495c928a..4dfd9b3cfc 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 8a0e5b62a8..1722d74f67 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 6dca57673b..74c6e2d289 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 4de1a6755d..22238880fe 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 4b4ac3862d..0f0b241b76 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 62b973e3a4..db3ef36ddf 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 7d9e443e7d..72ea1c1930 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 cda4a36b34..46db81eb9e 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 3a321965ef..8acaec94d5 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 c3dc1cc4af..4afd1aec40 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 e76b51e6ec..c29a5600a9 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 0000000000..f84ef67974 --- /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 66eecd195d..ddc4cc82d3 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 77812699d3..951b360f19 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 669ab9f7ca..7cea62c7b3 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 b3891841b8..04f0fd0b82 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 192ea0bc9e..5ba2100fba 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 264f38d5fd..7ff57c9844 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 a2c25fcc8d..b36d61f71c 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 0000000000..4865fe8a79 --- /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 c4c0fc405f..72ed0ba5c4 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 512009093c..bc1e3049fa 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 0000000000..2e22e4e9fb --- /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 04b38682cc..d11ae9e3bf 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 ef3c7c6489..0bd2accf3c 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 0000000000..3628c0f1ad --- /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 9b829a70fc..67c6209bdf 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 92f5923de0..e9ff2e739b 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 cd1f8fdd9b..487b1b590b 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 787ff8cdcf..4edecc2408 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 0000000000..1006463179 --- /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 9a509da450..97e1d6e1ae 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 46dd30f757..c836fb6cb1 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 57faf97ad1..a55288e1db 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 b29fa82f2d..4e33604696 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 7a8bf6cdb7..660bbb3f1f 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 9b56dd95a6..df1ff324c1 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 98bcbc5e55..72f4935916 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 dd2b212f0b..b5f157cf29 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 9c3a1d0349..ee0d006fe8 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 7acc22d702..b7d4e7badf 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 7317dd26bb..8e7cb1bdae 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 29ebeaeef3..d41607e2ed 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 0000000000..77f6b82c5e --- /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 be4fbd255b..0c5a4493ae 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 0000000000..ea33dc432f --- /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 b30966c2f9..4868761d42 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 b115aba7df..64486a9cc7 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 7bb25e0a68..d4836706e2 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 bd61e29dcb..c97095bcfc 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 1a52397822..d9012d8cb3 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 ddb5f9a4cd..f50747948a 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 e31f61e5f7..7f0e5512ae 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 d331d9ad75..521dfff12b 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 ae403cafd1..dc05948de3 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 0000000000..c266d46eee --- /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 97a864a231..7a350e48b5 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 52ab0ca44d..8fe793ce7f 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 8a70cd8213..19e3b0ca40 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 a3d1ab702e..f013ebfae1 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 d489762e80..5d65856735 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 77bb5794f6..5c11f96b98 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 644c04eadb..774842c7cf 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 2a998ba8c6..fca21b78f7 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 dc3625e95e..47527363a2 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 ade64d2056..0000000000 --- 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 0ea5b194eb..871ee2e5d1 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 7a45ed8086..66f6633124 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 dd7b1e8dea..41973601d7 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 - {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 - {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 +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 + {overlap} = {yes} or {no} = whether the grid stencil for PPPM is allowed to overlap into more than the nearest-neighbor processor + {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,39 +211,7 @@ 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. -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 -means each charge spans 5 or 8 grid cells in each dimension, -respectively. For the LAMMPS implementation of MSM, the order can -range from 4 to 10 and must be even. For PPPM, the minimum allowed -setting is 2 and the maximum allowed setting is 7. The larger the -value of this parameter, the smaller that LAMMPS will set the grid -size, to achieve the requested accuracy. Conversely, the smaller the -order value, the larger the grid size will be. Note that there is an -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 {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. - -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 -processors. This communication is distinct from the communication -inherent in the parallel FFTs themselves, and is required because -processors interpolate charge and field values using grid point values -owned by neighboring processors (i.e. ghost point communication). If -the {overlap} keyword is set to {yes} then this communication is -allowed to extend beyond nearest-neighbor processors, e.g. when using -lots of processors on a small problem. If it is set to {no} then the -communication will be limited to nearest-neighbor processors and the -{order} setting will be reduced if necessary, as explained by the -{minorder} keyword discussion. The {overlap} keyword is always set to -{yes} in MSM. +:line The {minorder} keyword allows LAMMPS to reduce the {order} setting if necessary to keep the communication of ghost grid point limited to @@ -126,6 +228,42 @@ 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 +means each charge spans 5 or 8 grid cells in each dimension, +respectively. For the LAMMPS implementation of MSM, the order can +range from 4 to 10 and must be even. For PPPM, the minimum allowed +setting is 2 and the maximum allowed setting is 7. The larger the +value of this parameter, the smaller that LAMMPS will set the grid +size, to achieve the requested accuracy. Conversely, the smaller the +order value, the larger the grid size will be. Note that there is an +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 @@ -134,30 +272,102 @@ 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 {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 {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. -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 {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 +processors. This communication is distinct from the communication +inherent in the parallel FFTs themselves, and is required because +processors interpolate charge and field values using grid point values +owned by neighboring processors (i.e. ghost point communication). If +the {overlap} keyword is set to {yes} then this communication is +allowed to extend beyond nearest-neighbor processors, e.g. when using +lots of processors on a small problem. If it is set to {no} then the +communication will be limited to nearest-neighbor processors and the +{order} setting will be reduced if necessary, as explained by the +{minorder} keyword discussion. The {overlap} keyword is always set to +{yes} in MSM. + +:line + +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. + +:line + +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. + +: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 7e479c76a6..6d8a289470 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 f1ff39d80b..c006e77d65 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 0000000000..cca1a5b369 --- /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 910fc7f821..73858fc249 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 57e122fdcd..75d199e0b4 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 8b0581929f..65117ba3c3 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 0000000000..63a450c51a --- /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 158eb68ca8..7d841119ca 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 195d3e6669..9cbfcffea0 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 5b1688e868..ec83e6b339 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 4c43978fe5..21de3330f4 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 dfc87e1bce..131e289227 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 63f85f23d5..88f95b5b2c 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 62ac157e76..df04e76de9 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 8bd4abed68..faaea42f15 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 dcb2448949..bdf37983b6 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 adaeeb8390..8b1ceab858 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 6c3793cb61..ed1378b6fd 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 053d43b2ba..e0e8fbb27e 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 bf759a71bc..e322f8da15 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 6a36a036c9..e50a21588c 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 6e68e820a8..97a5972bfb 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 02d0db7af2..f048b16ccf 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 358d2168df..df9a9696be 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 f557e6c731..912fca1657 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 b5a5726182..4939f505bb 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 d26c88e4f7..178ba8d1a8 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 2bc2b656ac..47a554ef4f 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 df5db81264..74adba2432 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 2e8c26658a..77322953cf 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 6a119d74e1..2b2152a873 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 23da86fc49..e8baf14d2e 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 b977aefe88..06a0a42d5a 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 f552c56a4b..360f440792 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 fe3bb1ad14..7af71021a0 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 b33897c5aa..9dfead300e 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 20744bc2a9..4b7bb0d93d 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 4c3eef2cd1..d535798482 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 ef899a15b4..6aa30d9e63 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 0195dce911..79a481746e 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 391b51fde9..8b217c7b1c 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 7c034f36e0..e0fae3909d 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 6dd9b56908..9defd1314e 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 0000000000..86fb68d012 --- /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 0000000000..58ca415be3 --- /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 0000000000..753542dc75 --- /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 a57b61664d..e90535e65f 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 11460185db..7b1481ceb9 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 6c25c23a79..8d2fa2e577 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 39ee684a0b..1eb53c70a2 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 fb08e4e97e..febd5c20a0 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 83e7463531..0e611befbd 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 0000000000..c75bd08c73 --- /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 0000000000..c201a6351c --- /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 0000000000..85052d09f1 --- /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 0000000000..8b10bb0f7b --- /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 0000000000..0d67c89cf1 --- /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 0000000000..2ae51d2461 --- /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 0000000000..0565487bc6 --- /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 0000000000..e74d03235d --- /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 0000000000..7c2e2ce039 --- /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 0000000000..e9d88523fc --- /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 0000000000..61ac18c6c0 --- /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 0000000000..0dc2081768 --- /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 0000000000..ac2358e5fb --- /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 0000000000..322509da30 --- /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 0000000000..aba5df54a0 --- /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 0000000000..e942d52535 --- /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 0000000000..8accd9ca79 --- /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 0000000000..3eaf99dcbb --- /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 0000000000..fa8f4f920a --- /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 0000000000..1e2c52aa46 --- /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 0000000000..0f15c871b4 --- /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 a8dfe63d92..3c9c299819 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 de23ba87ba..e3c88b0f06 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 fd6833727b..ea98eeba94 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 35aa1df86c..3ff0b1cadf 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 c2d5082cb6..1db5007dff 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 ba447b077f..0ed2fac410 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 80de036661..17343994b5 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 a1198ccf93..39157fdac4 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 84fea24611..42f07fd316 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 0fa9c1b74c..8315e57750 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 8315e57750..0000000000 --- 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 0000000000..7f158d7626 --- /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 0000000000..442596dcf1 --- /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 0000000000..7b3f24cf38 --- /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 0000000000..dd1dc0af0f --- /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 0000000000..1550df422d --- /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 0000000000..d6dbb2ff09 --- /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 0000000000..2fd6077983 --- /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 0000000000..1592ec666a --- /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 0000000000..0d238ebf8f --- /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 0000000000..9a1f0f321e --- /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 0000000000..55ebd0e7b3 --- /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 0000000000..c63e241d63 --- /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 0000000000..96be1b7d3c --- /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 0000000000..50ff1a64a8 --- /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 0000000000..6c26c71884 --- /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 0000000000..054188ede2 --- /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 0000000000..3688b5157c --- /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 0000000000..48a60a4b8b --- /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 0000000000..a91f8f91c7 --- /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 0000000000..7fa2ccdd9e --- /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 0000000000..874b1d151a --- /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 0000000000..20d3faaf7f --- /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 0000000000..d26138522a --- /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 0000000000..714ce85a5f --- /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 0000000000..c9c1e0d155 --- /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 0000000000..1a9bc77146 --- /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 0000000000..eae3f2b840 --- /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 0000000000..feb7e2a5a6 --- /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 0000000000..f47f24edee --- /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 0000000000..d6e7cbea37 --- /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 0000000000..fb863797f3 --- /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 0000000000..d5a07e0324 --- /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 0000000000..a6f9228673 --- /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 0000000000..13212ede0c --- /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 0000000000..2fc46da3cd --- /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 0000000000..b6bf41de24 --- /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 0000000000..26c1953afa --- /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 0000000000..4a1a5b91ed --- /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 0000000000..598585ae95 --- /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 0000000000..4bd0c3d4f3 --- /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 0000000000..50dcc99393 --- /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 0000000000..27fdfcedcb --- /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 0000000000..02a5528c59 --- /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 0000000000..1876a0e52b --- /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 0000000000..6e6e8f6e94 --- /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 0000000000..72a53c48ff --- /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 0000000000..bf4494df8b --- /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 0000000000..b5e889dfc1 --- /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 0000000000..e69de29bb2 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 0000000000..b0a47e4f98 --- /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 0000000000..1ffab0ca6a --- /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 0000000000..1235c0a3cd --- /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 0000000000..e72ade73b5 --- /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 0000000000..4bef247e26 --- /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 0000000000..e8e614004d --- /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 0000000000..e3f5bf44c9 --- /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 0000000000..22d1140813 --- /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 0000000000..f8a85c6c6b --- /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 0000000000..bd7e7fee1f --- /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 0000000000..8a7e591f9a --- /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 0000000000..13922c09ac --- /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 5100a52d84..0f7d726e21 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 0000000000..131528dce3 --- /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 0000000000..46215e108c --- /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 0000000000..d84f17ee2b --- /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 0000000000..6cd99d5c09 --- /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 0000000000..fdcd6f1188 --- /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 0000000000..7fbbffc355 --- /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 0000000000..f1ec644a80 --- /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 0000000000..2fedd2ae00 --- /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 0000000000..51126eae1e --- /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 0000000000..b55bc6585b --- /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 0000000000..ba211ed15f --- /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 0000000000..bca1d37dd5 --- /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 0000000000..1c868dde37 --- /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 0000000000..78bee72fdf --- /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 0000000000..7d7af866e3 --- /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 0000000000..ee97e7bd1a --- /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 0000000000..72db0198d5 --- /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 0000000000..23fa70c1be --- /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 0000000000..7833befd21 --- /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 0000000000..c06af4e0d1 --- /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 0000000000..695b51f166 --- /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 0000000000..cf1418d3c5 --- /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 0000000000..c233bad692 --- /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 0000000000..81e04aa923 --- /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 0000000000..a185cb1c29 --- /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 0000000000..973a08eb6a --- /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 0000000000..9e76e52d90 --- /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 0000000000..ce5729878b --- /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 0000000000..b3201da4da --- /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 0000000000..a290ec307b --- /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 0000000000..0089732355 --- /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 0000000000..814b3df1aa --- /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 0000000000..7c172d3727 --- /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 0000000000..f5e2f220cd --- /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 0000000000..8fc570f5da --- /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 0000000000..3f7cfc9da0 --- /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 0000000000..74061463f6 --- /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 0000000000..428ff346ad --- /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 0000000000..3da50163ed --- /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 0000000000..fc29a6da63 --- /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 0000000000..758b84fe9d --- /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 0000000000..78526ba748 --- /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 0000000000..b1ad768470 --- /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 3c8f46dd0a..12c27b2a39 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 0000000000..d3f31c986f --- /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 0000000000..1bb10cc988 --- /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 0000000000..759f2ce04b --- /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 0000000000..dafb94e9ef --- /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 0000000000..7a36e21daf --- /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 0000000000..37f4a97d54 --- /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 0000000000..83cf902220 --- /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 0000000000..2919e4c3a2 --- /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 0000000000..2f02eb4035 --- /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 0000000000..874333607e --- /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 0000000000..b4da968026 --- /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 0000000000..0ba3516255 --- /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 0000000000..c2d69eaf0d --- /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 0000000000..cd2e058b78 --- /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 0000000000..bf7df029c3 --- /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 0000000000..c67e4a5c8c --- /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 0000000000..f75942b027 --- /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 0000000000..d97e249fad --- /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 0000000000..d6bd802607 --- /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 0000000000..db11735b27 --- /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 0000000000..4b4140a3f7 --- /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 0000000000..e9a9e87eeb --- /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 0000000000..7b31db5a63 --- /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 0000000000..c2d408f3a5 --- /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 0000000000..c0621a26ff --- /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 0000000000..d23e8a3686 --- /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 0000000000..e5f1ecd92c --- /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 3f38b5e35a..6ca56ca186 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 d2fe543cf8..029f682f34 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 0000000000..0f08b2e6dd --- /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 2f4ffb642e..598e4c506f 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 df3a22a5cd..5699a87089 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 a33848f1a1..61e3c35293 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 d944b68f35..9cc430592a 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 c145e99fcb..51a502df89 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 d06063d905..fb9bf64c58 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 684e5768da..10529ad3af 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 1e232f0f3f..00a09c912d 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 6a9b97ae23..0e2ebbed83 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 0606723cb7..0c74facf34 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 0e7aaea1e1..3f8c08b6bd 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 17e9f0b8b5..9504e256b4 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 14ef70f476..6a176f1083 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 051be762e5..eea2aa3724 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 c3dc09715c..af20313e0a 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 3b3811584d..77f594af9d 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 e255807ab6..6451921dc5 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 4448d6e110..c16dbf41af 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 f0f7ce8c14..de53d91818 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 11fb213157..35fe33c84e 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 5965fd3aa8..d21bc43524 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 3a8e440bdc..11af562f15 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 51681d563b..ef8dd09e23 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 0f581be01c..73c1c9fc11 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 368ff99fb7..f0957423f9 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 12fa25714c..8633587ad5 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 9d4f5c1a9b..d1f3c7bbe1 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 4937c2fe8b..5244396ead 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 df6db8ddfa..83f75c221d 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 52822856ee..578afd2077 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 517b541f6f..23bb4f32ee 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 fb6b8d8d45..9973b5a688 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 cf209c0adb..e1e17a425a 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 ddea35ca88..b88c92ff73 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 1c433f321c..585422c54f 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 f21ea2335d..e198ddb85a 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 5848399672..6593ccae73 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 627b56b84a..f5e4445db3 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 ce0b572ea2..f75605ff6d 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 1bfb8255dc..6ef3d99ac3 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 c821750da5..4040eba858 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 810173d219..f38feea5f4 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 6257566ba7..ab616d2c07 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 e2e2e6f6de..46ecddfd83 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 5c96d44618..89dfc4d884 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 5c68284219..b2019879ed 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 a024e5cbd1..c452042cfe 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 8f4903c767..5452d2293f 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 - 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) { 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 eb59d5bc3c..1a3f0b862f 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 7b06f814bb..b72df04c5f 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 cb4def2d37..c3e1494d0b 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 2dac2c5991..f73d4fe2d8 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 0d150f83e4..61493794ba 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 dd5efb50f1..d7c94ffc93 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 2fb9675db6..f51da2afde 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 45982bd420..3af4e0d8eb 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 9f3221449b..efa2c87296 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 4b10782ee6..8db5979b39 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 f5cd9a0445..ab59dfa4c1 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 aea57da326..b8cd52c5fe 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 81dd692f4f..26541f121e 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 18502dd013..a89be57bed 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 b8d9c7e6df..7146ee9d65 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 d0b4d19758..7b48522e84 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 3be27354c1..067eb1634f 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 0000000000..a6e52faeba --- /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 0000000000..70883a81c7 --- /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 87a23dff99..ca0f229068 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 de686d4bcf..85ea4812bf 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 b4f9c02206..106b83eeba 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 9e70b19eea..f4b4901075 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 eed38f79e9..c004030240 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 66ebad6244..8db1b6dd9a 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 2b5d530d3a..bbda84fdf1 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 b810d444fc..b0fa1b1eef 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 35f092b580..f2d3b67eb0 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 81d4866e84..f3dd1bc04b 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 d334defcc6..88477e48f3 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 36be9c2b90..ce449e4890 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 2afb08b7a1..41c5892d4e 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 37948f3038..1f31c0b0cd 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 6fbc00204c..91e11b3d26 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 507b07e29a..54101aef9e 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 73297fb534..e8fdecfe01 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 0d0016664a..4a5904c106 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 1692c88a50..353e3d2264 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 8506c9a69f..b4c3086ca8 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 4d9377022b..12b5d65f4a 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 9a5b59b601..a1c9bb3ab0 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 8e9db6a18b..e1dd18cb5b 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 d6df4d9a96..9a72667907 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 b821710353..46c5e592ae 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 02f9754c2a..c71eaa2295 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 687055aa6a..38e8e97810 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 0000000000..853dbddcdd --- /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 0000000000..aca5cd41f9 --- /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 0000000000..1c874c7278 --- /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 0000000000..329ce1fbd9 --- /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 0000000000..c384a5a7b7 --- /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 0000000000..f587fb76df --- /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 0000000000..579f6ab6f1 --- /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 0000000000..8a7344e86b --- /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 0000000000..d0fb489429 --- /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 0000000000..aa771b7d46 --- /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 0000000000..289d70bdd8 --- /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 1fa141e2bf..004c8ad7bc 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 370730133e..2bf02889a5 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 c5ba6514a9..c614577933 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 5786571a89..5b394adde7 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 7ffd979e50..4e15581377 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 a778d7a5b6..ce077a7a04 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 3987aa02fc..0f4d73cdd9 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 e3472dfd7a..7fb7ce4c27 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 4e620b436e..e8dd970b3b 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 235e9b4d5b..2867865497 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 b6da72bfaf..671290b0ad 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 26b699d7bf..3e191683fb 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 8e989259af..279f4fb2d4 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 e7f510d2de..f795610b37 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 35be50e8df..06af28f2b0 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 3926c3494b..645b081779 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 f581c7f331..f200030d6c 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 7515f713df..392904149d 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 5ef2e662ab..a889a8d0db 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 26ff499dec..c0c885d4d4 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 749053164c..f464d2c621 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 e9f52b8724..79dd79b180 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 948d203cfe..eefc64b274 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 42d86e14b2..66137e6a01 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 9950c36f41..76267426c6 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 4c48223b07..383b91c6f5 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 81461f0b83..772e47f2d6 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 a9f620ef4b..7590077f0e 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 2c2fefb250..f345d52aab 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 c277e295a1..89310eeded 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 cb98636b1c..6cfc580c25 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 8acf4498f5..49e0a6d423 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 aeb8dd2c59..f496c7e6c0 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 db63bec206..83c9907f1b 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 bf7130c1d6..db2d800c06 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 70898fd96c..88cd1ab3ad 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 4ddcf06357..81fdc73241 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 84e4a66e6c..c6c1d309ee 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 24083a288a..a430380711 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 3b9b49ac57..8fc5de6b16 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 e5d24da392..dc86c70956 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 c9aedf7401..3963379356 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 46073952fc..da42ba6fae 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 7ade8d6848..403f3091c6 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 7104d30849..39c49ca1c4 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 96c44d15b5..4dceb1b8b4 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 135a1fb4bd..5016d3f168 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 c1de89efc7..44e1870e0a 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 0beef3bfa2..e0d1bf132b 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 d898d2a790..2e515839c5 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 a7890c3afa..c800e8a85d 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 7146b46c1e..eb89e19517 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 0d8b0bae14..5ca63a7e85 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 3150573043..7ed1bc1e23 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 6460a6185f..24c4480e04 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 59f0ce2876..c5d55b84cb 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 cb34465482..55b4d8dfec 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 b75f03212a..898eb95396 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 b908478952..d3edb3ae8a 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 398206b26e..929b79bef3 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 100eec1732..1be8550c65 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 08e2c63e7f..6f8114042e 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 6bc1f71947..570c995754 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 564c1e98d7..186f51e06a 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 7fb8a27110..bf11b1d6ba 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 47d8d8f60b..34a25a9b5a 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 63f38a4e12..72b3388793 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 90f7b1caeb..c73801c97a 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 151e752692..d31890ea52 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 974ade89c1..da6e1f8bbd 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 0eb75fbb43..ca03bcb35c 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 e2b8334078..719a63b5f4 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 ce1bfe036a..cb9f61bd7e 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 8c4498e627..f713e4d27c 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 e5b9de81c0..c4c23bf2c9 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 c1f2cf215a..51dcb4c2b7 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 cbcba7f6b2..3404beb58a 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 1d93363e20..c51235518b 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 45bfeca48b..882c13bc3e 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 d89ea7759a..5759a164f5 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 e57a3788bf..7d701f5fb8 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 73144c0a0f..779cee0e8b 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 be78989bb5..97668471c8 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 7fe865c8e6..4e133480ad 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 aeade16e7c..12e6d9f257 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 05dc52eac7..42c23e3ad2 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 057c8fa119..0251f019c5 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 3d204a849e..19a4a02f0b 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 0070ca82d9..f3ad86eb2f 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 221944edc5..1e7bc440d1 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 19fd775715..7800efe7ff 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 235c5d224b..b9d1139f83 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 8c20ee8c42..6901ad1f2d 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 d3856e431d..23abb4f99d 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 4548914ce1..659bdfca5e 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 2d0eef8e85..d362113997 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 584714a44e..699dd9f949 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 0379c0264b..b4e9011e33 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 3b8c9d4201..7304bc4ef6 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 5bcb5a7522..529ffe6b09 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 94bb3659fa..e45dbe72d6 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 4aaa5c2925..a33445f6f8 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 7a897e1870..965d570863 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 672b70b6f6..f2542fc0c7 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 74639f3aeb..5777dad947 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 2d70049a89..9d54269c05 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 ed9cab082e..65894efa05 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 6ad25f1ce4..6ccc165c61 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 b2bf54102c..ae5eb914e7 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 832ce7ed50..ef95cc75bb 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 7a206f472a..37212928df 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 79fb23ab3d..e6e09be503 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 44253e8bb0..bf4764f104 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 17bbcff771..7eeb8a1635 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 c0f6da06ae..7dee31d2f4 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 e0ef2162d1..c20c004657 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 60cbe16358..167095150e 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 0f32cb48b2..05176e1fd1 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 8040715b2e..e8225a4a30 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 4a86d8db29..b20f9c8ad1 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 e071b141fe..789fa35b42 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 ae961e84b5..74a04f0e7d 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 355c8db199..6d4529752a 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 07f33f7ebe..601144a3c0 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 192b39b2e8..da8a180fff 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 61bb6e0b4d..043f77db3e 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 201277e68d..ce9ede69d6 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 bc7197000b..3decc0154b 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 d1d52270be..aff8ba88a7 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 0a41e5d8a5..3b05658278 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 46a55e558a..e5540e6377 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 7a0bd0572e..fecd6f2b25 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 9fd0dab51d..c5c12d6c11 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 dddd060fa4..2601539727 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 8ee4d8419e..afe23477be 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 04172d5c92..4e717ce556 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 4dcc3f9704..3c6c70f6df 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 973a5bcf43..2a204d2048 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 6eb09010ef..b0727c346d 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 c13581c640..28062d7a27 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 21d4087d7c..4df4c833d3 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 fa7edc6e4a..c40a5fff9f 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 f590123dc3..d5e7bb146e 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 a9ee35bbfc..b95162740b 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 d33617fbfb..6c3f17393a 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 ccf0a794da..983702b6f3 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 5d4ae55fda..d9cd46c9c3 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 308190c528..0ca4c67002 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 b7eb155ba2..93cf60ad03 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 44a17725b5..0b4ca24370 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 de188e497d..2be215c282 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 e1a7509ab3..0aa71125c8 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 85314dd8a2..06fbb57adb 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 29db27fc4b..1d47dcc1f6 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 25c53785e4..d4a47a4f48 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 7f8ad3d81f..503ee65496 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 027e4c27a7..b74416a46d 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 8b03e05181..24bef2b1f7 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 c97a2d779c..f663165f78 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 89a831e121..8719d0d262 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 e16171800b..24b1bbcf48 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 64964a4c98..89e8005b43 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 351637a842..5ed63a2a8b 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 1264d03ed3..806a63f898 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 b8bbf6d622..821d8c0486 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 94a4e21ea6..68701037f4 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 0f9e7bf383..cf948df233 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 bcb631c61f..c4186da472 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 7148c5438d..b34f71e888 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 20c8a1a300..a58df70878 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 a17aefe71b..bcf41591eb 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 4d8627a11f..3b9b38343d 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 51cf3ab07a..6fa16f1a9a 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 922f2aaf5e..4946bc437e 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 0000000000..6fcd343e38 --- /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 0000000000..7151cca6ce --- /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 0000000000..f764e0ee7e --- /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 0000000000..648d86cc7f --- /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 654911769c..2cd1ac7527 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 da6d041287..5c9f478a65 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 c72a1b027b..b30f1b36c6 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 8ff71141f8..08756f8131 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 0000000000..e2fb0166a2 --- /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 0000000000..1225d25989 --- /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 91c7033513..56ab2b3df9 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 6a1e508030..b6366ec509 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 584b33bfe7..01da7f87cf 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 a5f8c34448..635acf705c 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 abf9e7cb0b..1c3eafdc46 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 c4750ce49e..32892d87a8 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 dbf7b56fe2..2ac2a7c9fc 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 e65ae6ae28..eba8ed5d0c 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 bbc4ce417a..78d63b79a8 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 a42690c280..cbebdebdbf 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 e4d85e8674..ebc161ff99 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 5812142763..305e29e033 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 1e1e62b638..a423b510e5 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 82a78d3e73..33bf636e64 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 11bf2ae01e..0277969d15 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 457d75bc77..61d32892fc 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 3f07df3d98..0154e89731 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 deec7da81f..11df975c19 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 2976d7ad73..491268567f 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 6be57eee74..f56650d2f6 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 5a8cdf2884..1e7d17f040 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 85f7c02887..a000eff028 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 30ee2e7a5a..f613f0aff0 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 be0e81d48d..2f868ae418 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 fb7d5ae40e..b39b9fdb72 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 f6e7f7f56b..45d0da4d83 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 d43a6c3086..891239016b 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 750f6ac5bb..0300e2c7a2 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 f6b7212f9c..e17c13865d 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); + // 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); + // 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(); + // 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; - } - } + // 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 12a40bb08b..927181ebf6 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 8a9c89cf69..a88e7a1a27 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 c2362b8de9..d1044cc336 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 b5800db2be..3f87aeb757 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 53a7b4729a..9608d58054 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 6348009d8f..8e49f56d5c 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 8d54d5b451..8be54caada 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 bbb3b03b02..78b4735863 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 c3a9454567..68c01c83d2 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 2839ab0ed0..d46a5383f5 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 a678c887a0..17fecf9b4f 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 2ab96c43a0..0000000000 --- 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 ce3e6fea75..096a42b1a8 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 3a37c67a38..cdbe4068bc 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 0000000000..dc1e0a5e7e --- /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 0000000000..eb0138de26 --- /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 6b8fbd8897..5c10e0c443 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 COMPUTE_CLASS -#ifdef PAIR_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 0000000000..151de3e5b8 --- /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 0000000000..559e0a7490 --- /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 0000000000..ade8f23b15 --- /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 0000000000..f8e2a7af5d --- /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 0000000000..f868f51e84 --- /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 0000000000..7c79fd371a --- /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 0000000000..6474723907 --- /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 0000000000..fc851920a6 --- /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 0000000000..cd67d4940d --- /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 0000000000..35fae7f088 --- /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 0000000000..a742c8b339 --- /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 0000000000..251c82d2f5 --- /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 0000000000..f6fd34d097 --- /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 0000000000..24998dadd0 --- /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 0000000000..8d96e2a2b7 --- /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 0000000000..5374fbf7d0 --- /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 0000000000..c77a779c68 --- /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 0000000000..15d1f185b7 --- /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 0000000000..376cc74901 --- /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 0000000000..74caa2c62c --- /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 0000000000..a86b3670ce --- /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 0000000000..ffaed78e82 --- /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 0000000000..ffd7a95ea2 --- /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 0000000000..e0284bc56f --- /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 a2f4d3d0e9..6f0b93235f 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 df06217993..c470173663 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 b38d137412..9dc347826f 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 61b4cebf96..46426d484a 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 7f77d875bc..85bd8471b4 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 a07f090f92..c6c103b6f4 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 468164a2c0..572d27526c 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 9678addd6b..6fde18e5c2 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 00b29824ea..dfcc9fd4ae 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 cb516b24f7..6442dd47e9 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 4af21284f2..88fb9cf17f 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 4d58f7514d..b63fee2309 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 9db8b7b9f6..918099a631 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 ce5b966529..360a9431cf 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 9c223428a6..b44632ec29 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 4ec744e7b1..1b16f10aee 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 c5a7f23b30..2abfbde61d 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 ae2bba2150..c1f3e8ae8f 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 c92996e56b..118735fbbd 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 0000000000..964212fc51 --- /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 0000000000..42d2e2c0f7 --- /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 0000000000..52bb0e46c4 --- /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 0000000000..fdf15739a6 --- /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 e99f3c5169..020284312b 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 67ec27778a..b24223b8b5 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 5525ce57cb..08ad150627 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 3685248d5e..f015c6c4df 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 4668e673fc..f931ae94ff 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 a145deeb61..6c4705eb96 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 d4afbe0535..fe8695b23e 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 5e7cdbad38..4bc8b5127b 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 b987a56f6c..f5fc34b4ea 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 3e2812aa12..a2813cc3ca 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 97c2ead5fc..a37ba67a80 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]; + double coord[3]; - int nlocal_previous = atom->nlocal; - int ilocal = nlocal_previous; - int m; - int me; + 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; + 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); - } + 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"); - } - } - } + 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; + 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); - } + // 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) { - sprintf(str, "first line of file is incorrect"); - error->one(FLERR, str); - } + 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 + // iterate over STL facets util end of body is reached - while (fgets(line, sizeof(line), fp)) { // read a line, should be the facet line + 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 - } + // 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"); - } + 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; + normal << force->numeric(FLERR, values[2]), force->numeric(FLERR, values[3]), force->numeric(FLERR, values[4]); + //cout << "normal is " << normal << endl; - delete[] values; + 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); - } + // 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) { - sprintf(str, "error reading outer loop"); - error->one(FLERR, str); - } + nwords = count_words(line); + if (nwords != 2) { + error->one(FLERR,"error reading outer loop"); + } - // read vertex lines + // 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); - } + 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) { - sprintf(str, "error reading vertex line"); - error->one(FLERR, str); - } + 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"); - } + 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); + 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); - } + // 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) { - sprintf(str, "error reading endloop"); - error->one(FLERR, str); - } + 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) { - sprintf(str, "error reading endfacet"); - error->one(FLERR, str); - } + // 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) { - sprintf(str, "error reading endfacet"); - error->one(FLERR, str); - } + 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 + // now we have a normal and three vertices ... proceed with adding triangle - center = (vert[0] + vert[1] + vert[2]) / 3.0; + center = (vert[0] + vert[1] + vert[2]) / 3.0; - // cout << "center is " << center << endl; + // 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); + 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 - */ + /* + * 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); + // 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; - */ + /* + * 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; + 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); + 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++; - } + 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"); - } - } + 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); + delete[] vert; + fclose(fp); } diff --git a/src/USER-SMD/pair_smd_hertz.cpp b/src/USER-SMD/pair_smd_hertz.cpp index 815db4a450..13f48e995e 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 4dd16c4d83..ab6b7d2785 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 b8bff7e799..e40c876ec3 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 96eb912fae..50af6e2356 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 e3deb199b6..4213428872 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 1028d8a897..c2690dc864 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 d7a5d81517..b688eccfea 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 f5fc306320..29e8a1554c 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 6f0cf7eca2..4a8990d6fd 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 99fba05917..32b3e61233 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 5cefdf87c4..c382833baf 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 605187d3a7..7a3c78efd0 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 00500b940d..42b318f2c9 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 80607cb333..8012895af8 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 44af823332..58b3ec5a1f 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 bfa4549286..bffcd7849f 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 8bbb6c4788..e64bde24be 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 6caa0826fe..25910ae800 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 e5191c4fb2..d7b7c9cdb5 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 cf4d20a71e..95f5406d95 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 b04bfba34c..a7ca6fcb19 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 4d3b5643ae..5a277627ee 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 42f4ccbdd3..78e2f5d71b 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 9fd9d4a580..9fcf300b21 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 298f435c3d..2579f9b283 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 f4e733a5ac..e96b0f38e3 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 461ee84b40..b3a3a7e094 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 584be94bf3..d7d2e4725d 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 56855fcc29..6c8c8e5d9a 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 7137077158..95faad54ad 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; + + // 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; + } + + // 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; - tflag = eflag = -1; - nvalues = 0; - - 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"); - } - 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); + if (!flag) { + m++; + continue; + } - rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; - r1 = sqrt(rsq1); + // theta needed by one or more outputs - 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); + 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); - rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; - r2 = sqrt(rsq2); + 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); - // c = cosine of angle + rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; + r2 = sqrt(rsq2); - 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; + // 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); + } + + if (nvalues == 1) ptr = &vlocal[m]; + else ptr = alocal[m]; + + if (nvar) { + ivar = 0; + if (tstr) input->variable->internal_set(tvar,theta); + } + + 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; } - - if (eflag >= 0) { - if (atype > 0) - ebuf[n] = angle->single(atype,atom1,atom2,atom3); - else ebuf[n] = 0.0; - } - n += nvalues; } m++; diff --git a/src/compute_angle_local.h b/src/compute_angle_local.h index 6f59d7f097..a95e23206d 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 985e3ef075..6a179cf1b4 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; + // style args + nvalues = narg - 3; - if (nvalues == 1) size_local_cols = 0; - else size_local_cols = nvalues; - 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 b3e99fc61b..17111a941c 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 48af453635..5096879b32 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 0000000000..c5fd27b0c1 --- /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 0000000000..80ee186450 --- /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 85934c5e6d..0c34b42671 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 a1b97d9404..b8ad3f0f64 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 f3c4513b01..e60a51832a 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 b86d818d06..33b318ea17 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 42d1476ad2..7444630090 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; + + // 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; + } + + // 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; - pflag = -1; - nvalues = 0; - - 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"); - } - 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) { + if (!flag) { + m++; + continue; + } - // phi calculation from dihedral style harmonic + // 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); + 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); + 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); + 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); + 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; + 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); + 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); + 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); - c = (ax*bx + ay*by + az*bz)*rabinv; - s = rg*rabinv*(ax*vb3x + ay*vb3y + az*vb3z); + if (nvalues == 1) ptr = &vlocal[m]; + else ptr = alocal[m]; + + if (nvar) { + ivar = 0; + if (pstr) input->variable->internal_set(pvar,phi); + } - if (c > 1.0) c = 1.0; - if (c < -1.0) c = -1.0; - pbuf[n] = 180.0*atan2(s,c)/MY_PI; + 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 c077e52dbd..d5f6a64183 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 b9fb2331ec..bb273f3bdb 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 dc94db50f6..51f84b020d 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 cb2946beba..6d17ae15bd 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 f263fdfaed..8a0a525fdc 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 444395bae5..df4f3a1ddb 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 9f2678aaab..57d52a5bab 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 3f1147ed27..e4cbabfd3d 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 ad68459650..ddcf5913ca 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 f2635c0948..0a0e8fb684 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 7c61d666b2..e3c3c5b70a 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 0000000000..beebc5f411 --- /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 0000000000..ac556907b7 --- /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 35f4512ab2..f2ad40ea43 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 8729204e70..39780b5cf6 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 4b87a2249e..4425aebdda 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 42d258d8b2..ba572645f3 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 bde70a20f0..4aa4dac0a1 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 bdd2eaadd3..46facdb6db 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 4c1d12018b..8238ab7eea 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 5581f9a45f..9ebdd6ae94 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 7c171015bb..7cd80dcf71 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 4c3950c099..17ad4b89ef 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 60a1f545c9..a488f65161 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 0d5172b5c1..8dc0554690 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 3feaf1d1ac..913239ac49 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 a54e295798..634bc2393d 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 42cd1bd199..950bc24253 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 c2eedccd61..d66457a1f1 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 a8c3be07af..c8cbad75c9 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 5f727fd3f7..7aed4dcbe7 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 418464a248..5c95f20ec2 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 7aa5993899..a5bf8db557 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 c3ace29684..50654b6561 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 4432a5dd36..1c87ba5785 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 e748e0ae31..8995a57afe 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 6a69dddbf5..e4cf12d1ff 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 f2a50fd6d1..7566094b48 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 791a52c50c..986ded5d16 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 4fcc842f89..5ac9206e7f 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 2baf3ff24d..bc10eb2807 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 10736964e7..0980ff5456 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 7de09a0fa4..983f993ae8 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 ade8cee532..b8e07dfd53 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 e4c36cc739..d829982274 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 e90152c4e1..aea1a2a25b 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 06a3ac900d..fa39643a1b 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 9eadfa5ab4..2f9fb0ebaa 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 90b77821e6..c21b494aa4 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 73c70420c5..a1a562f2bb 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 58e33b9744..959483230e 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 f659597af7..b4fb43e56f 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 3403f4f5ec..d4fca9e676 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 fe37324cfb..0bee8b8685 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 f90be6a233..45dc782fcf 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 792154e93f..95db004436 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 16218e0088..969fcf8140 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 5ad4dfa4ba..c89419f850 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 b384234b99..3c3178f4af 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 49e370ac80..75b383d67a 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 3b9aad1286..64461ba7ca 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 6ad229fea7..bb09116374 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 89b340b0ae..fc8b7aeb59 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 ecb84eeb0f..328a0eeafd 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 53e9285a9c..5b5d95b111 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 c2e226a343..28c8969006 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 1a5c89c6a1..670883af41 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 350e120972..9db65d0987 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 5e2150f68d..a841714098 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 3195e983e3..da899a173c 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 39d4173a63..4cbb244bc0 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 9b7f016970..6387af7676 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 1d2609c8b6..e845142322 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 096bbe618a..e84d01191d 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 ea1b62bfa5..ff147d7446 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 8ee301982d..91fccd7197 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 dd5e53bb3c..3bc3f3d7bf 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 301a2af88f..3df167bbf6 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 acb3da8d13..e089b1df0c 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 25ab3e7bba..8a1fa529c6 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 748354e878..672ce72b74 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 f41c8458ea..2834e36913 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 97d28d6d7c..d6b27e042d 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 fc8b12288b..b92cd1e9dc 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 28c7bcef2a..c25dc93f45 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 df6519f9f4..04d8daa478 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,6 +213,69 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) else break; } plast[npack++] = iarg; + + } 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"); + 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) + error->universe_all(FLERR,"Invalid command-line argument"); + if (universe->existflag) + 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) + error->universe_all(FLERR,"Invalid command-line argument"); + restartflag = 1; + rfile = arg[iarg+1]; + dfile = arg[iarg+2]; + // check for restart remap flag + if (strcmp(dfile,"remap") == 0) { + if (iarg+4 > narg) + error->universe_all(FLERR,"Invalid command-line argument"); + restartremapflag = 1; + dfile = arg[iarg+3]; + iarg++; + } + iarg += 3; + // delimit any extra args for the write_data command + wdfirst = iarg; + while (iarg < narg && arg[iarg][0] != '-') iarg++; + wdlast = iarg; + + } 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],"-suffix") == 0 || strcmp(arg[iarg],"-sf") == 0) { if (iarg+2 > narg) @@ -213,45 +301,14 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) strcpy(suffix,arg[iarg+1]); iarg += 2; } - } else if (strcmp(arg[iarg],"-reorder") == 0 || - strcmp(arg[iarg],"-ro") == 0) { + + } else if (strcmp(arg[iarg],"-var") == 0 || + strcmp(arg[iarg],"-v") == 0) { if (iarg+3 > narg) error->universe_all(FLERR,"Invalid command-line argument"); - if (universe->existflag) - 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) - error->universe_all(FLERR,"Invalid command-line argument"); - restartflag = 1; - rfile = arg[iarg+1]; - dfile = arg[iarg+2]; - // check for restart remap flag - if (strcmp(dfile,"remap") == 0) { - if (iarg+4 > narg) - error->universe_all(FLERR,"Invalid command-line argument"); - restartremapflag = 1; - dfile = arg[iarg+3]; - iarg++; - } - iarg += 3; - // delimit any extra args for the write_data command - 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) - error->universe_all(FLERR,"Invalid command-line argument"); - helpflag = 1; - citeflag = 0; - iarg += 1; + } 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 b2c8673471..5ccef3026e 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 13e0756866..a46689da09 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 7e359d2abe..7c3dbc1c3d 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 b70986ce91..0bba2ad401 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 429cf75c00..7a23a23079 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 f2faecf6e1..20ea426f90 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 c5a680a3bd..8a0d1afa2c 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 dfbe3e1e08..454459084a 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 912a636227..84494bfbc5 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 5c308cc7ce..18d561bdb5 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 cc8e14bf2c..d9c0fb902c 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 ce7a255fd4..1a1db9dd90 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 450ce291cb..8b6d79234b 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 edcf26bffe..8741abdb89 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 ee08ab3294..432a015598 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 f20eae43bd..8cd5f7fece 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 1d725f4ca8..920770ed7f 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 cd582f0693..762491166e 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 c209de87ed..5c5fc4254b 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 fe53bcc9e1..426389753b 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 dc74dd040d..03747e1de3 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 28677a393e..457eba0e79 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 4b140e5f05..770caa6359 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 bb2db6aa2f..13a546f5a5 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 ba72d7d45f..9aa58b3b88 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 6b2219d2c5..495e96c368 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 23256d486e..a12046bb3b 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 592a7f6f41..17c789bcee 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 1f9267ca30..c1e1c1ff50 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 32ddd723b2..c1031343e1 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 f428893fd1..d1c51ac600 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 9e9e41a54c..0d692caccb 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 965fe0204e..a9f076f504 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 040664abec..af520fd3da 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 98048f61d0..f23a1e5d56 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 13e27b6fbf..630cef309a 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 5faa8f9646..26c406c1d6 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 7d8e6ca395..252c48d251 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 f6e8bd39eb..22a21812e6 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 5cb3476510..37d30bd740 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 88a414b134..c52c0181aa 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 fd898bd3ab..b2cf7a9bbc 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 73e280b03d..26bae5a1cb 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 45b4318ec9..410d12dcb3 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 f005221400..1595456f33 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 f83f778f8b..3a0b95fb4d 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 db73df1ad1..d9d93cac0e 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 5f82a480fd..99172c09f0 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 96bf081157..f18e30de52 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 1bfbb382a8..e0e17cd292 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