diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d1617cbb25..1a7a35e61f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -66,6 +66,9 @@ src/MANYBODY/pair_vashishta_table.* @andeplane src/MANYBODY/pair_atm.* @sergeylishchuk src/MANYBODY/pair_nb3b_screened.* @flodesani src/REPLICA/*_grem.* @dstelter92 +src/EXTRA-COMMAND/geturl.* @akohlmey +src/EXTRA-COMMAND/group_ndx.* @akohlmey +src/EXTRA-COMMAND/ndx_group.* @akohlmey src/EXTRA-COMPUTE/compute_stress_mop*.* @RomainVermorel src/EXTRA-COMPUTE/compute_born_matrix.* @Bibobu @athomps src/EXTRA-FIX/fix_deform_pressure.* @jtclemm @@ -96,9 +99,10 @@ src/fix.* @sjplimp src/force.* @sjplimp src/group.* @sjplimp src/improper.* @sjplimp +src/info.* @akohlmey src/kspace.* @sjplimp src/lmptyp.h @sjplimp -src/library.* @sjplimp +src/library.* @sjplimp @akohlmey src/main.cpp @sjplimp src/min_*.* @sjplimp src/memory.* @sjplimp @@ -106,12 +110,12 @@ src/modify.* @sjplimp @stanmoore1 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/npair*.* @sjplimp @jtclemm +src/ntopo*.* @sjplimp @jtclemm +src/nstencil*.* @sjplimp @jtclemm +src/neighbor.* @sjplimp @jtclemm +src/nbin*.* @sjplimp @jtclemm +src/neigh_*.* @sjplimp @jtclemm src/output.* @sjplimp src/pair.* @sjplimp src/rcb.* @sjplimp diff --git a/.github/workflows/check-vla.yml b/.github/workflows/check-vla.yml new file mode 100644 index 0000000000..26f23cc33f --- /dev/null +++ b/.github/workflows/check-vla.yml @@ -0,0 +1,89 @@ +# GitHub action to build LAMMPS on Linux with gcc and -Werror=vla +name: "Check for Variable Length Arrays" + +on: + push: + branches: + - develop + pull_request: + branches: + - develop + + workflow_dispatch: + +jobs: + build: + name: Build with -Werror=vla + if: ${{ github.repository == 'lammps/lammps' }} + runs-on: ubuntu-latest + env: + CCACHE_DIR: ${{ github.workspace }}/.ccache + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 2 + + - name: Install extra packages + run: | + sudo apt-get install -y ccache \ + libeigen3-dev \ + libgsl-dev \ + libcurl4-openssl-dev \ + mold \ + mpi-default-bin \ + mpi-default-dev \ + ninja-build \ + python3-dev + + - name: Create Build Environment + run: mkdir build + + - name: Set up ccache + uses: actions/cache@v4 + with: + path: ${{ env.CCACHE_DIR }} + key: linux-vla-ccache-${{ github.sha }} + restore-keys: linux-vla-ccache- + + - name: Building LAMMPS via CMake + shell: bash + run: | + ccache -z + python3 -m venv linuxenv + source linuxenv/bin/activate + python3 -m pip install numpy + python3 -m pip install pyyaml + cmake -S cmake -B build \ + -C cmake/presets/most.cmake \ + -D CMAKE_CXX_COMPILER=g++ \ + -D CMAKE_C_COMPILER=gcc \ + -D CMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -D CMAKE_C_COMPILER_LAUNCHER=ccache \ + -D CMAKE_BUILD_TYPE=Debug \ + -D CMAKE_CXX_FLAGS_DEBUG="-Og -g -Werror=vla" \ + -D DOWNLOAD_POTENTIALS=off \ + -D BUILD_MPI=on \ + -D BUILD_SHARED_LIBS=off \ + -D BUILD_TOOLS=off \ + -D ENABLE_TESTING=off \ + -D MLIAP_ENABLE_ACE=on \ + -D MLIAP_ENABLE_PYTHON=off \ + -D PKG_AWPMD=on \ + -D PKG_GPU=on \ + -D GPU_API=opencl \ + -D PKG_LATBOLTZ=on \ + -D PKG_MDI=on \ + -D PKG_MANIFOLD=on \ + -D PKG_ML-PACE=on \ + -D PKG_ML-RANN=off \ + -D PKG_MOLFILE=on \ + -D PKG_RHEO=on \ + -D PKG_PTM=on \ + -D PKG_PYTHON=on \ + -D PKG_QTB=on \ + -D PKG_SMTBQ=on \ + -G Ninja + cmake --build build + ccache -s diff --git a/.github/workflows/compile-msvc.yml b/.github/workflows/compile-msvc.yml index 1a0f1ea62f..7560bc0549 100644 --- a/.github/workflows/compile-msvc.yml +++ b/.github/workflows/compile-msvc.yml @@ -1,5 +1,5 @@ -# GitHub action to build LAMMPS on Windows with Visual C++ -name: "Native Windows Compilation and Unit Tests" +# GitHub action to test LAMMPS on Windows with Visual C++ +name: "Windows Unit Tests" on: push: @@ -11,11 +11,17 @@ on: workflow_dispatch: +concurrency: + group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{github.event_name == 'pull_request'}} + jobs: build: name: Windows Compilation Test if: ${{ github.repository == 'lammps/lammps' }} runs-on: windows-latest + env: + CCACHE_DIR: ${{ github.workspace }}/.ccache steps: - name: Checkout repository @@ -23,36 +29,41 @@ jobs: with: fetch-depth: 2 + - name: Enable MSVC++ + uses: lammps/setup-msvc-dev@v3 + with: + arch: x64 + + - name: Install Ccache + run: | + choco install ccache ninja -y + + - name: Set up ccache + uses: actions/cache@v4 + with: + path: ${{ env.CCACHE_DIR }} + key: win-unit-ccache-${{ github.sha }} + restore-keys: win-unit-ccache- + - name: Select Python version uses: actions/setup-python@v5 with: python-version: '3.11' - name: Building LAMMPS via CMake - shell: bash run: | + ccache -z python3 -m pip install numpy python3 -m pip install pyyaml - nuget install MSMPIsdk - nuget install MSMPIDIST - cmake -C cmake/presets/windows.cmake \ - -D DOWNLOAD_POTENTIALS=off \ - -D PKG_PYTHON=on \ - -D WITH_PNG=off \ - -D WITH_JPEG=off \ - -S cmake -B build \ - -D BUILD_SHARED_LIBS=on \ - -D LAMMPS_EXCEPTIONS=on \ - -D ENABLE_TESTING=on - cmake --build build --config Release --parallel 2 + cmake -C cmake\presets\windows.cmake -D CMAKE_CXX_COMPILER=cl -D CMAKE_CXX_COMPILER_LAUNCHER=ccache -D CMAKE_C_COMPILER=cl -D CMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_Fortran_COMPILER="" -D DOWNLOAD_POTENTIALS=off -D PKG_PYTHON=on -D WITH_PNG=off -D WITH_JPEG=off -S cmake -B build -D BUILD_SHARED_LIBS=on -D ENABLE_TESTING=on -D CMAKE_BUILD_TYPE=Release -G Ninja + cmake --build build + ccache -s - name: Run LAMMPS executable - shell: bash run: | - ./build/Release/lmp.exe -h - ./build/Release/lmp.exe -in bench/in.lj + build\lmp.exe -h + build\lmp.exe -in bench\in.lj - name: Run Unit Tests working-directory: build - shell: bash - run: ctest -V -C Release -E FixTimestep:python_move_nve + run: ctest -V -E FixTimestep:python_move_nve diff --git a/.github/workflows/full-regression.yml b/.github/workflows/full-regression.yml new file mode 100644 index 0000000000..73e1803bb6 --- /dev/null +++ b/.github/workflows/full-regression.yml @@ -0,0 +1,108 @@ +# GitHub action to build LAMMPS on Linux and run regression tests +name: "Full Regression Test" + +on: + push: + branches: + - develop + + workflow_dispatch: + +jobs: + build: + name: Build LAMMPS + # restrict to official LAMMPS repository + if: ${{ github.repository == 'lammps/lammps' }} + runs-on: ubuntu-latest + env: + CCACHE_DIR: ${{ github.workspace }}/.ccache + strategy: + max-parallel: 8 + matrix: + idx: [ 0, 1, 2, 3, 4, 5, 6, 7 ] + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 2 + show-progress: false + + - name: Install extra packages + run: | + sudo apt-get install -y ccache ninja-build libeigen3-dev \ + libgsl-dev libcurl4-openssl-dev python3-dev \ + mpi-default-bin mpi-default-dev + + - name: Create Build Environment + run: mkdir build + + - name: Set up ccache + uses: actions/cache@v4 + with: + path: ${{ env.CCACHE_DIR }} + key: linux-full-ccache-${{ github.sha }} + restore-keys: linux-full-ccache- + + - name: Building LAMMPS via CMake + shell: bash + run: | + ccache -z + python3 -m venv linuxenv + source linuxenv/bin/activate + python3 -m pip install --upgrade pip + python3 -m pip install numpy pyyaml junit_xml + cmake -S cmake -B build \ + -C cmake/presets/gcc.cmake \ + -C cmake/presets/most.cmake \ + -D CMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -D CMAKE_C_COMPILER_LAUNCHER=ccache \ + -D BUILD_SHARED_LIBS=off \ + -D DOWNLOAD_POTENTIALS=off \ + -D PKG_MANIFOLD=on \ + -D PKG_ML-PACE=on \ + -D PKG_ML-RANN=on \ + -D PKG_RHEO=on \ + -D PKG_PTM=on \ + -D PKG_PYTHON=on \ + -D PKG_QTB=on \ + -D PKG_SMTBQ=on \ + -G Ninja + cmake --build build + ccache -s + + - name: Run Full Regression Tests + shell: bash + run: | + source linuxenv/bin/activate + python3 tools/regression-tests/run_tests.py \ + --lmp-bin=build/lmp \ + --config-file=tools/regression-tests/config_serial.yaml \ + --examples-top-level=examples --analyze --num-workers=8 + + python3 tools/regression-tests/run_tests.py \ + --lmp-bin=build/lmp \ + --config-file=tools/regression-tests/config_serial.yaml \ + --list-input=input-list-${{ matrix.idx }}.txt \ + --output-file=output-${{ matrix.idx }}.xml \ + --progress-file=progress-${{ matrix.idx }}.yaml \ + --log-file=run-${{ matrix.idx }}.log + + tar -cvf full-regression-test-${{ matrix.idx }}.tar run-${{ matrix.idx }}.log progress-${{ matrix.idx }}.yaml output-${{ matrix.idx }}.xml + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: full-regression-test-artifact-${{ matrix.idx }} + path: full-regression-test-${{ matrix.idx }}.tar + + merge: + runs-on: ubuntu-latest + needs: build + steps: + - name: Merge Artifacts + uses: actions/upload-artifact/merge@v4 + with: + name: merged-full-regresssion-artifact + pattern: full-regression-test-artifact-* + diff --git a/.github/workflows/quick-regression.yml b/.github/workflows/quick-regression.yml new file mode 100644 index 0000000000..6174d57ec2 --- /dev/null +++ b/.github/workflows/quick-regression.yml @@ -0,0 +1,117 @@ +# GitHub action to build LAMMPS on Linux and run selected regression tests +name: "Quick Regression Test" + +on: + pull_request: + branches: + - develop + + workflow_dispatch: + +concurrency: + group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{github.event_name == 'pull_request'}} + +jobs: + build: + name: Build LAMMPS + # restrict to official LAMMPS repository + if: ${{ github.repository == 'lammps/lammps' }} + runs-on: ubuntu-latest + env: + CCACHE_DIR: ${{ github.workspace }}/.ccache + strategy: + max-parallel: 4 + matrix: + idx: [ 0, 1, 2, 3 ] + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + show-progress: false + + - name: Install extra packages + run: | + sudo apt-get install -y ccache ninja-build libeigen3-dev \ + libgsl-dev libcurl4-openssl-dev python3-dev \ + mpi-default-bin mpi-default-dev + + - name: Create Build Environment + run: mkdir build + + - name: Set up ccache + uses: actions/cache@v4 + with: + path: ${{ env.CCACHE_DIR }} + key: linux-quick-ccache-${{ github.sha }} + restore-keys: linux-quick-ccache- + + - name: Building LAMMPS via CMake + shell: bash + run: | + ccache -z + python3 -m venv linuxenv + source linuxenv/bin/activate + python3 -m pip install --upgrade pip + python3 -m pip install numpy pyyaml junit_xml + cmake -S cmake -B build \ + -C cmake/presets/gcc.cmake \ + -C cmake/presets/most.cmake \ + -D CMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -D CMAKE_C_COMPILER_LAUNCHER=ccache \ + -D BUILD_SHARED_LIBS=off \ + -D DOWNLOAD_POTENTIALS=off \ + -D PKG_MANIFOLD=on \ + -D PKG_ML-PACE=on \ + -D PKG_ML-RANN=on \ + -D PKG_RHEO=on \ + -D PKG_PTM=on \ + -D PKG_PYTHON=on \ + -D PKG_QTB=on \ + -D PKG_SMTBQ=on \ + -G Ninja + cmake --build build + ccache -s + + - name: Run Regression Tests for Modified Styles + shell: bash + run: | + source linuxenv/bin/activate + python3 tools/regression-tests/run_tests.py \ + --lmp-bin=build/lmp \ + --config-file=tools/regression-tests/config_quick.yaml \ + --examples-top-level=examples \ + --quick-reference=tools/regression-tests/reference.yaml \ + --quick --quick-branch=origin/develop --quick-max=100 --num-workers=4 + + if [ -f input-list-${{ matrix.idx }}.txt ] + then \ + python3 tools/regression-tests/run_tests.py \ + --lmp-bin=build/lmp \ + --config-file=tools/regression-tests/config_quick.yaml \ + --list-input=input-list-${{ matrix.idx }}.txt \ + --output-file=output-${{ matrix.idx }}.xml \ + --progress-file=progress-${{ matrix.idx }}.yaml \ + --log-file=run-${{ matrix.idx }}.log + fi + + tar -cvf quick-regression-test-${{ matrix.idx }}.tar run-${{ matrix.idx }}.log progress-${{ matrix.idx }}.yaml output-${{ matrix.idx }}.xml + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: quick-regression-test-artifact-${{ matrix.idx }} + path: quick-regression-test-${{ matrix.idx }}.tar + + merge: + runs-on: ubuntu-latest + needs: build + steps: + - name: Merge Artifacts + uses: actions/upload-artifact/merge@v4 + with: + name: merged-quick-regresssion-artifact + pattern: quick-regression-test-artifact-* + diff --git a/.github/workflows/style-check.yml b/.github/workflows/style-check.yml new file mode 100644 index 0000000000..7be2c4fc46 --- /dev/null +++ b/.github/workflows/style-check.yml @@ -0,0 +1,37 @@ +# GitHub action to run checks from tools/coding_standard +name: "Check for Programming Style Conformance" + +on: + push: + branches: + - develop + pull_request: + branches: + - develop + + workflow_dispatch: + +concurrency: + group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{github.event_name == 'pull_request'}} + +jobs: + build: + name: Programming Style Conformance + if: ${{ github.repository == 'lammps/lammps' }} + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Run Tests + working-directory: src + shell: bash + run: | + make check-whitespace + make check-permissions + make check-homepage + make check-errordocs diff --git a/.github/workflows/unittest-linux.yml b/.github/workflows/unittest-linux.yml new file mode 100644 index 0000000000..dcf495ccc0 --- /dev/null +++ b/.github/workflows/unittest-linux.yml @@ -0,0 +1,86 @@ +# GitHub action to build LAMMPS on Linux and run standard unit tests +name: "Unittest for Linux /w LAMMPS_BIGBIG" + +on: + push: + branches: + - develop + pull_request: + branches: + - develop + + workflow_dispatch: + +concurrency: + group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{github.event_name == 'pull_request'}} + +jobs: + build: + name: Linux Unit Test + if: ${{ github.repository == 'lammps/lammps' }} + runs-on: ubuntu-latest + env: + CCACHE_DIR: ${{ github.workspace }}/.ccache + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 2 + + - name: Install extra packages + run: | + sudo apt-get install -y ccache \ + libeigen3-dev \ + libgsl-dev \ + libcurl4-openssl-dev \ + mold \ + ninja-build \ + python3-dev + + - name: Create Build Environment + run: mkdir build + + - name: Set up ccache + uses: actions/cache@v4 + with: + path: ${{ env.CCACHE_DIR }} + key: linux-unit-ccache-${{ github.sha }} + restore-keys: linux-unit-ccache- + + - name: Building LAMMPS via CMake + shell: bash + run: | + ccache -z + python3 -m venv linuxenv + source linuxenv/bin/activate + python3 -m pip install numpy + python3 -m pip install pyyaml + cmake -S cmake -B build \ + -C cmake/presets/gcc.cmake \ + -C cmake/presets/most.cmake \ + -D CMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -D CMAKE_C_COMPILER_LAUNCHER=ccache \ + -D BUILD_SHARED_LIBS=on \ + -D LAMMPS_SIZES=bigbig \ + -D DOWNLOAD_POTENTIALS=off \ + -D ENABLE_TESTING=on \ + -D MLIAP_ENABLE_ACE=on \ + -D MLIAP_ENABLE_PYTHON=off \ + -D PKG_MANIFOLD=on \ + -D PKG_ML-PACE=on \ + -D PKG_ML-RANN=on \ + -D PKG_RHEO=on \ + -D PKG_PTM=on \ + -D PKG_PYTHON=on \ + -D PKG_QTB=on \ + -D PKG_SMTBQ=on \ + -G Ninja + cmake --build build + ccache -s + + - name: Run Tests + working-directory: build + shell: bash + run: ctest -V diff --git a/.github/workflows/unittest-macos.yml b/.github/workflows/unittest-macos.yml index b0bc4b2727..0d478a9d6b 100644 --- a/.github/workflows/unittest-macos.yml +++ b/.github/workflows/unittest-macos.yml @@ -11,6 +11,10 @@ on: workflow_dispatch: +concurrency: + group: ${{ github.event_name }}-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{github.event_name == 'pull_request'}} + jobs: build: name: MacOS Unit Test diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 5b29fb6047..c68a925324 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -12,6 +12,11 @@ endif() if(POLICY CMP0075) cmake_policy(SET CMP0075 NEW) endif() +# set policy to silence warnings about requiring execute permission for find_program +# we use OLD because the python-config script for the Fedora MinGW cross-compiler requires it currently +if(POLICY CMP0109) + cmake_policy(SET CMP0109 OLD) +endif() # set policy to silence warnings about timestamps of downloaded files. review occasionally if it may be set to NEW if(POLICY CMP0135) cmake_policy(SET CMP0135 OLD) @@ -469,13 +474,13 @@ if(BUILD_OMP) if(CMAKE_VERSION VERSION_LESS 3.28) get_filename_component(_exe "${CMAKE_CXX_COMPILER}" NAME) if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND (_exe STREQUAL "crayCC")) - set(CMAKE_SHARED_LINKER_FLAGS_${BTYPE} "${CMAKE_SHARED_LINKER_FLAGS_${BTYPE} -fopenmp") - set(CMAKE_STATIC_LINKER_FLAGS_${BTYPE} "${CMAKE_STATIC_LINKER_FLAGS_${BTYPE} -fopenmp") + set(CMAKE_SHARED_LINKER_FLAGS_${BTYPE} "${CMAKE_SHARED_LINKER_FLAGS_${BTYPE}} -fopenmp") + set(CMAKE_STATIC_LINKER_FLAGS_${BTYPE} "${CMAKE_STATIC_LINKER_FLAGS_${BTYPE}} -fopenmp") endif() else() if(CMAKE_CXX_COMPILER_ID STREQUAL "CrayClang") - set(CMAKE_SHARED_LINKER_FLAGS_${BTYPE} "${CMAKE_SHARED_LINKER_FLAGS_${BTYPE} -fopenmp") - set(CMAKE_STATIC_LINKER_FLAGS_${BTYPE} "${CMAKE_STATIC_LINKER_FLAGS_${BTYPE} -fopenmp") + set(CMAKE_SHARED_LINKER_FLAGS_${BTYPE} "${CMAKE_SHARED_LINKER_FLAGS_${BTYPE}} -fopenmp") + set(CMAKE_STATIC_LINKER_FLAGS_${BTYPE} "${CMAKE_STATIC_LINKER_FLAGS_${BTYPE}} -fopenmp") endif() endif() endif() @@ -510,14 +515,6 @@ if(PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_ML-POD OR PKG_ELECTRODE OR BUILD_T endif() endif() -find_package(CURL QUIET COMPONENTS HTTP HTTPS) -option(WITH_CURL "Enable libcurl support" ${CURL_FOUND}) -if(WITH_CURL) - find_package(CURL REQUIRED COMPONENTS HTTP HTTPS) - target_compile_definitions(lammps PRIVATE -DLAMMPS_CURL) - target_link_libraries(lammps PRIVATE CURL::libcurl) -endif() - # tweak jpeg library names to avoid linker errors with MinGW cross-compilation set(JPEG_NAMES libjpeg libjpeg-62) find_package(JPEG QUIET) @@ -575,7 +572,7 @@ else() endif() foreach(PKG_WITH_INCL KSPACE PYTHON ML-IAP VORONOI COLVARS ML-HDNNP MDI MOLFILE NETCDF - PLUMED QMMM ML-QUIP SCAFACOS MACHDYN VTK KIM COMPRESS ML-PACE LEPTON RHEO) + PLUMED QMMM ML-QUIP SCAFACOS MACHDYN VTK KIM COMPRESS ML-PACE LEPTON RHEO EXTRA-COMMAND) if(PKG_${PKG_WITH_INCL}) include(Packages/${PKG_WITH_INCL}) endif() @@ -968,6 +965,9 @@ message(STATUS "<<< Compilers and Flags: >>> C++ Standard: ${CMAKE_CXX_STANDARD} C++ Flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}} Defines: ${DEFINES}") +if(CMAKE_CXX_COMPILER_LAUNCHER) + message(STATUS " Launcher: ${CMAKE_CXX_COMPILER_LAUNCHER}") +endif() get_target_property(OPTIONS lammps COMPILE_OPTIONS) if(OPTIONS) message(" Options: ${OPTIONS}") @@ -986,6 +986,9 @@ if(_index GREATER -1) Type: ${CMAKE_C_COMPILER_ID} Version: ${CMAKE_C_COMPILER_VERSION} C Flags: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BTYPE}}") + if(CMAKE_C_COMPILER_LAUNCHER) + message(STATUS " Launcher: ${CMAKE_C_COMPILER_LAUNCHER}") + endif() endif() message(STATUS "<<< Linker flags: >>>") message(STATUS "Executable name: ${LAMMPS_BINARY}") diff --git a/cmake/Modules/Documentation.cmake b/cmake/Modules/Documentation.cmake index 400109067f..7b8f4a5ba0 100644 --- a/cmake/Modules/Documentation.cmake +++ b/cmake/Modules/Documentation.cmake @@ -4,6 +4,8 @@ option(BUILD_DOC "Build LAMMPS HTML documentation" OFF) if(BUILD_DOC) + option(BUILD_DOC_VENV "Build LAMMPS documentation virtual environment" ON) + mark_as_advanced(BUILD_DOC_VENV) # Current Sphinx versions require at least Python 3.8 # use default (or custom) Python executable, if version is sufficient if(Python_VERSION VERSION_GREATER_EQUAL 3.8) @@ -18,14 +20,6 @@ if(BUILD_DOC) find_package(Doxygen 1.8.10 REQUIRED) file(GLOB DOC_SOURCES CONFIGURE_DEPENDS ${LAMMPS_DOC_DIR}/src/[^.]*.rst) - add_custom_command( - OUTPUT docenv - COMMAND ${VIRTUALENV} docenv - ) - - set(DOCENV_BINARY_DIR ${CMAKE_BINARY_DIR}/docenv/bin) - set(DOCENV_REQUIREMENTS_FILE ${LAMMPS_DOC_DIR}/utils/requirements.txt) - set(SPHINX_CONFIG_DIR ${LAMMPS_DOC_DIR}/utils/sphinx-config) set(SPHINX_CONFIG_FILE_TEMPLATE ${SPHINX_CONFIG_DIR}/conf.py.in) set(SPHINX_STATIC_DIR ${SPHINX_CONFIG_DIR}/_static) @@ -44,14 +38,32 @@ if(BUILD_DOC) # configure paths in conf.py, since relative paths change when file is copied configure_file(${SPHINX_CONFIG_FILE_TEMPLATE} ${DOC_BUILD_CONFIG_FILE}) - add_custom_command( - OUTPUT ${DOC_BUILD_DIR}/requirements.txt - DEPENDS docenv ${DOCENV_REQUIREMENTS_FILE} - COMMAND ${CMAKE_COMMAND} -E copy ${DOCENV_REQUIREMENTS_FILE} ${DOC_BUILD_DIR}/requirements.txt - COMMAND ${DOCENV_BINARY_DIR}/pip $ENV{PIP_OPTIONS} install --upgrade pip - COMMAND ${DOCENV_BINARY_DIR}/pip $ENV{PIP_OPTIONS} install --upgrade ${LAMMPS_DOC_DIR}/utils/converters - COMMAND ${DOCENV_BINARY_DIR}/pip $ENV{PIP_OPTIONS} install -r ${DOC_BUILD_DIR}/requirements.txt --upgrade - ) + if(BUILD_DOC_VENV) + add_custom_command( + OUTPUT docenv + COMMAND ${VIRTUALENV} docenv + ) + + set(DOCENV_BINARY_DIR ${CMAKE_BINARY_DIR}/docenv/bin) + set(DOCENV_REQUIREMENTS_FILE ${LAMMPS_DOC_DIR}/utils/requirements.txt) + + add_custom_command( + OUTPUT ${DOC_BUILD_DIR}/requirements.txt + DEPENDS docenv ${DOCENV_REQUIREMENTS_FILE} + COMMAND ${CMAKE_COMMAND} -E copy ${DOCENV_REQUIREMENTS_FILE} ${DOC_BUILD_DIR}/requirements.txt + COMMAND ${DOCENV_BINARY_DIR}/pip $ENV{PIP_OPTIONS} install --upgrade pip + COMMAND ${DOCENV_BINARY_DIR}/pip $ENV{PIP_OPTIONS} install --upgrade ${LAMMPS_DOC_DIR}/utils/converters + COMMAND ${DOCENV_BINARY_DIR}/pip $ENV{PIP_OPTIONS} install -r ${DOC_BUILD_DIR}/requirements.txt --upgrade + ) + + set(DOCENV_DEPS docenv ${DOC_BUILD_DIR}/requirements.txt) + if(NOT TARGET Sphinx::sphinx-build) + add_executable(Sphinx::sphinx-build IMPORTED GLOBAL) + set_target_properties(Sphinx::sphinx-build PROPERTIES IMPORTED_LOCATION "${DOCENV_BINARY_DIR}/sphinx-build") + endif() + else() + find_package(Sphinx) + endif() set(MATHJAX_URL "https://github.com/mathjax/MathJax/archive/3.1.3.tar.gz" CACHE STRING "URL for MathJax tarball") set(MATHJAX_MD5 "b81661c6e6ba06278e6ae37b30b0c492" CACHE STRING "MD5 checksum of MathJax tarball") @@ -97,8 +109,8 @@ if(BUILD_DOC) endif() add_custom_command( OUTPUT html - DEPENDS ${DOC_SOURCES} docenv ${DOC_BUILD_DIR}/requirements.txt ${DOXYGEN_XML_DIR}/index.xml ${BUILD_DOC_CONFIG_FILE} - COMMAND ${DOCENV_BINARY_DIR}/sphinx-build ${SPHINX_EXTRA_OPTS} -b html -c ${DOC_BUILD_DIR} -d ${DOC_BUILD_DIR}/doctrees ${LAMMPS_DOC_DIR}/src ${DOC_BUILD_DIR}/html + DEPENDS ${DOC_SOURCES} ${DOCENV_DEPS} ${DOXYGEN_XML_DIR}/index.xml ${BUILD_DOC_CONFIG_FILE} + COMMAND Sphinx::sphinx-build ${SPHINX_EXTRA_OPTS} -b html -c ${DOC_BUILD_DIR} -d ${DOC_BUILD_DIR}/doctrees ${LAMMPS_DOC_DIR}/src ${DOC_BUILD_DIR}/html COMMAND ${CMAKE_COMMAND} -E create_symlink Manual.html ${DOC_BUILD_DIR}/html/index.html COMMAND ${CMAKE_COMMAND} -E copy_directory ${LAMMPS_DOC_DIR}/src/PDF ${DOC_BUILD_DIR}/html/PDF COMMAND ${CMAKE_COMMAND} -E remove -f ${DOXYGEN_XML_DIR}/run.stamp diff --git a/cmake/Modules/FindSphinx.cmake b/cmake/Modules/FindSphinx.cmake new file mode 100644 index 0000000000..3718ecc543 --- /dev/null +++ b/cmake/Modules/FindSphinx.cmake @@ -0,0 +1,29 @@ +# Find sphinx-build +find_program(Sphinx_EXECUTABLE NAMES sphinx-build + PATH_SUFFIXES bin + DOC "Sphinx documenation build executable") +mark_as_advanced(Sphinx_EXECUTABLE) + +if(Sphinx_EXECUTABLE) + execute_process(COMMAND ${Sphinx_EXECUTABLE} --version + OUTPUT_VARIABLE sphinx_version + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE _sphinx_version_result) + + if(_sphinx_version_result) + message(WARNING "Unable to determine sphinx-build verison: ${_sphinx_version_result}") + else() + string(REGEX REPLACE "sphinx-build ([0-9.]+).*" + "\\1" + Sphinx_VERSION + "${sphinx_version}") + endif() + + if(NOT TARGET Sphinx::sphinx-build) + add_executable(Sphinx::sphinx-build IMPORTED GLOBAL) + set_target_properties(Sphinx::sphinx-build PROPERTIES IMPORTED_LOCATION "${Sphinx_EXECUTABLE}") + endif() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Sphinx REQUIRED_VARS Sphinx_EXECUTABLE VERSION_VAR Sphinx_VERSION) diff --git a/cmake/Modules/Packages/EXTRA-COMMAND.cmake b/cmake/Modules/Packages/EXTRA-COMMAND.cmake new file mode 100644 index 0000000000..13c98bafd3 --- /dev/null +++ b/cmake/Modules/Packages/EXTRA-COMMAND.cmake @@ -0,0 +1,10 @@ +# the geturl command needs libcurl + +find_package(CURL QUIET COMPONENTS HTTP HTTPS) +option(WITH_CURL "Enable libcurl support" ${CURL_FOUND}) +if(WITH_CURL) + find_package(CURL REQUIRED COMPONENTS HTTP HTTPS) + target_compile_definitions(lammps PRIVATE -DLAMMPS_CURL) + target_link_libraries(lammps PRIVATE CURL::libcurl) +endif() + diff --git a/cmake/Modules/Packages/KOKKOS.cmake b/cmake/Modules/Packages/KOKKOS.cmake index 3776d18a3e..bf0a18d324 100644 --- a/cmake/Modules/Packages/KOKKOS.cmake +++ b/cmake/Modules/Packages/KOKKOS.cmake @@ -127,7 +127,7 @@ if(PKG_KSPACE) ${KOKKOS_PKG_SOURCES_DIR}/grid3d_kokkos.cpp ${KOKKOS_PKG_SOURCES_DIR}/remap_kokkos.cpp) set(FFT_KOKKOS "KISS" CACHE STRING "FFT library for Kokkos-enabled KSPACE package") - set(FFT_KOKKOS_VALUES KISS FFTW3 MKL HIPFFT CUFFT) + set(FFT_KOKKOS_VALUES KISS FFTW3 MKL NVPL HIPFFT CUFFT MKL_GPU) set_property(CACHE FFT_KOKKOS PROPERTY STRINGS ${FFT_KOKKOS_VALUES}) validate_option(FFT_KOKKOS FFT_KOKKOS_VALUES) string(TOUPPER ${FFT_KOKKOS} FFT_KOKKOS) @@ -137,10 +137,8 @@ if(PKG_KSPACE) message(FATAL_ERROR "The CUDA backend of Kokkos requires either KISS FFT or CUFFT.") elseif(FFT_KOKKOS STREQUAL "KISS") message(WARNING "Using KISS FFT with the CUDA backend of Kokkos may be sub-optimal.") - target_compile_definitions(lammps PRIVATE -DFFT_KOKKOS_KISS) elseif(FFT_KOKKOS STREQUAL "CUFFT") find_package(CUDAToolkit REQUIRED) - target_compile_definitions(lammps PRIVATE -DFFT_KOKKOS_CUFFT) target_link_libraries(lammps PRIVATE CUDA::cufft) endif() elseif(Kokkos_ENABLE_HIP) @@ -152,10 +150,21 @@ if(PKG_KSPACE) elseif(FFT_KOKKOS STREQUAL "HIPFFT") include(DetectHIPInstallation) find_package(hipfft REQUIRED) - target_compile_definitions(lammps PRIVATE -DFFT_KOKKOS_HIPFFT) target_link_libraries(lammps PRIVATE hip::hipfft) endif() + elseif(FFT_KOKKOS STREQUAL "MKL_GPU") + if(NOT Kokkos_ENABLE_SYCL) + message(FATAL_ERROR "Using MKL_GPU FFT currently requires the SYCL backend of Kokkos.") + endif() + find_package(MKL REQUIRED) + target_link_libraries(lammps PRIVATE mkl_sycl_dft mkl_intel_ilp64 mkl_tbb_thread mkl_core tbb) + elseif(FFT_KOKKOS STREQUAL "MKL") + find_package(MKL REQUIRED) + elseif(FFT_KOKKOS STREQUAL "NVPL") + find_package(nvpl_fft REQUIRED) + target_link_libraries(lammps PRIVATE nvpl::fftw) endif() + target_compile_definitions(lammps PRIVATE -DFFT_KOKKOS_${FFT_KOKKOS}) endif() if(PKG_ML-IAP) diff --git a/cmake/Modules/Packages/KSPACE.cmake b/cmake/Modules/Packages/KSPACE.cmake index 1fdd898144..3801140fe0 100644 --- a/cmake/Modules/Packages/KSPACE.cmake +++ b/cmake/Modules/Packages/KSPACE.cmake @@ -10,7 +10,7 @@ if(${FFTW}_FOUND) else() set(FFT "KISS" CACHE STRING "FFT library for KSPACE package") endif() -set(FFT_VALUES KISS FFTW3 MKL) +set(FFT_VALUES KISS FFTW3 MKL NVPL) set_property(CACHE FFT PROPERTY STRINGS ${FFT_VALUES}) validate_option(FFT FFT_VALUES) string(TOUPPER ${FFT} FFT) @@ -41,6 +41,10 @@ elseif(FFT STREQUAL "MKL") target_compile_definitions(lammps PRIVATE -DFFT_MKL_THREADS) endif() target_link_libraries(lammps PRIVATE MKL::MKL) +elseif(FFT STREQUAL "NVPL") + find_package(nvpl_fft REQUIRED) + target_compile_definitions(lammps PRIVATE -DFFT_NVPL) + target_link_libraries(lammps PRIVATE nvpl::fftw) else() # last option is KISSFFT target_compile_definitions(lammps PRIVATE -DFFT_KISS) diff --git a/cmake/Modules/Packages/ML-PACE.cmake b/cmake/Modules/Packages/ML-PACE.cmake index 248b8eea76..8660898138 100644 --- a/cmake/Modules/Packages/ML-PACE.cmake +++ b/cmake/Modules/Packages/ML-PACE.cmake @@ -1,5 +1,11 @@ -set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2023.11.25.fix.tar.gz" CACHE STRING "URL for PACE evaluator library sources") +# PACE library support for ML-PACE package +# set policy to silence warnings about timestamps of downloaded files. review occasionally if it may be set to NEW +if(POLICY CMP0135) + cmake_policy(SET CMP0135 OLD) +endif() + +set(PACELIB_URL "https://github.com/ICAMS/lammps-user-pace/archive/refs/tags/v.2023.11.25.fix.tar.gz" CACHE STRING "URL for PACE evaluator library sources") set(PACELIB_MD5 "b45de9a633f42ed65422567e3ce56f9f" CACHE STRING "MD5 checksum of PACE evaluator library tarball") mark_as_advanced(PACELIB_URL) mark_as_advanced(PACELIB_MD5) diff --git a/cmake/Modules/Packages/PLUMED.cmake b/cmake/Modules/Packages/PLUMED.cmake index 8312589478..8dab157a24 100644 --- a/cmake/Modules/Packages/PLUMED.cmake +++ b/cmake/Modules/Packages/PLUMED.cmake @@ -1,5 +1,10 @@ # Plumed2 support for PLUMED package +# set policy to silence warnings about timestamps of downloaded files. review occasionally if it may be set to NEW +if(POLICY CMP0135) + cmake_policy(SET CMP0135 OLD) +endif() + # for supporting multiple concurrent plumed2 installations for debugging and testing set(PLUMED_SUFFIX "" CACHE STRING "Suffix for Plumed2 library") mark_as_advanced(PLUMED_SUFFIX) @@ -27,9 +32,9 @@ endif() # Note: must also adjust check for supported API versions in # fix_plumed.cpp when version changes from v2.n.x to v2.n+1.y -set(PLUMED_URL "https://github.com/plumed/plumed2/releases/download/v2.9.1/plumed-src-2.9.1.tgz" +set(PLUMED_URL "https://github.com/plumed/plumed2/releases/download/v2.9.2/plumed-src-2.9.2.tgz" CACHE STRING "URL for PLUMED tarball") -set(PLUMED_MD5 "c3b2d31479c1e9ce211719d40e9efbd7" CACHE STRING "MD5 checksum of PLUMED tarball") +set(PLUMED_MD5 "04862602a372c1013bdfee2d6d03bace" CACHE STRING "MD5 checksum of PLUMED tarball") mark_as_advanced(PLUMED_URL) mark_as_advanced(PLUMED_MD5) @@ -81,6 +86,9 @@ if((CMAKE_SYSTEM_NAME STREQUAL "Windows") AND (CMAKE_CROSSCOMPILING)) DEPENDS plumed_build COMMENT "Copying Plumed files" ) + if(CMAKE_PROJECT_NAME STREQUAL "lammps") + target_link_libraries(lammps INTERFACE LAMMPS::PLUMED) + endif() else() @@ -155,6 +163,9 @@ else() endif() set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) file(MAKE_DIRECTORY ${INSTALL_DIR}/include) + if(CMAKE_PROJECT_NAME STREQUAL "lammps") + target_link_libraries(lammps PRIVATE LAMMPS::PLUMED) + endif() else() find_package(PkgConfig REQUIRED) pkg_check_modules(PLUMED REQUIRED plumed${PLUMED_SUFFIX}) @@ -169,7 +180,9 @@ else() endif() set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_LINK_LIBRARIES "${PLUMED_LOAD}") set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PLUMED_INCLUDE_DIRS}") + if(CMAKE_PROJECT_NAME STREQUAL "lammps") + target_link_libraries(lammps PUBLIC LAMMPS::PLUMED) + endif() endif() endif() -target_link_libraries(lammps PRIVATE LAMMPS::PLUMED) diff --git a/cmake/packaging/LAMMPS_DMG_Background.xcf b/cmake/packaging/LAMMPS_DMG_Background.xcf new file mode 100644 index 0000000000..cff3222717 Binary files /dev/null and b/cmake/packaging/LAMMPS_DMG_Background.xcf differ diff --git a/cmake/presets/clang.cmake b/cmake/presets/clang.cmake index fce451d803..f55c5be44a 100644 --- a/cmake/presets/clang.cmake +++ b/cmake/presets/clang.cmake @@ -1,10 +1,10 @@ # preset that will enable clang/clang++ with support for MPI and OpenMP (on Linux boxes) # prefer flang over gfortran, if available -find_program(CLANG_FORTRAN NAMES flang gfortran f95) +find_program(CLANG_FORTRAN NAMES flang-new flang gfortran f95) set(ENV{OMPI_FC} ${CLANG_FORTRAN}) get_filename_component(_tmp_fc ${CLANG_FORTRAN} NAME) -if (_tmp_fc STREQUAL "flang") +if ((_tmp_fc STREQUAL "flang") OR (_tmp_fc STREQUAL "flang-new")) set(FC_STD_VERSION "-std=f2018") set(BUILD_MPI OFF) else() diff --git a/cmake/presets/kokkos-sycl-intel.cmake b/cmake/presets/kokkos-sycl-intel.cmake new file mode 100644 index 0000000000..3fc75e4b2d --- /dev/null +++ b/cmake/presets/kokkos-sycl-intel.cmake @@ -0,0 +1,18 @@ +# preset that enables KOKKOS and selects SYCL compilation with OpenMP +# enabled as well. Also sets some performance related compiler flags. +set(PKG_KOKKOS ON CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE) +set(Kokkos_ENABLE_SYCL ON CACHE BOOL "" FORCE) + +# hide deprecation warnings temporarily for stable release +set(Kokkos_ENABLE_DEPRECATION_WARNINGS OFF CACHE BOOL "" FORCE) + +set(CMAKE_CXX_COMPILER icpx CACHE STRING "" FORCE) +set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE) +set(CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE) +# Silence everything +set(CMAKE_CXX_FLAGS "-w" CACHE STRING "" FORCE) +set(CMAKE_EXE_LINKER_FLAGS "-fsycl -flink-huge-device-code -fsycl-max-parallel-link-jobs=32 -fsycl-targets=spir64_gen -Xsycl-target-backend \"-device 12.60.7\" " CACHE STRING "" FORCE) +set(CMAKE_TUNE_FLAGS "-O3 -fsycl -fsycl-device-code-split=per_kernel -fsycl-targets=spir64_gen" CACHE STRING "" FORCE) diff --git a/cmake/presets/kokkos-sycl.cmake b/cmake/presets/kokkos-sycl-nvidia.cmake similarity index 100% rename from cmake/presets/kokkos-sycl.cmake rename to cmake/presets/kokkos-sycl-nvidia.cmake diff --git a/doc/lammps.1 b/doc/lammps.1 index 00d8a4f61f..75581bd008 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,7 +1,7 @@ -.TH LAMMPS "1" "27 June 2024" "2024-06-27" +.TH LAMMPS "1" "29 August 2024" "2024-08-29" .SH NAME .B LAMMPS -\- Molecular Dynamics Simulator. Version 27 June 2024 +\- Molecular Dynamics Simulator. Version 29 August 2024 .SH SYNOPSIS .B lmp diff --git a/doc/msi2lmp.1 b/doc/msi2lmp.1 index 5cb0754e4f..075e25e3b9 100644 --- a/doc/msi2lmp.1 +++ b/doc/msi2lmp.1 @@ -1,4 +1,4 @@ -.TH MSI2LMP "1" "v3.9.10" "2023-03-10" +.TH MSI2LMP "1" "v3.9.11" "2024-09-06" .SH NAME .B MSI2LMP \- Converter for Materials Studio files to LAMMPS @@ -101,7 +101,7 @@ msi2lmp decane -c 0 -f oplsaa .SH COPYRIGHT -© 2003--2022 Sandia Corporation +© 2003--2024 Sandia Corporation This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as diff --git a/doc/src/Build_development.rst b/doc/src/Build_development.rst index 9cd938280b..3adec76abb 100644 --- a/doc/src/Build_development.rst +++ b/doc/src/Build_development.rst @@ -138,12 +138,27 @@ during development: The status of this automated testing can be viewed on `https://ci.lammps.org `_. -The scripts and inputs for integration, run, and regression testing -are maintained in a -`separate repository `_ -of the LAMMPS project on GitHub. A few tests are also run as GitHub -Actions and their configuration files are in the ``.github/workflows/`` -folder of the LAMMPS git tree. +The scripts and inputs for integration, run, and legacy regression +testing are maintained in a `separate repository +`_ of the LAMMPS project on +GitHub. A few tests are also run as GitHub Actions and their +configuration files are in the ``.github/workflows/`` folder of the +LAMMPS git tree. + +Regression tests can also be performed locally with the :ref:`regression +tester tool `. The tool checks if a given LAMMPS binary run +with selected input examples produces thermo output that is consistent +with the provided log files. The script can be run in one pass over all +available input files, but it can also first create multiple lists of +inputs or folders that can then be run with multiple workers +concurrently to speed things up. Another mode allows to do a quick +check of inputs that contain commands that have changes in the current +checkout branch relative to a git branch. This works similar to the two +pass mode, but will select only shorter runs and no more than 100 inputs +that are chosen randomly. This ensures that this test runs +significantly faster compared to the full test run. These test runs can +also be performed with instrumented LAMMPS binaries (see previous +section). The unit testing facility is integrated into the CMake build process of the LAMMPS source code distribution itself. It can be enabled by @@ -630,11 +645,35 @@ The following target are available for both, GNU make and CMake: GitHub command line interface ----------------------------- -GitHub is developing a `tool for the command line -`_ that interacts with the GitHub website via a -command called ``gh``. This can be extremely convenient when working -with a Git repository hosted on GitHub (like LAMMPS). It is thus highly -recommended to install it when doing LAMMPS development. +GitHub has developed a `command line tool `_ +to interact with the GitHub website via a command called ``gh``. +This is extremely convenient when working with a Git repository hosted +on GitHub (like LAMMPS). It is thus highly recommended to install it +when doing LAMMPS development. To use ``gh`` you must be within a git +checkout of a repository and you must obtain an authentication token +to connect your checkout with a GitHub user. This is done with the +command: ``gh auth login`` where you then have to follow the prompts. +Here are some examples: -The capabilities of the ``gh`` command is continually expanding, so -please see the documentation at https://cli.github.com/manual/ +.. list-table:: + :header-rows: 1 + :widths: 34 66 + + * - Command + - Description + * - ``gh pr list`` + - List currently open pull requests + * - ``gh pr checks 404`` + - Shows the status of all checks for pull request #404 + * - ``gh pr view 404`` + - Shows the description and recent comments for pull request #404 + * - ``gh co 404`` + - Check out the branch from pull request #404; set up for pushing changes + * - ``gh issue list`` + - List currently open issues + * - ``gh issue view 430 --comments`` + - Shows the description and all comments for issue #430 + +The capabilities of the ``gh`` command are continually expanding, so +for more details please see the documentation at https://cli.github.com/manual/ +or use ``gh --help`` or ``gh --help`` for embedded help. diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index aea039f0bc..ac7edc7678 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -7,6 +7,8 @@ in addition to .. list-table:: :align: center :header-rows: 1 + :widths: 50 50 + :width: 80% * - CMake build - Traditional make @@ -115,7 +117,7 @@ GPU package To build with this package, you must choose options for precision and which GPU hardware to build for. The GPU package currently supports -three different types of backends: OpenCL, CUDA and HIP. +three different types of back ends: OpenCL, CUDA and HIP. CMake build ^^^^^^^^^^^ @@ -205,7 +207,7 @@ necessary for ``hipcc`` and the linker to work correctly. .. versionadded:: 3Aug2022 Using the CHIP-SPV implementation of HIP is supported. It allows one to -run HIP code on Intel GPUs via the OpenCL or Level Zero backends. To use +run HIP code on Intel GPUs via the OpenCL or Level Zero back ends. To use CHIP-SPV, you must set ``-DHIP_USE_DEVICE_SORT=OFF`` in your CMake command line as CHIP-SPV does not yet support hipCUB. As of Summer 2022, the use of HIP for Intel GPUs is experimental. You should only use this @@ -751,14 +753,27 @@ This list was last updated for version 4.3.0 of the Kokkos library. platform-appropriate vendor library: rocFFT on AMD GPUs or cuFFT on NVIDIA GPUs. - To simplify compilation, five preset files are included in the + For Intel GPUs using SYCL, set these variables: + + .. code-block:: bash + + -D Kokkos_ARCH_HOSTARCH=yes # HOSTARCH = HOST from list above + -D Kokkos_ARCH_GPUARCH=yes # GPUARCH = GPU from list above + -D Kokkos_ENABLE_SYCL=yes + -D Kokkos_ENABLE_OPENMP=yes + -D FFT_KOKKOS=MKL_GPU + + This will enable FFTs on the GPU using the oneMKL library. + + To simplify compilation, six preset files are included in the ``cmake/presets`` folder, ``kokkos-serial.cmake``, ``kokkos-openmp.cmake``, ``kokkos-cuda.cmake``, - ``kokkos-hip.cmake``, and ``kokkos-sycl.cmake``. They will enable - the KOKKOS package and enable some hardware choices. For GPU - support those preset files must be customized to match the - hardware used. So to compile with CUDA device parallelization with - some common packages enabled, you can do the following: + ``kokkos-hip.cmake``, ``kokkos-sycl-nvidia.cmake``, and + ``kokkos-sycl-intel.cmake``. They will enable the KOKKOS + package and enable some hardware choices. For GPU support those + preset files must be customized to match the hardware used. So + to compile with CUDA device parallelization with some common + packages enabled, you can do the following: .. code-block:: bash @@ -830,6 +845,18 @@ This list was last updated for version 4.3.0 of the Kokkos library. FFT_INC = -DFFT_HIPFFT # enable use of hipFFT (optional) FFT_LIB = -lhipfft # link to hipFFT library + For Intel GPUs using SYCL: + + .. code-block:: make + + KOKKOS_DEVICES = SYCL + KOKKOS_ARCH = HOSTARCH,GPUARCH # HOSTARCH = HOST from list above that is + # hosting the GPU + # GPUARCH = GPU from list above + FFT_INC = -DFFT_KOKKOS_MKL_GPU # enable use of oneMKL for Intel GPUs (optional) + # link to oneMKL FFT library + FFT_LIB = -lmkl_sycl_dft -lmkl_intel_ilp64 -lmkl_tbb_thread -mkl_core -ltbb + Advanced KOKKOS compilation settings ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -1517,6 +1544,11 @@ in lib/pace or somewhere else, which must be done before building LAMMPS with this package. The code for the library can be found at: `https://github.com/ICAMS/lammps-user-pace/ `_ +Instead of including the ML-PACE package directly into LAMMPS, it +is also possible to skip this step and build the ML-PACE package as +a plugin using the CMake script files in the ``examples/PACKAGE/pace/plugin`` +folder and then load this plugin at runtime with the :doc:`plugin command `. + .. tabs:: .. tab:: CMake build @@ -1701,6 +1733,11 @@ try a different one, switch to a different build system, consider a global PLUMED installation or consider downloading PLUMED during the LAMMPS build. +Instead of including the PLUMED package directly into LAMMPS, it +is also possible to skip this step and build the PLUMED package as +a plugin using the CMake script files in the ``examples/PACKAGE/plumed/plugin`` +folder and then load this plugin at runtime with the :doc:`plugin command `. + .. tabs:: .. tab:: CMake build diff --git a/doc/src/Build_settings.rst b/doc/src/Build_settings.rst index dc79cc3ed9..e4a53ddee7 100644 --- a/doc/src/Build_settings.rst +++ b/doc/src/Build_settings.rst @@ -67,10 +67,10 @@ libraries and better pipelining for packing and communication. .. code-block:: bash - -D FFT=value # FFTW3 or MKL or KISS, default is FFTW3 if found, - # else KISS - -D FFT_KOKKOS=value # FFTW3 or MKL or KISS or CUFFT or HIPFFT, - # default is KISS + -D FFT=value # FFTW3 or MKL or NVPL or KISS, + # default is FFTW3 if found, else KISS + -D FFT_KOKKOS=value # FFTW3 or MKL or NVPL or KISS or CUFFT + # or HIPFFT or MKL_GPU, default is KISS -D FFT_SINGLE=value # yes or no (default), no = double precision -D FFT_PACK=value # array (default) or pointer or memcpy -D FFT_USE_HEFFTE=value # yes or no (default), yes links to heFFTe @@ -103,6 +103,8 @@ libraries and better pipelining for packing and communication. -D FFT_HEFFTE_BACKEND=value # FFTW or MKL or empty/undefined for the stock # heFFTe back end -D Heffte_ROOT=path # path to an existing heFFTe installation + -D nvpl_fft_INCLUDE_DIR=path # path to NVPL FFT include files + -D nvpl_fft_LIBRARY_DIR=path # path to NVPL FFT libraries .. note:: @@ -121,9 +123,10 @@ libraries and better pipelining for packing and communication. .. code-block:: make FFT_INC = -DFFT_ # where is KISS (default), FFTW3, - # FFTW (same as FFTW3), or MKL + # FFTW (same as FFTW3), NVPL, or MKL FFT_INC = -DFFT_KOKKOS_ # where is KISS (default), FFTW3, - # FFTW (same as FFTW3), MKL, CUFFT, or HIPFFT + # FFTW (same as FFTW3), NVPL, MKL, CUFFT, + # HIPFFT, or MKL_GPU FFT_INC = -DFFT_SINGLE # do not specify for double precision FFT_INC = -DFFT_FFTW_THREADS # enable using threaded FFTW3 libraries FFT_INC = -DFFT_MKL_THREADS # enable using threaded FFTs with MKL libraries @@ -141,6 +144,9 @@ libraries and better pipelining for packing and communication. # cuFFT either precision FFT_LIB = -lcufft + # MKL_GPU either precision + FFT_LIB = -lmkl_sycl_dft -lmkl_intel_ilp64 -lmkl_tbb_thread -lmkl_core -ltbb + # FFTW3 double precision FFT_LIB = -lfftw3 @@ -165,6 +171,10 @@ libraries and better pipelining for packing and communication. # MKL with automatic runtime selection of interface libs FFT_LIB = -lmkl_rt + # threaded NVPL FFT + FFT_LIB = -lnvpl_fftw + + As with CMake, you do not need to set paths in ``FFT_INC`` or ``FFT_PATH``, if the compiler can find the FFT header and library files in its default search path. You must specify ``FFT_LIB`` @@ -218,10 +228,15 @@ The Intel MKL math library is part of the Intel compiler suite. It can be used with the Intel or GNU compiler (see the ``FFT_LIB`` setting above). +The NVIDIA Performance Libraries (NVPL) FFT library is optimized for NVIDIA +Grace Armv9.0 architecture. You can download it from https://docs.nvidia.com/nvpl/ + The cuFFT and hipFFT FFT libraries are packaged with NVIDIA's CUDA and AMD's HIP installations, respectively. These FFT libraries require the Kokkos acceleration package to be enabled and the Kokkos back end to be -GPU-resident (i.e., HIP or CUDA). +GPU-resident (i.e., HIP or CUDA). Similarly, GPU offload of FFTs on +Intel GPUs with oneMKL currently requires the Kokkos acceleration +package to be enabled with the SYCL back end. Performing 3d FFTs in parallel can be time-consuming due to data access and required communication. This cost can be reduced by performing @@ -492,7 +507,7 @@ during a run. Support for downloading files ----------------------------- -.. versionadded:: TBD +.. versionadded:: 29Aug2024 The :doc:`geturl command ` command uses the `the libcurl library `_ to download files. This requires that diff --git a/doc/src/Commands_removed.rst b/doc/src/Commands_removed.rst index f902a61515..ea8b3d4b03 100644 --- a/doc/src/Commands_removed.rst +++ b/doc/src/Commands_removed.rst @@ -171,7 +171,7 @@ instructions to install i-PI from PyPI via pip are provided. LAMMPS shell ------------ -.. versionchanged:: TBD +.. versionchanged:: 29Aug2024 The LAMMPS shell has been removed from the LAMMPS distribution. Users are encouraged to use the :ref:`LAMMPS-GUI ` tool instead. diff --git a/doc/src/Developer_plugins.rst b/doc/src/Developer_plugins.rst index 4cfdc92504..354350dde7 100644 --- a/doc/src/Developer_plugins.rst +++ b/doc/src/Developer_plugins.rst @@ -283,7 +283,7 @@ in the ``examples/kim/plugin`` folder. No changes to the sources of the KIM package themselves are needed; only the plugin interface and loader code needs to be added. This example only supports building with CMake, but is probably a more typical example. To compile you need to run CMake -with -DLAMMPS_SOURCE_DIR=. Other +with ``-DLAMMPS_SOURCE_DIR=``. Other configuration setting are identical to those for compiling LAMMPS. A second example for a plugin from a package is in the diff --git a/doc/src/Developer_write.rst b/doc/src/Developer_write.rst index ef4d06a5f6..54b1b6eb81 100644 --- a/doc/src/Developer_write.rst +++ b/doc/src/Developer_write.rst @@ -12,3 +12,4 @@ details are provided for writing code for LAMMPS. Developer_write_pair Developer_write_fix + Developer_write_command diff --git a/doc/src/Developer_write_command.rst b/doc/src/Developer_write_command.rst new file mode 100644 index 0000000000..16ac2092f6 --- /dev/null +++ b/doc/src/Developer_write_command.rst @@ -0,0 +1,348 @@ +Writing a new command style +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Command styles allow to do system manipulations or interfaces to the +operating system. + +In the text below, we will discuss the implementation of one example. As +shown on the page for :doc:`writing or extending command styles +`, in order to implement a new command style, a new class +must be written that is either directly or indirectly derived from the +``Command`` class. There is just one method that must be implemented: +``Command::command()``. In addition, a custom constructor is needed to get +access to the members of the ``LAMMPS`` class like the ``Error`` class to +print out error messages. The ``Command::command()`` method processes the +arguments passed to the command in the input and executes it. Any other +methods would be for the convenience of implementation of the new command. + +In general, new command styles should be added to the :ref:`EXTRA-COMMAND +package `. If you feel that your contribution should be +added to a different package, please consult with the :doc:`LAMMPS +developers ` first. The contributed code needs to support +the :doc:`traditional GNU make build process ` **and** the +:doc:`CMake build process `. + +---- + +Case 1: Implementing the geturl command +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this section, we will describe the procedure of adding a simple command +style to LAMMPS: the :doc:`geturl command ` that allows to download +files directly without having to rely on an external program like "wget" or +"curl". The complete implementation can be found in the files +``src/EXTRA-COMMAND/geturl.cpp`` and ``src/EXTRA-COMMAND/geturl.h`` of the +LAMMPS source code. + +Interfacing the *libcurl* library +""""""""""""""""""""""""""""""""" + +Rather than implementing the various protocols for downloading files, we +rely on an external library: `libcurl library `_. +This requires that the library and its headers are installed. For the +traditional GNU make build system, this simply requires edits to the machine +makefile to add compilation flags like for other libraries. For the CMake +based build system, we need to add some lines to the file +``cmake/Modules/Packages/EXTRA-COMMAND.cmake``: + +.. code-block:: cmake + + find_package(CURL QUIET COMPONENTS HTTP HTTPS) + option(WITH_CURL "Enable libcurl support" ${CURL_FOUND}) + if(WITH_CURL) + find_package(CURL REQUIRED COMPONENTS HTTP HTTPS) + target_compile_definitions(lammps PRIVATE -DLAMMPS_CURL) + target_link_libraries(lammps PRIVATE CURL::libcurl) + endif() + +The first ``find_package()`` command uses a built-in CMake module to find +an existing *libcurl* installation with development headers and support for +using the HTTP and HTTPS protocols. The "QUIET" flag ensures that there is +no screen output and no error if the search fails. The status of the search +is recorded in the "${CURL_FOUND}" variable. That variable sets the default +of the WITH_CURL option, which toggles whether support for *libcurl* is included +or not. + +The second ``find_package()`` uses the "REQUIRED" flag to produce an error +if the WITH_CURL option was set to ``True``, but no suitable *libcurl* +implementation with development support was found. This construct is used +so that the CMake script code inside the ``if(WITH_CURL)`` and ``endif()`` +block can be expanded later to download and compile *libcurl* as part of the +LAMMPS build process, if it is not found locally. The +``target_compile_definitions()`` function added the define ``-DLAMMPS_CURL`` +to the compilation flags when compiling objects for the LAMMPS library. +This allows to always compile the :doc:`geturl command `, but use +pre-processing to compile in the interface to *libcurl* only when it is +present and usable and otherwise stop with an error message about the +unavailability of *libcurl* to execute the functionality of the command. + +Header file +""""""""""" + +The first segment of any LAMMPS source should be the copyright and +license statement. Note the marker in the first line to indicate to +editors like emacs that this file is a C++ source, even though the .h +extension suggests a C source (this is a convention inherited from the +very beginning of the C++ version of LAMMPS). + +.. code-block:: c++ + + /* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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. + ------------------------------------------------------------------------- */ + +Every command style must be registered in LAMMPS by including the following +lines of code in the second part of the header after the copyright +message and before the include guards for the class definition: + +.. code-block:: c++ + + #ifdef COMMAND_CLASS + // clang-format off + CommandStyle(geturl,GetURL); + // clang-format on + #else + +This block between ``#ifdef COMMAND_CLASS`` and ``#else`` will be +included by the ``Input`` class in ``input.cpp`` to build a map of +"factory functions" that will create an instance of a Command class +and call its ``command()`` method. The map connects the name of the +command ``geturl`` with the name of the class ``GetURL``. During +compilation, LAMMPS constructs a file ``style_command.h`` that contains +``#include`` statements for all "installed" command styles. Before +including ``style_command.h`` into ``input.cpp``, the ``COMMAND_CLASS`` +define is set and the ``CommandStyle(name,class)`` macro defined. The +code of the macro adds the installed command styles to the "factory map" +which enables the ``Input`` to execute the command. + +The list of header files to include in ``style_command.h`` is automatically +updated by the build system if there are new files, so the presence of the +new header file in the ``src/EXTRA-COMMAND`` folder and the enabling of the +EXTRA-COMMAND package will trigger LAMMPS to include the new command style +when it is (re-)compiled. The "// clang-format" format comments are needed +so that running :ref:`clang-format ` on the file will not +insert unwanted blanks which would break the ``CommandStyle`` macro. + +The third part of the header file is the actual class definition of the +``GetURL`` class. This has the custom constructor and the ``command()`` +method implemented by this command style. For the constructor there is +nothing to do but to pass the ``lmp`` pointer to the base class. Since the +``command()`` method is labeled "virtual" in the base class, it must be +given the "override" property. + +.. code-block:: c++ + + #ifndef LMP_GETURL_H + #define LMP_GETURL_H + + #include "command.h" + + namespace LAMMPS_NS { + + class GetURL : public Command { + public: + GetURL(class LAMMPS *lmp) : Command(lmp) {}; + void command(int, char **) override; + }; + } // namespace LAMMPS_NS + #endif + #endif + +The "override" property helps to detect unexpected mismatches because +compilation will stop with an error in case the signature of a function +is changed in the base class without also changing it in all derived +classes. + +Implementation file +""""""""""""""""""" + +We move on to the implementation of the ``GetURL`` class in the +``geturl.cpp`` file. This file also starts with a LAMMPS copyright and +license header. Below that notice is typically the space where comments may +be added with additional information about this specific file, the +author(s), affiliation(s), and email address(es). This way the contributing +author(s) can be easily contacted, when there are questions about the +implementation later. Since the file(s) may be around for a long time, it +is beneficial to use some kind of "permanent" email address, if possible. + +.. code-block:: c++ + + /* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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: Axel Kohlmeyer (Temple U), + ------------------------------------------------------------------------- */ + + #include "geturl.h" + + #include "comm.h" + #include "error.h" + + #if defined(LAMMPS_CURL) + #include + #endif + + using namespace LAMMPS_NS; + +The second section of the implementation file has various include +statements. The include file for the class header has to come first, then a +couple of LAMMPS classes (sorted alphabetically) followed by the header for +the *libcurl* interface. This is wrapped into an ``#ifdef`` block so that +LAMMPS will compile this file without error when the *libcurl* header is not +available and thus the define not set. The final statement of this segment +imports the ``LAMMPS_NS::`` namespace globally for this file. This way, all +LAMMPS specific functions and classes do not have to be prefixed with +``LAMMPS_NS::``. + +The command() function (required) +""""""""""""""""""""""""""""""""" + +Since the required custom constructor is trivial and implemented in the +header, there is only one function that must be implemented for a command +style and that is the ``command()`` function. + +.. code-block:: c++ + + void GetURL::command(int narg, char **arg) + { + #if !defined(LAMMPS_CURL) + error->all(FLERR, "LAMMPS has not been compiled with libcurl support"); + #else + if (narg < 1) utils::missing_cmd_args(FLERR, "geturl", error); + int verify = 1; + int overwrite = 1; + int verbose = 0; + +This first part also has the ``#ifdef`` block depending on the LAMMPS_CURL +define. This way the command will simply print an error, if *libcurl* is +not available but will not fail to compile. Furthermore, it sets the +defaults for the following optional arguments. + +.. code-block:: c++ + + // process arguments + + std::string url = arg[0]; + + // sanity check + + if ((url.find(':') == std::string::npos) || (url.find('/') == std::string::npos)) + error->all(FLERR, "URL '{}' is not a supported URL", url); + + std::string output = url.substr(url.find_last_of('/') + 1); + if (output.empty()) error->all(FLERR, "URL '{}' must end in a file string", url); + +This block stores the positional, i.e. non-optional argument of the URL to +be downloaded and adds a couple of sanity checks on the string to make sure it is +a valid URL. Also it derives the default name of the output file from the URL. + +.. code-block:: c++ + + int iarg = 1; + while (iarg < narg) { + if (strcmp(arg[iarg], "output") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "geturl output", error); + output = arg[iarg + 1]; + ++iarg; + } else if (strcmp(arg[iarg], "overwrite") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "geturl overwrite", error); + overwrite = utils::logical(FLERR, arg[iarg + 1], false, lmp); + ++iarg; + } else if (strcmp(arg[iarg], "verify") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "geturl verify", error); + verify = utils::logical(FLERR, arg[iarg + 1], false, lmp); + ++iarg; + } else if (strcmp(arg[iarg], "verbose") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "geturl verbose", error); + verbose = utils::logical(FLERR, arg[iarg + 1], false, lmp); + ++iarg; + } else { + error->all(FLERR, "Unknown geturl keyword: {}", arg[iarg]); + } + ++iarg; + } + +This block parses the optional arguments following the URL and stops with an +error if there are arguments missing or an unknown argument is encountered. + +.. code-block:: c++ + + // only download files from rank 0 + + if (comm->me != 0) return; + + if (!overwrite && platform::file_is_readable(output)) return; + + // open output file for writing + + FILE *out = fopen(output.c_str(), "wb"); + if (!out) + error->all(FLERR, "Cannot open output file {} for writing: {}", output, utils::getsyserror()); + +Here all MPI ranks other than 0 will return, so that the URL download will +only happen from a single MPI rank. For that rank the output file is opened +for writing using the C library function ``fopen()``. + +.. code-block:: c++ + + // initialize curl and perform download + + CURL *curl; + curl_global_init(CURL_GLOBAL_DEFAULT); + curl = curl_easy_init(); + if (curl) { + (void) curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + (void) curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *) out); + (void) curl_easy_setopt(curl, CURLOPT_FILETIME, 1L); + (void) curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L); + if (verbose && screen) { + (void) curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); + (void) curl_easy_setopt(curl, CURLOPT_STDERR, (void *) screen); + } + if (!verify) { + (void) curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); + (void) curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); + } + auto res = curl_easy_perform(curl); + if (res != CURLE_OK) { + long response = 0L; + curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response); + error->one(FLERR, "Download of {} failed with: {} {}", output, curl_easy_strerror(res), + response); + } + curl_easy_cleanup(curl); + +This block now implements the actual URL download with the selected options +via the "easy" interface of *libcurl*. For the details of what these +function calls do, please have a look at the `*libcurl documentation +`_. + + .. code-block:: c++ + + } + curl_global_cleanup(); + fclose(out); + #endif + } + +Finally, the previously opened file is closed and the command is complete. diff --git a/doc/src/Developer_write_pair.rst b/doc/src/Developer_write_pair.rst index 1433effc54..5d5e081042 100644 --- a/doc/src/Developer_write_pair.rst +++ b/doc/src/Developer_write_pair.rst @@ -160,7 +160,7 @@ message and before the include guards for the class definition: #endif -This block of between ``#ifdef PAIR_CLASS`` and ``#else`` will be +This block between ``#ifdef PAIR_CLASS`` and ``#else`` will be included by the ``Force`` class in ``force.cpp`` to build a map of "factory functions" that will create an instance of these classes and return a pointer to it. The map connects the name of the pair style, diff --git a/doc/src/Howto_cmake.rst b/doc/src/Howto_cmake.rst index 55e5b171a6..43aa519293 100644 --- a/doc/src/Howto_cmake.rst +++ b/doc/src/Howto_cmake.rst @@ -348,7 +348,7 @@ Some common LAMMPS specific variables * - ``FFT`` - select which FFT library to use: ``FFTW3``, ``MKL``, ``KISS`` (default, unless FFTW3 is found) * - ``FFT_KOKKOS`` - - select which FFT library to use in Kokkos-enabled styles: ``FFTW3``, ``MKL``, ``HIPFFT``, ``CUFFT``, ``KISS`` (default) + - select which FFT library to use in Kokkos-enabled styles: ``FFTW3``, ``MKL``, ``HIPFFT``, ``CUFFT``, ``MKL_GPU``, ``KISS`` (default) * - ``FFT_SINGLE`` - select whether to use single precision FFTs (default: ``off``) * - ``WITH_JPEG`` diff --git a/doc/src/Howto_lammps_gui.rst b/doc/src/Howto_lammps_gui.rst index dc7d02425e..21e6a31ccc 100644 --- a/doc/src/Howto_lammps_gui.rst +++ b/doc/src/Howto_lammps_gui.rst @@ -19,9 +19,9 @@ to the online LAMMPS documentation for known LAMMPS commands and styles. Pre-compiled, ready-to-use LAMMPS-GUI executables for Linux x86\_64 (Ubuntu 20.04LTS or later and compatible), macOS (version 11 aka Big Sur or later), and Windows (version 10 or later) :ref:`are available - ` for download. None-MPI LAMMPS executables for - running LAMMPS from the command line and :doc:`some LAMMPS tools ` - are also included. + ` for download. Non-MPI LAMMPS executables (as + ``lmp``) for running LAMMPS from the command line and :doc:`some + LAMMPS tools ` compiled executables are also included. The source code for LAMMPS-GUI is included in the LAMMPS source code distribution and can be found in the ``tools/lammps-gui`` folder. It @@ -29,40 +29,50 @@ to the online LAMMPS documentation for known LAMMPS commands and styles. `. LAMMPS-GUI tries to provide an experience similar to what people -traditionally would have running LAMMPS using a command line window -and the console LAMMPS executable but just rolled into a single executable: +traditionally would have running LAMMPS using a command line window and +the console LAMMPS executable but just rolled into a single executable: - writing & editing LAMMPS input files with a text editor - run LAMMPS on those input file with selected command line flags -- use or extract data from the created files and visualize it with - either a molecular visualization program or a plotting program +- extract data from the created files and visualize it with and + external software That procedure is quite effective for people proficient in using the command line, as that allows them to use tools for the individual steps -that they are most comfortable with. It is often *required* to adopt -this workflow when running LAMMPS simulations on high-performance +that they are most comfortable with. In fact, it is often *required* to +adopt this workflow when running LAMMPS simulations on high-performance computing facilities. The main benefit of using LAMMPS-GUI is that many basic tasks can be -done directly from the GUI without switching to a text console window or -using external programs, let alone writing scripts to extract data from -the generated output. It also integrates well with graphical desktop -environments where the `.lmp` filename extension can be registered with -LAMMPS-GUI as the executable to launch when double clicking on such -files. Also, LAMMPS-GUI has support for drag-n-drop, i.e. an input -file can be selected and then moved and dropped on the LAMMPS-GUI -executable, and LAMMPS-GUI will launch and read the file into its -buffer. +done directly from the GUI **without** switching to a text console +window or using external programs, let alone writing scripts to extract +data from the generated output. It also integrates well with graphical +desktop environments where the `.lmp` filename extension can be +registered with LAMMPS-GUI as the executable to launch when double +clicking on such files. Also, LAMMPS-GUI has support for drag-n-drop, +i.e. an input file can be selected and then moved and dropped on the +LAMMPS-GUI executable, and LAMMPS-GUI will launch and read the file into +its buffer. In many cases LAMMPS-GUI will be integrated into the +graphical desktop environment and can be launched like other +applications. LAMMPS-GUI thus makes it easier for beginners to get started running simple LAMMPS simulations. It is very suitable for tutorials on LAMMPS since you only need to learn how to use a single program for most tasks and thus time can be saved and people can focus on learning LAMMPS. -The tutorials at https://lammpstutorials.github.io/ were specifically +The tutorials at https://lammpstutorials.github.io/ are specifically updated for use with LAMMPS-GUI. Another design goal is to keep the barrier low when replacing part of -the functionality of LAMMPS-GUI with external tools. +the functionality of LAMMPS-GUI with external tools. That said, LAMMPS-GUI +has some unique functionality that is not found elsewhere: + +- auto-adapting to features available in the integrated LAMMPS library +- interactive visualization using the :doc:`dump image ` + command with the option to copy-paste the resulting settings +- automatic slide show generation from dump image out at runtime +- automatic plotting of thermodynamics data at runtime +- inspection of binary restart files The following text provides a detailed tour of the features and functionality of LAMMPS-GUI. Suggestions for new features and @@ -134,9 +144,13 @@ When LAMMPS-GUI starts, it shows the main window, labeled *Editor*, with either an empty buffer or the contents of the file used as argument. In the latter case it may look like the following: -.. image:: JPG/lammps-gui-main.png - :align: center - :scale: 50% +.. |gui-main1| image:: JPG/lammps-gui-main.png + :width: 48% + +.. |gui-main2| image:: JPG/lammps-gui-dark.png + :width: 48% + +|gui-main1| |gui-main2| There is the typical menu bar at the top, then the main editor buffer, and a status bar at the bottom. The input file contents are shown @@ -156,7 +170,7 @@ and then starts with an empty buffer in the *Editor* window. If arguments are given LAMMPS will use first command line argument as the file name for the *Editor* buffer and reads its contents into the buffer, if the file exists. All further arguments are ignored. Files can also be opened via -the ``File`` menu, the `Ctrl-O` (`Command-O` on macOS) keyboard shortcut +the *File* menu, the `Ctrl-O` (`Command-O` on macOS) keyboard shortcut or by drag-and-drop of a file from a graphical file manager into the editor window. If a file extension (e.g. ``.lmp``) has been registered with the graphical environment to launch LAMMPS-GUI, an existing input file can @@ -174,7 +188,7 @@ Running LAMMPS ^^^^^^^^^^^^^^ From within the LAMMPS-GUI main window LAMMPS can be started either from -the ``Run`` menu using the ``Run LAMMPS from Editor Buffer`` entry, by +the *Run* menu using the *Run LAMMPS from Editor Buffer* entry, by the keyboard shortcut `Ctrl-Enter` (`Command-Enter` on macOS), or by clicking on the green "Run" button in the status bar. All of these operations causes LAMMPS to process the entire input script in the @@ -189,7 +203,7 @@ using the contents of the input buffer for the run (via the interface), and **not** the original file it was read from. Thus, if there are unsaved changes in the buffer, they *will* be used. As an alternative, it is also possible to run LAMMPS by reading the contents -of a file from the ``Run LAMMPS from File`` menu entry or with +of a file from the *Run LAMMPS from File* menu entry or with `Ctrl-Shift-Enter`. This option may be required in some rare cases where the input uses some functionality that is not compatible with running LAMMPS from a string buffer. For consistency, any unsaved @@ -203,7 +217,7 @@ before LAMMPS can be run from a file. While LAMMPS is running, the contents of the status bar change. On the left side there is a text indicating that LAMMPS is running, which also indicates the number of active threads, when thread-parallel -acceleration was selected in the ``Preferences`` dialog. On the right +acceleration was selected in the *Preferences* dialog. On the right side, a progress bar is shown that displays the estimated progress for the current :doc:`run ` or :doc:`minimize ` command. @@ -230,8 +244,8 @@ Up to three additional windows may open during a run: More information on those windows and how to adjust their behavior and contents is given below. -An active LAMMPS run can be stopped cleanly by using either the ``Stop -LAMMPS`` entry in the ``Run`` menu, the keyboard shortcut `Ctrl-/` +An active LAMMPS run can be stopped cleanly by using either the *Stop +LAMMPS* entry in the *Run* menu, the keyboard shortcut `Ctrl-/` (`Command-/` on macOS), or by clicking on the red button in the status bar. This will cause the running LAMMPS process to complete the current timestep (or iteration for energy minimization) and then complete the @@ -261,7 +275,7 @@ The runs are counted and the run number for the current run is displayed in the window title. It is possible to change the behavior of LAMMPS-GUI in the preferences dialog to create a *new* *Output* window for every run or to not show the current *Output* window. It is also -possible to show or hide the *current* *Output* window from the ``View`` +possible to show or hide the *current* *Output* window from the *View* menu. The text in the *Output* window is read-only and cannot be modified, but @@ -276,8 +290,6 @@ right mouse button into the *Output* window text area. :align: center :scale: 50% -.. versionadded:: 1.6 - Should the *Output* window contain embedded YAML format text (see above for a demonstration), for example from using :doc:`thermo_style yaml ` or :doc:`thermo_modify line yaml `, the @@ -298,18 +310,32 @@ plot of thermodynamic output of the LAMMPS calculation as shown below. The drop down menu on the top right allows selection of different properties that are computed and written to thermo output. Only one -property can be shown at a time. The plots are updated with new data as -the run progresses, so they can be used to visually monitor the -evolution of available properties. The window title shows the current -run number that this chart window corresponds to. Same as for the -*Output* window, the chart window is replaced on each new run, but the -behavior can be changed in the preferences dialog. +property can be shown at a time. The plots are updated regularly with +new data as the run progresses, so they can be used to visually monitor +the evolution of available properties. The update interval can be set +in the *Preferences* dialog. By default, the raw data for the selected +property is plotted as a blue graph. As soon as there are a sufficient +number of data points, there will be a second graph shown in red with a +smoothed version of the data. From the drop down menu on the top left, +you can select whether to plot only the raw data, only the smoothed +data or both. The smoothing uses a `Savitzky-Golay convolution filter +`_ The +window width (left) and order (right) parameters can be set in the boxes +next to the drop down menu. Default settings are 10 and 4 which means +that the smoothing window includes 10 points each to the left and the +right of the current data point and a fourth order polynomial is fit to +the data in the window. -.. versionadded:: 1.6 +You can use the mouse to zoom into the graph (hold the left button and +drag to mark an area) or zoom out (right click) and you can reset the +view with a click to the "lens" button next to the data drop down menu. - Support for YAML export added +The window title shows the current run number that this chart window +corresponds to. Same as for the *Output* window, the chart window is +replaced on each new run, but the behavior can be changed in the +*Preferences* dialog. -From the ``File`` menu on the top left, it is possible to save an image +From the *File* menu on the top left, it is possible to save an image of the currently displayed plot or export the data in either plain text columns (for use by plotting tools like `gnuplot `_ or `grace @@ -349,8 +375,6 @@ zoom in or zoom out of the displayed images. The button on the very left triggers an export of the slide show animation to a movie file, provided the `FFmpeg program `_ is installed. -.. versionadded:: 1.6 - When clicking on the "garbage can" icon, all image files of the slide show will be deleted. Since their number can be large for long simulations, this option enables to safely and quickly clean up the @@ -362,20 +386,20 @@ Variable Info During a run, it may be of interest to monitor the value of input script variables, for example to monitor the progress of loops. This can be -done by enabling the "Variables Window" in the ``View`` menu or by using +done by enabling the "Variables Window" in the *View* menu or by using the `Ctrl-Shift-W` keyboard shortcut. This shows info similar to the :doc:`info variables ` command in a separate window as shown below. .. image:: JPG/lammps-gui-variable-info.png :align: center - :scale: 75% + :scale: 50% Like for the *Output* and *Charts* windows, its content is continuously updated during a run. It will show "(none)" if there are no variables defined. Note that it is also possible to *set* :doc:`index style variables `, that would normally be set via command line -flags, via the "Set Variables..." dialog from the ``Run`` menu. +flags, via the "Set Variables..." dialog from the *Run* menu. LAMMPS-GUI automatically defines the variable "gui_run" to the current value of the run counter. That way it is possible to automatically record a separate log for each run attempt by using the command @@ -392,7 +416,7 @@ at the beginning of an input file. That would record logs to files Snapshot Image Viewer --------------------- -By selecting the ``Create Image`` entry in the ``Run`` menu, or by +By selecting the *Create Image* entry in the *Run* menu, or by hitting the `Ctrl-I` (`Command-I` on macOS) keyboard shortcut, or by clicking on the "palette" button in the status bar of the *Editor* window, LAMMPS-GUI sends a custom :doc:`write_dump image ` @@ -413,23 +437,24 @@ instance when using reduced (= 'lj') :doc:`units `, then LAMMPS-GUI will check the current pair style and if it is a Lennard-Jones type potential, it will extract the *sigma* parameter for each atom type and assign atom diameters from those numbers. +For cases where atom diameters are not auto-detected, the *Atom size* field +can be edited and a suitable value set manually. The default value +is inferred from the x-direction lattice spacing. -Otherwise the default sequence of colors of the :doc:`dump image -` command is assigned to the different atom types and the -diameters are all the same. +If elements cannot be detected the default sequence of colors of the +:doc:`dump image ` command is assigned to the different atom +types. -.. figure:: JPG/lammps-gui-image.png - :align: center - :scale: 50% +.. |gui-image1| image:: JPG/lammps-gui-image.png + :width: 48% - Visualization of LAMMPS "peptide" example +.. |gui-image2| image:: JPG/lammps-gui-funnel.png + :width: 48% -.. versionchanged:: 1.6 - - Buttons for toggling shininess and re-centering were added. +|gui-image1| |gui-image2| The default image size, some default image quality settings, the view -style and some colors can be changed in the ``Preferences`` dialog +style and some colors can be changed in the *Preferences* dialog window. From the image viewer window further adjustments can be made: actual image size, high-quality (SSAO) rendering, anti-aliasing, view style, display of box or axes, zoom factor. The view of the system can @@ -441,14 +466,12 @@ display updated. The small palette icon on the top left is colored while LAMMPS is running to render the new image; it is grayed out when LAMMPS is finished. When there are many atoms to render and high quality images with anti-aliasing are requested, re-rendering may take -several seconds. From the ``File`` menu of the image window, the +several seconds. From the *File* menu of the image window, the current image can be saved to a file (keyboard shortcut `Ctrl-S`) or copied to the clipboard (keyboard shortcut `Ctrl-C`) for pasting the image into another application. -.. versionadded:: 1.6 - -From the ``File`` menu it is also possible to copy the current +From the *File* menu it is also possible to copy the current :doc:`dump image ` and :doc:`dump_modify ` commands to the clipboard so they can be pasted into a LAMMPS input file so that the visualization settings of the snapshot image can be repeated @@ -466,10 +489,8 @@ Paste (`Ctrl-V`), Undo (`Ctrl-Z`), Redo (`Ctrl-Shift-Z`), Select All dialog will pop up asking whether to cancel the exit operation, or to save or not save the buffer contents to a file. -.. versionadded:: 1.6 - The editor has an auto-save mode that can be enabled or disabled in the -``Preferences`` dialog. In auto-save mode, the editor buffer is +*Preferences* dialog. In auto-save mode, the editor buffer is automatically saved before running LAMMPS or before exiting LAMMPS-GUI. Context Specific Word Completion @@ -486,7 +507,7 @@ a word have been typed. The word can then be completed through selecting an entry by scrolling up and down with the cursor keys and selecting with the 'Enter' key or by clicking on the entry with the mouse. The automatic completion -pop-up can be disabled in the ``Preferences`` dialog, but the completion +pop-up can be disabled in the *Preferences* dialog, but the completion can still be requested manually by either hitting the 'Shift-TAB' key or by right-clicking with the mouse and selecting the option from the context menu. Most of the completion information is retrieved from the @@ -504,7 +525,7 @@ whitespace padding to commands, type specifiers, IDs and names. This reformatting is performed manually by hitting the 'Tab' key. It is also possible to have this done automatically when hitting the 'Enter' key to start a new line. This feature can be turned on or off in the -``Preferences`` dialog for ``Editor Settings`` with the +*Preferences* dialog for *Editor Settings* with the "Reformat with 'Enter'" checkbox. The amount of padding for multiple categories can be adjusted in the same dialog. @@ -531,8 +552,6 @@ context menu that open the corresponding documentation page in the online LAMMPS documentation in a web browser window. When using the keyboard, the first of those entries is chosen. -.. versionadded:: 1.6 - If the word under the cursor is a file, then additionally the context menu has an entry to open the file in a read-only text viewer window. If the file is a LAMMPS restart file, instead the menu entry offers to @@ -550,8 +569,6 @@ will contain a corresponding message. Inspecting a Restart file ^^^^^^^^^^^^^^^^^^^^^^^^^ -.. versionadded:: 1.6 - When LAMMPS-GUI is asked to "Inspect a Restart", it will read the restart file into a LAMMPS instance and then open three different windows. The first window is a text viewer with the output of an @@ -566,56 +583,56 @@ for confirmation before continuing, since large restart files may require large amounts of RAM since the entire system must be read into RAM. Thus restart file for large simulations that have been run on an HPC cluster may overload a laptop or local -workstation. The ``Show Details...`` button will display a rough +workstation. The *Show Details...* button will display a rough estimate of the additional memory required. Menu ---- -The menu bar has entries ``File``, ``Edit``, ``Run``, ``View``, and -``About``. Instead of using the mouse to click on them, the individual +The menu bar has entries *File*, *Edit*, *Run*, *View*, and +*About*. Instead of using the mouse to click on them, the individual menus can also be activated by hitting the `Alt` key together with the corresponding underlined letter, that is `Alt-F` activates the -``File`` menu. For the corresponding activated sub-menus, the key +*File* menu. For the corresponding activated sub-menus, the key corresponding the underlined letters can be used to select entries instead of using the mouse. File ^^^^ -The ``File`` menu offers the usual options: +The *File* menu offers the usual options: -- ``New`` clears the current buffer and resets the file name to ``*unknown*`` -- ``Open`` opens a dialog to select a new file for editing in the *Editor* -- ``View`` opens a dialog to select a file for viewing in a *separate* window (read-only) with support for on-the-fly decompression as explained above. -- ``Inspect restart`` opens a dialog to select a file. If that file is a :doc:`LAMMPS restart ` three windows with :ref:`information about the file are opened `. -- ``Save`` saves the current file; if the file name is ``*unknown*`` +- *New* clears the current buffer and resets the file name to ``*unknown*`` +- *Open* opens a dialog to select a new file for editing in the *Editor* +- *View* opens a dialog to select a file for viewing in a *separate* window (read-only) with support for on-the-fly decompression as explained above. +- *Inspect restart* opens a dialog to select a file. If that file is a :doc:`LAMMPS restart ` three windows with :ref:`information about the file are opened `. +- *Save* saves the current file; if the file name is ``*unknown*`` a dialog will open to select a new file name -- ``Save As`` opens a dialog to select and new file name (and folder, if +- *Save As* opens a dialog to select and new file name (and folder, if desired) and saves the buffer to it. Writing the buffer to a different folder will also switch the current working directory to that folder. -- ``Quit`` exits LAMMPS-GUI. If there are unsaved changes, a dialog will +- *Quit* exits LAMMPS-GUI. If there are unsaved changes, a dialog will appear to either cancel the operation, or to save, or to not save the modified buffer. -In addition, up to 5 recent file names will be listed after the ``Open`` +In addition, up to 5 recent file names will be listed after the *Open* entry that allows re-opening recently opened files. This list is stored when quitting and recovered when starting again. Edit ^^^^ -The ``Edit`` menu offers the usual editor functions like ``Undo``, -``Redo``, ``Cut``, ``Copy``, ``Paste``. It can also open a -``Preferences`` dialog (keyboard shortcut `Ctrl-P`) and allows deletion -of all stored preferences and settings, so they are reset to their -default values. +The *Edit* menu offers the usual editor functions like *Undo*, *Redo*, +*Cut*, *Copy*, *Paste*, and a *Find and Replace* dialog (keyboard +shortcut `Ctrl-F`). It can also open a *Preferences* dialog (keyboard +shortcut `Ctrl-P`) and allows deleting all stored preferences and +settings, so they are reset to their default values. Run ^^^ -The ``Run`` menu has options to start and stop a LAMMPS process. Rather +The *Run* menu has options to start and stop a LAMMPS process. Rather than calling the LAMMPS executable as a separate executable, the LAMMPS-GUI is linked to the LAMMPS library and thus can run LAMMPS internally through the :ref:`LAMMPS C-library interface ` @@ -635,36 +652,36 @@ from a string buffer. The LAMMPS calculations are run in a concurrent thread so that the GUI can stay responsive and be updated during the run. The GUI can retrieve data from the running LAMMPS instance and tell it to stop at the next -timestep. The ``Stop LAMMPS`` entry will do this by calling the +timestep. The *Stop LAMMPS* entry will do this by calling the :cpp:func:`lammps_force_timeout` library function, which is equivalent to a :doc:`timer timeout 0 ` command. -The ``Set Variables...`` entry opens a dialog box where +The *Set Variables...* entry opens a dialog box where :doc:`index style variables ` can be set. Those variables are passed to the LAMMPS instance when it is created and are thus set *before* a run is started. .. image:: JPG/lammps-gui-variables.png :align: center - :scale: 75% + :scale: 50% -The ``Set Variables`` dialog will be pre-populated with entries that +The *Set Variables* dialog will be pre-populated with entries that are set as index variables in the input and any variables that are used but not defined, if the built-in parser can detect them. New -rows for additional variables can be added through the ``Add Row`` -button and existing rows can be deleted by clicking on the ``X`` icons +rows for additional variables can be added through the *Add Row* +button and existing rows can be deleted by clicking on the *X* icons on the right. -The ``Create Image`` entry will send a :doc:`dump image ` +The *Create Image* entry will send a :doc:`dump image ` command to the LAMMPS instance, read the resulting file, and show it -in an ``Image Viewer`` window. +in an *Image Viewer* window. -The ``View in OVITO`` entry will launch `OVITO `_ +The *View in OVITO* entry will launch `OVITO `_ with a :doc:`data file ` containing the current state of the system. This option is only available if LAMMPS-GUI can find the OVITO executable in the system path. -The ``View in VMD`` entry will launch VMD with a :doc:`data file +The *View in VMD* entry will launch VMD with a :doc:`data file ` containing the current state of the system. This option is only available if LAMMPS-GUI can find the VMD executable in the system path. @@ -672,33 +689,70 @@ system path. View ^^^^ -The ``View`` menu offers to show or hide additional windows with log +The *View* menu offers to show or hide additional windows with log output, charts, slide show, variables, or snapshot images. The default settings for their visibility can be changed in the -``Preferences dialog``. +*Preferences* dialog. About ^^^^^ -The ``About`` menu finally offers a couple of dialog windows and an +The *About* menu finally offers a couple of dialog windows and an option to launch the LAMMPS online documentation in a web browser. The -``About LAMMPS-GUI`` entry displays a dialog with a summary of the +*About LAMMPS-GUI* entry displays a dialog with a summary of the configuration settings of the LAMMPS library in use and the version -number of LAMMPS-GUI itself. The ``Quick Help`` displays a dialog with -a minimal description of LAMMPS-GUI. The ``LAMMPS-GUI Howto`` entry +number of LAMMPS-GUI itself. The *Quick Help* displays a dialog with +a minimal description of LAMMPS-GUI. The *LAMMPS-GUI Howto* entry will open this documentation page from the online documentation in a web -browser window. The ``LAMMPS Manual`` entry will open the main page of +browser window. The *LAMMPS Manual* entry will open the main page of the LAMMPS online documentation in a web browser window. -The ``LAMMPS Tutorial`` entry will open the main page of the set of +The *LAMMPS Tutorial* entry will open the main page of the set of LAMMPS tutorials authored and maintained by Simon Gravelle at https://lammpstutorials.github.io/ in a web browser window. ----- +Find and Replace +---------------- + +.. image:: JPG/lammps-gui-find.png + :align: center + :scale: 33% + +The *Find and Replace* dialog allows searching for and replacing +text in the *Editor* window. + +The dialog can be opened either from the *Edit* menu or with the +keyboard shortcut `Ctrl-F`. You can enter the text to search for. +Through three check-boxes the search behavior can be adjusted: + +- If checked, "Match case" does a case sensitive search; otherwise + the search is case insensitive. + +- If checked, "Wrap around" starts searching from the start of the + document, if there is no match found from the current cursor position + until the end of the document; otherwise the search will stop. + +- If checked, the "Whole word" setting only finds full word matches + (white space and special characters are word boundaries). + +Clicking on the *Next* button will search for the next occurrence of the +search text and select / highlight it. Clicking on the *Replace* button +will replace an already highlighted search text and find the next one. +If no text is selected, or the selected text does not match the +selection string, then the first click on the *Replace* button will +only search and highlight the next occurrence of the search string. +Clicking on the *Replace All* button will replace all occurrences from +the cursor position to the end of the file; if the *Wrap around* box is +checked, then it will replace **all** occurrences in the **entire** +document. Clicking on the *Done* button will dismiss the dialog. + +------ + Preferences ----------- -The ``Preferences`` dialog allows customization of the behavior and +The *Preferences* dialog allows customization of the behavior and look of LAMMPS-GUI. The settings are grouped and each group is displayed within a tab. @@ -745,7 +799,7 @@ General Settings: otherwise each command will create a new image window. - *Path to LAMMPS Shared Library File:* this option is only visible when LAMMPS-GUI was compiled to load the LAMMPS library at run time - instead of being linked to it directly. With the ``Browse..`` button + instead of being linked to it directly. With the *Browse..* button or by changing the text, a different shared library file with a different compilation of LAMMPS with different settings or from a different version can be loaded. After this setting was changed, @@ -755,16 +809,19 @@ General Settings: log) of the application can be set. - *Select Text Font:* Opens a font selection dialog where the type and size for the text editor and log font of the application can be set. -- *GUI update interval:* Allows to set the time interval between GUI and - data updates during a LAMMPS run in milliseconds. The default is to - update the GUI every 10 milliseconds. This is good for many cases. - Set this to 100 milliseconds or more if LAMMPS-GUI consumes too many - resources during a run. For LAMMPS runs that run *very* fast (for - example in tutorial examples), however, data may be missed and through - lowering this interval, this can be corrected. However, this will - make the GUI use more resources, which may be a problem on some - computers with slower CPUs and a small number of CPU cores. This +- *Data update interval:* Allows to set the time interval between data + updates during a LAMMPS run in milliseconds. The default is to update + the data (for charts and output window) every 10 milliseconds. This + is good for many cases. Set this to 100 milliseconds or more if + LAMMPS-GUI consumes too many resources during a run. For LAMMPS runs + that run *very* fast (for example in tutorial examples), however, data + may be missed and through lowering this interval, this can be + corrected. However, this will make the GUI use more resources. This setting may be changed to a value between 1 and 1000 milliseconds. +- *Charts update interval:* Allows to set the time interval between redrawing + the plots in the *Charts* window in milliseconds. The default is to + redraw the plots every 500 milliseconds. This is just for the drawing, + data collection is managed with the previous setting. Accelerators: ^^^^^^^^^^^^^ @@ -780,7 +837,7 @@ Snapshot Image: ^^^^^^^^^^^^^^^ This tab allows setting defaults for the snapshot images displayed in -the ``Image Viewer`` window, such as its dimensions and the zoom factor +the *Image Viewer* window, such as its dimensions and the zoom factor applied. The *Antialias* switch will render images with twice the number of pixels for width and height and then smoothly scale the image back to the requested size. This produces higher quality images with @@ -824,7 +881,7 @@ available (On macOS use the Command key instead of Ctrl/Control). .. list-table:: :header-rows: 1 - :widths: auto + :widths: 16 19 13 16 13 22 * - Shortcut - Function @@ -866,32 +923,32 @@ available (On macOS use the Command key instead of Ctrl/Control). - Quit Application - Ctrl+A - Select All - - Ctrl+P - - Preferences + - Ctrl+F + - Find and Replace * - Ctrl+W - Close Window - - Ctrl+Shift+H - - Quick Help - - Ctrl+Shift+G - - LAMMPS-GUI Howto - * - Ctrl+Shift+A - - About LAMMPS - - Ctrl+? - - Context Help - - Ctrl+Shift+W - - Show Variables - * - Ctrl+Shift+M - - LAMMPS Manual - TAB - Reformat line - Shift+TAB - Show Completions - * - Ctrl+Shift+T - - LAMMPS Tutorial - - Ctrl+Shift+Enter + * - Ctrl+Shift+Enter - Run File - - - - + - Ctrl+Shift+W + - Show Variables + - Ctrl+P + - Preferences + * - Ctrl+Shift+A + - About LAMMPS + - Ctrl+Shift+H + - Quick Help + - Ctrl+Shift+G + - LAMMPS-GUI Howto + * - Ctrl+Shift+M + - LAMMPS Manual + - Ctrl+? + - Context Help + - Ctrl+Shift+T + - LAMMPS Tutorial Further editing keybindings `are documented with the Qt documentation `_. In diff --git a/doc/src/Howto_pylammps.rst b/doc/src/Howto_pylammps.rst index 5ef3248e1d..645434bbab 100644 --- a/doc/src/Howto_pylammps.rst +++ b/doc/src/Howto_pylammps.rst @@ -39,16 +39,18 @@ lammps.lammps * interface modeled after the LAMMPS :ref:`C language library interface API ` * requires knowledge of how LAMMPS internally works (C pointers, etc) * full support for running Python with MPI using `mpi4py `_ +* no overhead from creating a more Python-like interface lammps.PyLammps """"""""""""""" -* higher-level abstraction built on *top* of original :py:class:`ctypes based interface ` +* higher-level abstraction built on *top* of the original :py:class:`ctypes based interface ` * manipulation of Python objects * communication with LAMMPS is hidden from API user * shorter, more concise Python * better IPython integration, designed for quick prototyping * designed for serial execution +* additional overhead from capturing and parsing the LAMMPS screen output Quick Start ----------- diff --git a/doc/src/Intro_authors.rst b/doc/src/Intro_authors.rst index cc8bbb7ca7..84470ba3a0 100644 --- a/doc/src/Intro_authors.rst +++ b/doc/src/Intro_authors.rst @@ -51,15 +51,15 @@ lammps.org". General questions about LAMMPS should be posted in the * - `Jacob R. Gissinger `_ - Stevens Institute of Technology - jgissing at stevens.edu - - reactive molecular dynamics, macromolecular systems, type labels + - reactive molecular dynamics, macro-molecular systems, type labels * - James Goff - SNL - jmgoff at sandia.gov - machine learned potentials, QEq solvers, Python - * - Megan McCarthy + * - Meg McCarthy - SNL - megmcca at sandia.gov - - alloys, microstucture, machine learned potentials + - alloys, micro-structure, machine learned potentials * - Stan Moore - SNL - stamoor at sandia.gov @@ -67,7 +67,7 @@ lammps.org". General questions about LAMMPS should be posted in the * - `Trung Nguyen `_ - U Chicago - ndactrung at gmail.com - - soft matter, GPU package + - soft matter, GPU package, DIELECTRIC package, regression testing .. _rb: https://rbberger.github.io/ .. _gc: https://enthalpiste.fr/ diff --git a/doc/src/JPG/lammps-gui-chart.png b/doc/src/JPG/lammps-gui-chart.png index 6395e4815a..5a926a721b 100644 Binary files a/doc/src/JPG/lammps-gui-chart.png and b/doc/src/JPG/lammps-gui-chart.png differ diff --git a/doc/src/JPG/lammps-gui-dark.png b/doc/src/JPG/lammps-gui-dark.png new file mode 100644 index 0000000000..31921bf537 Binary files /dev/null and b/doc/src/JPG/lammps-gui-dark.png differ diff --git a/doc/src/JPG/lammps-gui-find.png b/doc/src/JPG/lammps-gui-find.png new file mode 100644 index 0000000000..452c5818eb Binary files /dev/null and b/doc/src/JPG/lammps-gui-find.png differ diff --git a/doc/src/JPG/lammps-gui-funnel.png b/doc/src/JPG/lammps-gui-funnel.png new file mode 100644 index 0000000000..6f24f8bbd9 Binary files /dev/null and b/doc/src/JPG/lammps-gui-funnel.png differ diff --git a/doc/src/JPG/lammps-gui-image.png b/doc/src/JPG/lammps-gui-image.png index 969aadce0b..5f71cb2be5 100644 Binary files a/doc/src/JPG/lammps-gui-image.png and b/doc/src/JPG/lammps-gui-image.png differ diff --git a/doc/src/JPG/lammps-gui-main.png b/doc/src/JPG/lammps-gui-main.png index 69efe3db68..c7a1e5a98c 100644 Binary files a/doc/src/JPG/lammps-gui-main.png and b/doc/src/JPG/lammps-gui-main.png differ diff --git a/doc/src/JPG/lammps-gui-prefs-accel.png b/doc/src/JPG/lammps-gui-prefs-accel.png index 25820c8d44..392861e40b 100644 Binary files a/doc/src/JPG/lammps-gui-prefs-accel.png and b/doc/src/JPG/lammps-gui-prefs-accel.png differ diff --git a/doc/src/JPG/lammps-gui-prefs-editor.png b/doc/src/JPG/lammps-gui-prefs-editor.png index 5b5cffe209..b3cf059583 100644 Binary files a/doc/src/JPG/lammps-gui-prefs-editor.png and b/doc/src/JPG/lammps-gui-prefs-editor.png differ diff --git a/doc/src/JPG/lammps-gui-prefs-general.png b/doc/src/JPG/lammps-gui-prefs-general.png index bfc9556995..7f161284c8 100644 Binary files a/doc/src/JPG/lammps-gui-prefs-general.png and b/doc/src/JPG/lammps-gui-prefs-general.png differ diff --git a/doc/src/JPG/lammps-gui-prefs-image.png b/doc/src/JPG/lammps-gui-prefs-image.png index 7dd9e06653..2f830c85f3 100644 Binary files a/doc/src/JPG/lammps-gui-prefs-image.png and b/doc/src/JPG/lammps-gui-prefs-image.png differ diff --git a/doc/src/Library_atoms.rst b/doc/src/Library_atoms.rst index cebd8f0c2e..5ebfe04b37 100644 --- a/doc/src/Library_atoms.rst +++ b/doc/src/Library_atoms.rst @@ -4,6 +4,7 @@ Per-atom properties This section documents the following functions: - :cpp:func:`lammps_extract_atom_datatype` +- :cpp:func:`lammps_extract_atom_size` - :cpp:func:`lammps_extract_atom` ----------------------- @@ -13,6 +14,11 @@ This section documents the following functions: ----------------------- +.. doxygenfunction:: lammps_extract_atom_size + :project: progguide + +----------------------- + .. doxygenfunction:: lammps_extract_atom :project: progguide diff --git a/doc/src/Packages_details.rst b/doc/src/Packages_details.rst index 4483601a88..43429feb03 100644 --- a/doc/src/Packages_details.rst +++ b/doc/src/Packages_details.rst @@ -1823,7 +1823,8 @@ Aidan Thompson^3, Gabor Csanyi^2, Christoph Ortner^4, Ralf Drautz^1. **Install:** This package has :ref:`specific installation instructions ` on the -:doc:`Build extras ` page. +:doc:`Build extras ` page. This package may also be compiled +as a plugin to avoid licensing conflicts when distributing binaries. **Supporting info:** @@ -2344,7 +2345,9 @@ and Gareth Tribello. **Install:** -This package has :ref:`specific installation instructions ` on the :doc:`Build extras ` page. +This package has :ref:`specific installation instructions ` on the +:doc:`Build extras ` page. This package may also be compiled +as a plugin to avoid licensing conflicts when distributing binaries. **Supporting info:** @@ -2642,7 +2645,7 @@ This package has :ref:`specific installation instructions ` on the :doc:`B **Authors:** Joel T. Clemmer (Sandia National Labs), Thomas C. O'Connor (Carnegie Mellon University) -.. versionadded:: TBD +.. versionadded:: 29Aug2024 **Supporting info:** diff --git a/doc/src/Run_options.rst b/doc/src/Run_options.rst index 86e8e47626..4f7021cd53 100644 --- a/doc/src/Run_options.rst +++ b/doc/src/Run_options.rst @@ -508,7 +508,7 @@ e.g. the *nfile* and *fileper* keywords. See the **-restart2info restartfile keyword ...** -.. versionadded:: TBD +.. versionadded:: 29Aug2024 Write out some info about the restart file and and immediately exit. This is the same operation as if the following 2-line input script were diff --git a/doc/src/Tools.rst b/doc/src/Tools.rst index 6c12baf967..ba7cb2035a 100644 --- a/doc/src/Tools.rst +++ b/doc/src/Tools.rst @@ -590,20 +590,31 @@ and the LAMMPS library, via ``-D LAMMPS_SOURCE_DIR=/path/to/lammps/src``. CMake will try to guess a build folder with the LAMMPS library from that path, but it can also be set with ``-D LAMMPS_LIB_DIR=/path/to/lammps/lib``. +Plugin version +"""""""""""""" + Rather than linking to the LAMMPS library during compilation, it is also -possible to compile the GUI with a plugin loader that will load -the LAMMPS library dynamically at runtime during the start of the GUI -from a shared library; e.g. ``liblammps.so`` or ``liblammps.dylib`` or +possible to compile the GUI with a plugin loader that will load the +LAMMPS library dynamically at runtime during the start of the GUI from a +shared library; e.g. ``liblammps.so`` or ``liblammps.dylib`` or ``liblammps.dll`` (depending on the operating system). This has the advantage that the LAMMPS library can be built from updated or modified LAMMPS source without having to recompile the GUI. The ABI of the LAMMPS C-library interface is very stable and generally backward -compatible. This feature is enabled by setting -``-D LAMMPS_GUI_USE_PLUGIN=on`` and then ``-D +compatible. This feature is enabled by setting ``-D +LAMMPS_GUI_USE_PLUGIN=on`` and then ``-D LAMMPS_PLUGINLIB_DIR=/path/to/lammps/plugin/loader``. Typically, this would be the ``examples/COUPLE/plugin`` folder of the LAMMPS distribution. +When compiling LAMMPS-GUI with plugin support, there is an additional +command line flag (``-p `` or ``--pluginpath ``) which +allows to override the path to LAMMPS shared library used by the GUI. +This is usually auto-detected on the first run and can be changed in the +LAMMPS-GUI *Preferences* dialog. The command line flag allows to reset +this path to a valid value in case the original setting has become +invalid. An empty path ("") as argument restores the default setting. + Platform notes ^^^^^^^^^^^^^^ @@ -671,6 +682,15 @@ folder> --target tgz`` or ``make tgz`` to build a ``LAMMPS-Linux-amd64.tar.gz`` file with the executables and their support libraries. +It is also possible to build a `flatpak bundle +`_ which is +a way to distribute applications in a way that is compatible with most +Linux distributions. Use the "flatpak" target to trigger a compile +(``cmake --build --target flatpak`` or ``make flatpak``). +Please note that this will not build from the local sources but from the +repository and branch listed in the ``org.lammps.lammps-gui.yml`` +LAMMPS-GUI source folder. + ---------- .. _arc: @@ -1002,7 +1022,7 @@ regression tests with a given LAMMPS binary. The tool launches the LAMMPS binary with any given input script under one of the `examples` subdirectories, and compares the thermo output in the generated log file with those in the provided log file with the same number of processors -ub the same subdirectory. If the differences between the actual and +in the same subdirectory. If the differences between the actual and reference values are within specified tolerances, the test is considered passed. For each test batch, that is, a set of example input scripts, the mpirun command, the LAMMPS command line arguments, and the diff --git a/doc/src/bond_rheo_shell.rst b/doc/src/bond_rheo_shell.rst index 992917c104..090f5ab7aa 100644 --- a/doc/src/bond_rheo_shell.rst +++ b/doc/src/bond_rheo_shell.rst @@ -38,7 +38,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 29Aug2024 The *rheo/shell* bond style is designed to work with :doc:`fix rheo/oxidation ` which creates candidate diff --git a/doc/src/compute_pressure.rst b/doc/src/compute_pressure.rst index 03dfbb841b..439f701bd4 100644 --- a/doc/src/compute_pressure.rst +++ b/doc/src/compute_pressure.rst @@ -59,11 +59,12 @@ may also contribute to the virial term. A symmetric pressure tensor, stored as a 6-element vector, is also calculated by this compute. The six components of the vector are -ordered :math:`xx,` :math:`yy,` :math:`zz,` :math:`xy,` :math:`xz,` :math:`yz.` -The equation for the :math:`(I,J)` components (where :math:`I` and :math:`J` -are :math:`x`, :math:`y`, or :math:`z`) is similar to the above formula, -except that the first term uses components of the kinetic energy tensor and the -second term uses components of the virial tensor: +ordered :math:`xx,` :math:`yy,` :math:`zz,` :math:`xy,` :math:`xz,` +:math:`yz.` The equation for the :math:`(I,J)` components (where +:math:`I` and :math:`J` are :math:`x`, :math:`y`, or :math:`z`) is +similar to the above formula, except that the first term uses +components related to the kinetic energy tensor and the second term +uses components of the virial tensor: .. math:: @@ -75,8 +76,8 @@ calculated. This includes a kinetic energy (temperature) term and the virial as the sum of pair, bond, angle, dihedral, improper, kspace (long-range), and fix contributions to the force on each atom. If any extra keywords are listed, then only those components are summed to -compute temperature or ke and/or the virial. The *virial* keyword -means include all terms except the kinetic energy *ke*\ . +compute temperature or ke and/or the virial. The *virial* keyword means +include all terms except the kinetic energy *ke*\ . The *pair/hybrid* keyword means to only include contribution from a sub-style in a *hybrid* or *hybrid/overlay* pair style. @@ -86,26 +87,31 @@ system, including for many-body potentials and accounting for the effects of periodic boundary conditions are discussed in :ref:`(Thompson) `. -The temperature and kinetic energy tensor is not calculated by this +The temperature and kinetic energy tensor are not calculated by this compute, but rather by the temperature compute specified with the -command. If the kinetic energy is not included in the pressure, than -the temperature compute is not used and can be specified as NULL. -Normally the temperature compute used by compute pressure should -calculate the temperature of all atoms for consistency with the virial -term, but any compute style that calculates temperature can be used -(e.g., one that excludes frozen atoms or other degrees of freedom). +command. See the doc pages for individual compute temp variants for an +explanation of how they calculate temperature and a symmetric tensor +(6-element vector) whose components are twice that of the traditional KE +tensor. That tensor is what appears in the pressure tensor formula +above. + +If the kinetic energy is not included in the pressure, than the +temperature compute is not used and can be specified as NULL. Normally +the temperature compute used by compute pressure should calculate the +temperature of all atoms for consistency with the virial term, but any +compute style that calculates temperature can be used (e.g., one that +excludes frozen atoms or other degrees of freedom). Note that if desired the specified temperature compute can be one that subtracts off a bias to calculate a temperature using only the thermal velocity of the atoms (e.g., by subtracting a background streaming -velocity). -See the doc pages for individual :doc:`compute commands ` to determine -which ones include a bias. +velocity). See the doc pages for individual :doc:`compute commands +` to determine which ones include a bias. Also note that the :math:`N` in the first formula above is really -degrees-of-freedom divided by :math:`d` = dimensionality, where the DOF value -is calculated by the temperature compute. -See the various :doc:`compute temperature ` styles for details. +degrees-of-freedom divided by :math:`d` = dimensionality, where the +DOF value is calculated by the temperature compute. See the various +:doc:`compute temperature ` styles for details. A compute of this style with the ID of thermo_press is created when LAMMPS starts up, as if this command were in the input script: @@ -136,9 +142,8 @@ The ordering of values in the symmetric pressure tensor is as follows: :math:`p_{xx},` :math:`p_{yy},` :math:`p_{zz},` :math:`p_{xy},` :math:`p_{xz},` :math:`p_{yz}.` -The scalar and vector values calculated by this compute are -"intensive". The scalar and vector values will be in pressure -:doc:`units `. +The scalar and vector values calculated by this compute are "intensive". +The scalar and vector values will be in pressure :doc:`units `. Restrictions """""""""""" diff --git a/doc/src/compute_rheo_property_atom.rst b/doc/src/compute_rheo_property_atom.rst index f34b2225f5..2e905b97be 100644 --- a/doc/src/compute_rheo_property_atom.rst +++ b/doc/src/compute_rheo_property_atom.rst @@ -55,7 +55,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 29Aug2024 Define a computation that stores atom attributes specific to the RHEO package for each atom in the group. This is useful so that the values diff --git a/doc/src/compute_temp.rst b/doc/src/compute_temp.rst index e081280496..2638a1ae11 100644 --- a/doc/src/compute_temp.rst +++ b/doc/src/compute_temp.rst @@ -48,13 +48,17 @@ the group, :math:`N_\mathrm{fix DOFs}` is the number of degrees of freedom removed by fix commands (see below), :math:`k_B` is the Boltzmann constant, and :math:`T` is the resulting computed temperature. -A kinetic energy tensor, stored as a six-element vector, is also -calculated by this compute for use in the computation of a pressure -tensor. The formula for the components of the tensor is the same as the -above expression for :math:`E_\mathrm{kin}`, except that :math:`v_i^2` is -replaced by :math:`v_{i,x} v_{i,y}` for the :math:`xy` component, and so on. -The six components of the vector are ordered :math:`xx`, :math:`yy`, -:math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute for use in the computation of a pressure tensor by the +:doc:`compute pressue ` command. The formula for +the components of the tensor is the same as the above expression for +:math:`E_\mathrm{kin}`, except that the 1/2 factor is NOT included and +the :math:`v_i^2` is replaced by :math:`v_{i,x} v_{i,y}` for the +:math:`xy` component, and so on. Note that because it lacks the 1/2 +factor, these tensor components are twice those of the traditional +kinetic energy tensor. The six components of the vector are ordered +:math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, +:math:`yz`. The number of atoms contributing to the temperature is assumed to be constant for the duration of the run; use the *dynamic* option of the @@ -94,16 +98,17 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length six (KE tensor), which can be accessed by indices -1--6. These values can be used by any command that uses global scalar -or vector values from a compute as input. See the :doc:`Howto output -` page for an overview of LAMMPS output options. +vector of length six (symmetric tensor), which can be accessed by +indices 1--6. These values can be used by any command that uses +global scalar or vector values from a compute as input. See the +:doc:`Howto output ` page for an overview of LAMMPS +output options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". -The scalar value will be in temperature :doc:`units `. The -vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. Restrictions """""""""""" diff --git a/doc/src/compute_temp_asphere.rst b/doc/src/compute_temp_asphere.rst index 5741db76aa..d2af4278ad 100644 --- a/doc/src/compute_temp_asphere.rst +++ b/doc/src/compute_temp_asphere.rst @@ -41,8 +41,8 @@ translational and rotational kinetic energy. This differs from the usual :doc:`compute temp ` command, which assumes point particles with only translational kinetic energy. -Only finite-size particles (aspherical or spherical) can be included -in the group. For 3d finite-size particles, each has six degrees of +Only finite-size particles (aspherical or spherical) can be included in +the group. For 3d finite-size particles, each has six degrees of freedom (three translational, three rotational). For 2d finite-size particles, each has three degrees of freedom (two translational, one rotational). @@ -70,25 +70,39 @@ axis. It will also be the case for biaxial ellipsoids when exactly two of the semiaxes have the same length and the corresponding relative well depths are equal. -The translational kinetic energy is computed the same as is described -by the :doc:`compute temp ` command. The rotational -kinetic energy is computed as :math:`\frac12 I \omega^2`, where :math:`I` is -the inertia tensor for the aspherical particle and :math:`\omega` is its +The translational kinetic energy is computed the same as is described by +the :doc:`compute temp ` command. The rotational kinetic +energy is computed as :math:`\frac12 I \omega^2`, where :math:`I` is the +inertia tensor for the aspherical particle and :math:`\omega` is its angular velocity, which is computed from its angular momentum. .. note:: For :doc:`2d models `, particles are treated as - ellipsoids, not ellipses, meaning their moments of inertia will be the - same as in 3d. + ellipsoids, not ellipses, meaning their moments of inertia will be + the same as in 3d. A kinetic energy tensor, stored as a six-element vector, is also calculated by this compute. The formula for the components of the tensor is the same as the above formula, except that :math:`v^2` and -:math:`\omega^2` are replaced by :math:`v_x v_y` and :math:`\omega_x \omega_y` -for the :math:`xy` component, and the appropriate elements of the moment of -inertia tensor are used. The six components of the vector are ordered -:math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. +:math:`\omega^2` are replaced by :math:`v_x v_y` and :math:`\omega_x +\omega_y` for the :math:`xy` component, and the appropriate elements of +the moment of inertia tensor are used. The six components of the vector +are ordered :math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, +:math:`yz`. + +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute for use in the computation of a pressure tensor by the +:doc:`compute pressue ` command. The formula for the +components of the tensor is the same as the above expression for +:math:`E_\mathrm{kin}`, except that the 1/2 factor is NOT included and +the :math:`v_i^2` and :math:`\omega^2` are replaced by :math:`v_x v_y` +and :math:`\omega_x \omega_y` for the :math:`xy` component, and so on. +And the appropriate elements of the moment of inertia tensor are used. +Note that because it lacks the 1/2 factor, these tensor components are +twice those of the traditional kinetic energy tensor. The six +components of the vector are ordered :math:`xx`, :math:`yy`, :math:`zz`, +:math:`xy`, :math:`xz`, :math:`yz`. The number of atoms contributing to the temperature is assumed to be constant for the duration of the run; use the *dynamic/dof* option of @@ -131,27 +145,26 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1--6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. -See the :doc:`Howto output ` page for an overview of LAMMPS -output options. +vector of length 6 (symmetric tensor), which can be accessed by indices +1--6. These values can be used by any command that uses global scalar +or vector values from a compute as input. See the :doc:`Howto output +` page for an overview of LAMMPS output options. -The scalar value calculated by this compute is "intensive". The -vector values are "extensive". +The scalar value calculated by this compute is "intensive". The vector +values are "extensive". -The scalar value will be in temperature :doc:`units `. The -vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. Restrictions """""""""""" This compute is part of the ASPHERE package. It is only enabled if -LAMMPS was built with that package. See the :doc:`Build package ` page for more info. +LAMMPS was built with that package. See the :doc:`Build package +` page for more info. -This compute requires that atoms store angular momentum and a -quaternion as defined by the :doc:`atom_style ellipsoid ` -command. +This compute requires that atoms store angular momentum and a quaternion +as defined by the :doc:`atom_style ellipsoid ` command. All particles in the group must be finite-size. They cannot be point particles, but they can be aspherical or spherical as defined by their diff --git a/doc/src/compute_temp_body.rst b/doc/src/compute_temp_body.rst index f29ca5c39b..ef536c1af7 100644 --- a/doc/src/compute_temp_body.rst +++ b/doc/src/compute_temp_body.rst @@ -62,12 +62,17 @@ kinetic energy is computed as :math:`\frac12 I \omega^2`, where :math:`I` is the moment of inertia tensor for the aspherical particle and :math:`\omega` is its angular velocity, which is computed from its angular momentum. -A kinetic energy tensor, stored as a 6-element vector, is also calculated by -this compute. The formula for the components of the tensor is the same as the -above formula, except that :math:`v^2` and :math:`\omega^2` are -replaced by :math:`v_x v_y` and :math:`\omega_x \omega_y` for the -math:`xy` component, and the appropriate elements of the inertia tensor are -used. The six components of the vector are ordered :math:`xx`, :math:`yy`, +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute for use in the computation of a pressure tensor by the +:doc:`compute pressue ` command. The formula for +the components of the tensor is the same as the above expression for +:math:`E_\mathrm{kin}`, except that the 1/2 factor is NOT included and +the :math:`v_i^2` and :math:`\omega^2` are replaced by :math:`v_x v_y` +and :math:`\omega_x \omega_y` for the :math:`xy` component, and so on. +And the appropriate elements of the moment of inertia tensor are used. +Note that because it lacks the 1/2 factor, these tensor components are +twice those of the traditional kinetic energy tensor. The six +components of the vector are ordered :math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. The number of atoms contributing to the temperature is assumed to be @@ -111,17 +116,17 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1--6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. -See the :doc:`Howto output ` page for an overview of LAMMPS +vector of length 6 (symmetric tensor), which can be accessed by +indices 1--6. These values can be used by any command that uses +global scalar or vector values from a compute as input. See the +:doc:`Howto output ` page for an overview of LAMMPS output options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". -The scalar value will be in temperature :doc:`units `. -The vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. Restrictions """""""""""" diff --git a/doc/src/compute_temp_chunk.rst b/doc/src/compute_temp_chunk.rst index c92b4e36e9..33eab04343 100644 --- a/doc/src/compute_temp_chunk.rst +++ b/doc/src/compute_temp_chunk.rst @@ -85,12 +85,14 @@ By default, *adof* = 2 or 3 = dimensionality of system, as set via the :doc:`dimension ` command, and *cdof* = 0.0. This gives the usual formula for temperature. -A kinetic energy tensor, stored as a six-element vector, is also -calculated by this compute for use in the computation of a pressure -tensor. The formula for the components of the tensor is the same as -the above formula, except that :math:`v^2` is replaced by -:math:`v_x v_y` for the :math:`xy` component, and so on. -The six components of the vector are ordered :math:`xx`, :math:`yy`, +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute. The formula for the components of the tensor is the +same as the above expression for :math:`E_\mathrm{kin}`, except that +the 1/2 factor is NOT included and the :math:`v_i^2` is replaced by +:math:`v_{i,x} v_{i,y}` for the :math:`xy` component, and so on. Note +that because it lacks the 1/2 factor, these tensor components are +twice those of the traditional kinetic energy tensor. The six +components of the vector are ordered :math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. Note that the number of atoms contributing to the temperature is @@ -227,10 +229,10 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1--6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. -See the :doc:`Howto output ` page for an overview of LAMMPS +vector of length 6 (symmetric tensor), which can be accessed by +indices 1--6. These values can be used by any command that uses +global scalar or vector values from a compute as input. See the +:doc:`Howto output ` page for an overview of LAMMPS output options. This compute also optionally calculates a global array, if one or more @@ -245,9 +247,9 @@ page for an overview of LAMMPS output options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". The array values are "intensive". -The scalar value will be in temperature :doc:`units `. The -vector values will be in energy :doc:`units `. The array values -will be in temperature :doc:`units ` for the *temp* value, and in +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. The array values will be +in temperature :doc:`units ` for the *temp* value, and in energy :doc:`units ` for the *kecom* and *internal* values. Restrictions diff --git a/doc/src/compute_temp_com.rst b/doc/src/compute_temp_com.rst index d54fa7dfa6..e94c911dfa 100644 --- a/doc/src/compute_temp_com.rst +++ b/doc/src/compute_temp_com.rst @@ -44,12 +44,17 @@ where KE is the total kinetic energy of the group of atoms (sum of simulation, :math:`N` is number of atoms in the group, :math:`k_B` is the Boltzmann constant, and :math:`T` is the absolute temperature. -A kinetic energy tensor, stored as a six-element vector, is also -calculated by this compute for use in the computation of a pressure -tensor. The formula for the components of the tensor is the same as -the above formula, except that :math:`v^2` is replaced by :math:`v_x v_y` -for the :math:`xy` component, and so on. The six components of the vector are -ordered :math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute for use in the computation of a pressure tensor by the +:doc:`compute pressue ` command. The formula for +the components of the tensor is the same as the above expression for +:math:`E_\mathrm{kin}`, except that the 1/2 factor is NOT included and +the :math:`v_i^2` is replaced by :math:`v_{i,x} v_{i,y}` for the +:math:`xy` component, and so on. Note that because it lacks the 1/2 +factor, these tensor components are twice those of the traditional +kinetic energy tensor. The six components of the vector are ordered +:math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, +:math:`yz`. The number of atoms contributing to the temperature is assumed to be constant for the duration of the run; use the *dynamic* option of the @@ -81,17 +86,17 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1--6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. See the -:doc:`Howto output ` page for an overview of LAMMPS output -options. +vector of length 6 (symmetric tensor), which can be accessed by +indices 1--6. These values can be used by any command that uses +global scalar or vector values from a compute as input. See the +:doc:`Howto output ` page for an overview of LAMMPS +output options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". -The scalar value will be in temperature :doc:`units `. -The vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values is in energy :doc:`units `. Restrictions """""""""""" diff --git a/doc/src/compute_temp_cs.rst b/doc/src/compute_temp_cs.rst index a33fbf7ffb..4908b12797 100644 --- a/doc/src/compute_temp_cs.rst +++ b/doc/src/compute_temp_cs.rst @@ -31,27 +31,27 @@ on the center-of-mass velocity of atom pairs that are bonded to each other. This compute is designed to be used with the adiabatic core/shell model of :ref:`(Mitchell and Fincham) `. See the :doc:`Howto coreshell ` page for an overview of -the model as implemented in LAMMPS. Specifically, this compute -enables correct temperature calculation and thermostatting of -core/shell pairs where it is desirable for the internal degrees of -freedom of the core/shell pairs to not be influenced by a thermostat. -A compute of this style can be used by any command that computes a -temperature via :doc:`fix_modify ` -(e.g., :doc:`fix temp/rescale `, :doc:`fix npt `). +the model as implemented in LAMMPS. Specifically, this compute enables +correct temperature calculation and thermostatting of core/shell pairs +where it is desirable for the internal degrees of freedom of the +core/shell pairs to not be influenced by a thermostat. A compute of +this style can be used by any command that computes a temperature via +:doc:`fix_modify ` (e.g., :doc:`fix temp/rescale +`, :doc:`fix npt `). -Note that this compute does not require all ions to be polarized, -hence defined as core/shell pairs. One can mix core/shell pairs and -ions without a satellite particle if desired. The compute will -consider the non-polarized ions according to the physical system. +Note that this compute does not require all ions to be polarized, hence +defined as core/shell pairs. One can mix core/shell pairs and ions +without a satellite particle if desired. The compute will consider the +non-polarized ions according to the physical system. For this compute, core and shell particles are specified by two -respective group IDs, which can be defined using the -:doc:`group ` command. The number of atoms in the two groups -must be the same and there should be one bond defined between a pair -of atoms in the two groups. Non-polarized ions which might also be -included in the treated system should not be included into either of -these groups, they are taken into account by the *group-ID* (second -argument) of the compute. +respective group IDs, which can be defined using the :doc:`group +` command. The number of atoms in the two groups must be the +same and there should be one bond defined between a pair of atoms in the +two groups. Non-polarized ions which might also be included in the +treated system should not be included into either of these groups, they +are taken into account by the *group-ID* (second argument) of the +compute. The temperature is calculated by the formula @@ -60,52 +60,56 @@ The temperature is calculated by the formula \text{KE} = \frac{\text{dim}}{2} N k_B T, where KE is the total kinetic energy of the group of atoms (sum of -:math:`\frac12 m v^2`), dim = 2 or 3 is the dimensionality of the simulation, -:math:`N` is the number of atoms in the group, :math:`k_B` is the Boltzmann -constant, and :math:`T` is the absolute temperature. Note that -the velocity of each core or shell atom used in the KE calculation is -the velocity of the center-of-mass (COM) of the core/shell pair the -atom is part of. +:math:`\frac12 m v^2`), dim = 2 or 3 is the dimensionality of the +simulation, :math:`N` is the number of atoms in the group, :math:`k_B` +is the Boltzmann constant, and :math:`T` is the absolute temperature. +Note that the velocity of each core or shell atom used in the KE +calculation is the velocity of the center-of-mass (COM) of the +core/shell pair the atom is part of. -A kinetic energy tensor, stored as a six-element vector, is also calculated by -this compute for use in the computation of a pressure tensor. The formula for -the components of the tensor is the same as the above formula, except that -:math:`v^2` is replaced by :math:`v_x v_y` for the :math:`xy` component, and so -on. The six components of the vector are ordered :math:`xx`, :math:`yy`, -:math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. In contrast to the temperature, -the velocity of each core or shell atom is taken individually. +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute for use in the computation of a pressure tensor by the +:doc:`compute pressue ` command. The formula for the +components of the tensor is the same as the above expression for +:math:`E_\mathrm{kin}`, except that the 1/2 factor is NOT included and +the :math:`v_i^2` is replaced by :math:`v_{i,x} v_{i,y}` for the +:math:`xy` component, and so on. Note that because it lacks the 1/2 +factor, these tensor components are twice those of the traditional +kinetic energy tensor. The six components of the vector are ordered +:math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. The change this fix makes to core/shell atom velocities is essentially -computing the temperature after a "bias" has been removed from the velocity of -the atoms. This "bias" is the velocity of the atom relative to the -center-of-mass velocity of the core/shell pair. If this compute is used with a -fix command that performs thermostatting then this bias will be subtracted from -each atom, thermostatting of the remaining center-of-mass velocity will be -performed, and the bias will be added back in. This means the thermostatting -will effectively be performed on the core/shell pairs, instead of on the -individual core and shell atoms. Thermostatting fixes that work in this way -include :doc:`fix nvt `, :doc:`fix temp/rescale `, -:doc:`fix temp/berendsen `, and -:doc:`fix langevin `. +computing the temperature after a "bias" has been removed from the +velocity of the atoms. This "bias" is the velocity of the atom relative +to the center-of-mass velocity of the core/shell pair. If this compute +is used with a fix command that performs thermostatting then this bias +will be subtracted from each atom, thermostatting of the remaining +center-of-mass velocity will be performed, and the bias will be added +back in. This means the thermostatting will effectively be performed on +the core/shell pairs, instead of on the individual core and shell atoms. +Thermostatting fixes that work in this way include :doc:`fix nvt +`, :doc:`fix temp/rescale `, :doc:`fix +temp/berendsen `, and :doc:`fix langevin +`. The internal energy of core/shell pairs can be calculated by the -:doc:`compute temp/chunk ` command, if chunks are defined -as core/shell pairs. See the :doc:`Howto coreshell ` doc -page for more discussion on how to do this. +:doc:`compute temp/chunk ` command, if chunks are +defined as core/shell pairs. See the :doc:`Howto coreshell +` doc page for more discussion on how to do this. Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1--6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. +vector of length 6 (symmetric tensor), which can be accessed by indices +1--6. These values can be used by any command that uses global scalar +or vector values from a compute as input. -The scalar value calculated by this compute is "intensive". The -vector values are "extensive". +The scalar value calculated by this compute is "intensive". The vector +values are "extensive". -The scalar value will be in temperature :doc:`units `. The -vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. Restrictions """""""""""" diff --git a/doc/src/compute_temp_deform.rst b/doc/src/compute_temp_deform.rst index adf76564a8..1c8c2da096 100644 --- a/doc/src/compute_temp_deform.rst +++ b/doc/src/compute_temp_deform.rst @@ -73,12 +73,16 @@ simulation, :math:`N` is the number of atoms in the group, :math:`k_B` is the Boltzmann constant, and :math:`T` is the temperature. Note that :math:`v` in the kinetic energy formula is the atom's velocity. -A kinetic energy tensor, stored as a six-element vector, is also -calculated by this compute for use in the computation of a pressure -tensor. The formula for the components of the tensor is the same as -the above formula, except that :math:`v^2` is replaced by :math:`v_x v_y` for -the :math:`xy` component, and so on. The six components of the vector are -ordered :math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute for use in the computation of a pressure tensor by the +:doc:`compute pressue ` command. The formula for +the components of the tensor is the same as the above expression for +:math:`E_\mathrm{kin}`, except that the 1/2 factor is NOT included and +the :math:`v_i^2` is replaced by :math:`v_{i,x} v_{i,y}` for the +:math:`xy` component, and so on. Note that because it lacks the 1/2 +factor, these tensor components are twice those of the traditional +kinetic energy tensor. The six components of the vector are ordered +:math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. The number of atoms contributing to the temperature is assumed to be @@ -128,17 +132,17 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1--6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. See the -:doc:`Howto output ` page for an overview of LAMMPS output -options. +vector of length 6 (symmetric tensor), which can be accessed by +indices 1--6. These values can be used by any command that uses +global scalar or vector values from a compute as input. See the +:doc:`Howto output ` page for an overview of LAMMPS +output options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". -The scalar value will be in temperature :doc:`units `. -The vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. Restrictions """""""""""" diff --git a/doc/src/compute_temp_deform_eff.rst b/doc/src/compute_temp_deform_eff.rst index 83535f4727..3c22ad8045 100644 --- a/doc/src/compute_temp_deform_eff.rst +++ b/doc/src/compute_temp_deform_eff.rst @@ -29,17 +29,20 @@ model, after subtracting out a streaming velocity induced by the simulation box changing size and/or shape, for example in a non-equilibrium MD (NEMD) simulation. The size/shape change is induced by use of the :doc:`fix deform ` command. A -compute of this style is created by the -:doc:`fix nvt/sllod/eff ` command to compute the thermal -temperature of atoms for thermostatting purposes. A compute of this -style can also be used by any command that computes a temperature -(e.g., :doc:`thermo_modify `, :doc:`fix npt/eff `). +compute of this style is created by the :doc:`fix nvt/sllod/eff +` command to compute the thermal temperature of +atoms for thermostatting purposes. A compute of this style can also +be used by any command that computes a temperature (e.g., +:doc:`thermo_modify `, :doc:`fix npt/eff +`). The calculation performed by this compute is exactly like that described by the :doc:`compute temp/deform ` -command, except that the formula for the temperature includes the -radial electron velocity contributions, as discussed by the :doc:`compute temp/eff ` command. Note that only the -translational degrees of freedom for each nuclei or electron are +command, except that the formulas for the temperature (scalar) and +diagonal components of the symmetric tensor (vector) include the +radial electron velocity contributions, as discussed by the +:doc:`compute temp/eff ` command. Note that only +the translational degrees of freedom for each nuclei or electron are affected by the streaming velocity adjustment. The radial velocity component of the electrons is not affected. @@ -47,17 +50,17 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1--6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. See the -:doc:`Howto output ` page for an overview of LAMMPS output -options. +vector of length 6 (symmetric tensor), which can be accessed by +indices 1--6. These values can be used by any command that uses +global scalar or vector values from a compute as input. See the +:doc:`Howto output ` page for an overview of LAMMPS +output options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". -The scalar value will be in temperature :doc:`units `. The -vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. Restrictions """""""""""" diff --git a/doc/src/compute_temp_partial.rst b/doc/src/compute_temp_partial.rst index d5628e0d60..d98558c159 100644 --- a/doc/src/compute_temp_partial.rst +++ b/doc/src/compute_temp_partial.rst @@ -44,12 +44,16 @@ constant, and :math:`T` = temperature. The calculation of KE excludes the is 0. The dim parameter is adjusted to give the correct number of degrees of freedom. -A kinetic energy tensor, stored as a six-element vector, is also -calculated by this compute for use in the calculation of a pressure -tensor. The formula for the components of the tensor is the same as -the above formula, except that :math:`v^2` is replaced by :math:`v_x v_y` for -the :math:`xy` component, and so on. The six components of the vector are -ordered :math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute for use in the computation of a pressure tensor by the +:doc:`compute pressue ` command. The formula for +the components of the tensor is the same as the above expression for +:math:`E_\mathrm{kin}`, except that the 1/2 factor is NOT included and +the :math:`v_i^2` is replaced by :math:`v_{i,x} v_{i,y}` for the +:math:`xy` component, and so on. Note that because it lacks the 1/2 +factor, these tensor components are twice those of the traditional +kinetic energy tensor. The six components of the vector are ordered +:math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. The number of atoms contributing to the temperature is assumed to be @@ -88,17 +92,17 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1--6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. -See the :doc:`Howto output ` page for an overview of LAMMPS +vector of length 6 (symmetric tensor), which can be accessed by +indices 1--6. These values can be used by any command that uses +global scalar or vector values from a compute as input. See the +:doc:`Howto output ` page for an overview of LAMMPS output options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". -The scalar value will be in temperature :doc:`units `. The -vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. Restrictions """""""""""" diff --git a/doc/src/compute_temp_profile.rst b/doc/src/compute_temp_profile.rst index 566d8cf3fc..9f6bbfc89c 100644 --- a/doc/src/compute_temp_profile.rst +++ b/doc/src/compute_temp_profile.rst @@ -97,21 +97,27 @@ center-of-mass velocity across the group in directions where streaming velocity is *not* subtracted. This can be altered using the *extra* option of the :doc:`compute_modify ` command. -If the *out* keyword is used with a *tensor* value, which is the default, -a kinetic energy tensor, stored as a six-element vector, is also calculated by -this compute for use in the computation of a pressure tensor. The formula for -the components of the tensor is the same as the above formula, except that -:math:`v^2` is replaced by :math:`v_x v_y` for the :math:`xy` component, and -so on. The six components of the vector are ordered :math:`xx`, :math:`yy`, +If the *out* keyword is used with a *tensor* value, which is the +default, then a symmetric tensor, stored as a six-element vector, is +also calculated by this compute for use in the computation of a +pressure tensor by the :doc:`compute pressue ` +command. The formula for the components of the tensor is the same as +the above expression for :math:`E_\mathrm{kin}`, except that the 1/2 +factor is NOT included and the :math:`v_i^2` is replaced by +:math:`v_{i,x} v_{i,y}` for the :math:`xy` component, and so on. Note +that because it lacks the 1/2 factor, these tensor components are +twice those of the traditional kinetic energy tensor. The six +components of the vector are ordered :math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. -If the *out* keyword is used with a *bin* value, the count of atoms and -computed temperature for each bin are stored for output, as an array of values, -as described below. The temperature of each bin is calculated as described -above, where the bias velocity is subtracted and only the remaining thermal -velocity of atoms in the bin contributes to the temperature. See the note -below for how the temperature is normalized by the degrees-of-freedom of atoms -in the bin. +If the *out* keyword is used with a *bin* value, the count of atoms +and computed temperature for each bin are stored for output, as an +array of values, as described below. The temperature of each bin is +calculated as described above, where the bias velocity is subtracted +and only the remaining thermal velocity of atoms in the bin +contributes to the temperature. See the note below for how the +temperature is normalized by the degrees-of-freedom of atoms in the +bin. The number of atoms contributing to the temperature is assumed to be constant for the duration of the run; use the *dynamic* option of the @@ -166,16 +172,17 @@ Output info This compute calculates a global scalar (the temperature). Depending on the setting of the *out* keyword, it also calculates a global vector or array. For *out* = *tensor*, it calculates a vector of -length 6 (KE tensor), which can be accessed by indices 1--6. For *out* -= *bin* it calculates a global array which has 2 columns and :math:`N` rows, -where :math:`N` is the number of bins. The first column contains the number -of atoms in that bin. The second contains the temperature of that -bin, calculated as described above. The ordering of rows in the array -is as follows. Bins in :math:`x` vary fastest, then :math:`y`, then -:math:`z`. Thus for a :math:`10\times 10\times 10` 3d array of bins, there -will be 1000 rows. The bin with indices :math:`(i_x,i_y,i_z) = (2,3,4)` would -map to row :math:`M = 10^2(i_z-1) + 10(i_y-1) + i_x = 322`, where the rows are -numbered from 1 to 1000 and the bin indices are numbered from 1 to 10 in each +length 6 (symmetric tensor), which can be accessed by indices 1--6. +For *out* = *bin* it calculates a global array which has 2 columns and +:math:`N` rows, where :math:`N` is the number of bins. The first +column contains the number of atoms in that bin. The second contains +the temperature of that bin, calculated as described above. The +ordering of rows in the array is as follows. Bins in :math:`x` vary +fastest, then :math:`y`, then :math:`z`. Thus for a :math:`10\times +10\times 10` 3d array of bins, there will be 1000 rows. The bin with +indices :math:`(i_x,i_y,i_z) = (2,3,4)` would map to row :math:`M = +10^2(i_z-1) + 10(i_y-1) + i_x = 322`, where the rows are numbered from +1 to 1000 and the bin indices are numbered from 1 to 10 in each dimension. These values can be used by any command that uses global scalar or @@ -186,9 +193,9 @@ options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". The array values are "intensive". -The scalar value will be in temperature :doc:`units `. The -vector values will be in energy :doc:`units `. The first column -of array values are counts; the values in the second column will be in +The scalar value us in temperature :doc:`units `. The vector +values are in energy :doc:`units `. The first column of array +values are counts; the values in the second column will be in temperature :doc:`units `. Restrictions @@ -203,7 +210,10 @@ will be for most thermostats. Related commands """""""""""""""" -:doc:`compute temp `, :doc:`compute temp/ramp `, :doc:`compute temp/deform `, :doc:`compute pressure ` +:doc:`compute temp `, +:doc:`compute temp/ramp `, +:doc:`compute temp/deform `, +:doc:`compute pressure ` Default """"""" diff --git a/doc/src/compute_temp_ramp.rst b/doc/src/compute_temp_ramp.rst index 2e170316fb..643ca9d1dd 100644 --- a/doc/src/compute_temp_ramp.rst +++ b/doc/src/compute_temp_ramp.rst @@ -63,12 +63,17 @@ command (e.g., :math:`\AA` for units = real or metal). A velocity in lattice spacings per unit time). The :doc:`lattice ` command must have been previously used to define the lattice spacing. -A kinetic energy tensor, stored as a six-element vector, is also calculated by -this compute for use in the computation of a pressure tensor. The formula for -the components of the tensor is the same as the above formula, except that -:math:`v^2` is replaced by :math:`v_x v_y` for the :math:`xy` component, and -so on. The six components of the vector are ordered :math:`xx`, :math:`yy`, -:math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute for use in the computation of a pressure tensor by the +:doc:`compute pressue ` command. The formula for +the components of the tensor is the same as the above expression for +:math:`E_\mathrm{kin}`, except that the 1/2 factor is NOT included and +the :math:`v_i^2` is replaced by :math:`v_{i,x} v_{i,y}` for the +:math:`xy` component, and so on. Note that because it lacks the 1/2 +factor, these tensor components are twice those of the traditional +kinetic energy tensor. The six components of the vector are ordered +:math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, +:math:`yz`. The number of atoms contributing to the temperature is assumed to be constant for the duration of the run; use the *dynamic* option of the @@ -100,17 +105,17 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1--6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. See the -:doc:`Howto output ` page for an overview of LAMMPS output -options. +vector of length 6 (symmetric tensor), which can be accessed by +indices 1--6. These values can be used by any command that uses +global scalar or vector values from a compute as input. See the +:doc:`Howto output ` page for an overview of LAMMPS +output options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". -The scalar value will be in temperature :doc:`units `. The -vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. Restrictions """""""""""" @@ -119,7 +124,10 @@ Restrictions Related commands """""""""""""""" -:doc:`compute temp `, :doc:`compute temp/profie `, :doc:`compute temp/deform `, :doc:`compute pressure ` +:doc:`compute temp `, +:doc:`compute temp/profile `, +:doc:`compute temp/deform `, +:doc:`compute pressure ` Default """"""" diff --git a/doc/src/compute_temp_region.rst b/doc/src/compute_temp_region.rst index 77954e8898..d2fc8a1633 100644 --- a/doc/src/compute_temp_region.rst +++ b/doc/src/compute_temp_region.rst @@ -49,12 +49,17 @@ where KE = is the total kinetic energy of the group of atoms (sum of :math:`N` is the number of atoms in both the group and region, :math:`k_B` is the Boltzmann constant, and :math:`T` temperature. -A kinetic energy tensor, stored as a six-element vector, is also -calculated by this compute for use in the computation of a pressure -tensor. The formula for the components of the tensor is the same as -the above formula, except that :math:`v^2` is replaced by :math:`v_x v_y` -for the :math:`xy` component, and so on. The six components of the vector are -ordered :math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute for use in the computation of a pressure tensor by the +:doc:`compute pressue ` command. The formula for +the components of the tensor is the same as the above expression for +:math:`E_\mathrm{kin}`, except that the 1/2 factor is NOT included and +the :math:`v_i^2` is replaced by :math:`v_{i,x} v_{i,y}` for the +:math:`xy` component, and so on. Note that because it lacks the 1/2 +factor, these tensor components are twice those of the traditional +kinetic energy tensor. The six components of the vector are ordered +:math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, +:math:`yz`. The number of atoms contributing to the temperature is calculated each time the temperature is evaluated since it is assumed atoms can @@ -78,12 +83,13 @@ will operate only on atoms that are currently in the geometric region. Unlike other compute styles that calculate temperature, this compute does not subtract out degrees-of-freedom due to fixes that constrain -motion, such as :doc:`fix shake ` and :doc:`fix rigid `. This is because those degrees of freedom -(e.g., a constrained bond) could apply to sets of atoms that straddle -the region boundary, and hence the concept is somewhat ill-defined. -If needed the number of subtracted degrees of freedom can be set -explicitly using the *extra* option of the -:doc:`compute_modify ` command. +motion, such as :doc:`fix shake ` and :doc:`fix rigid +`. This is because those degrees of freedom (e.g., a +constrained bond) could apply to sets of atoms that straddle the +region boundary, and hence the concept is somewhat ill-defined. If +needed the number of subtracted degrees of freedom can be set +explicitly using the *extra* option of the :doc:`compute_modify +` command. See the :doc:`Howto thermostat ` page for a discussion of different ways to compute temperature and perform @@ -93,17 +99,17 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1--6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. See the -:doc:`Howto output ` page for an overview of LAMMPS output -options. +vector of length 6 (symmetric tensor), which can be accessed by +indices 1--6. These values can be used by any command that uses +global scalar or vector values from a compute as input. See the +:doc:`Howto output ` page for an overview of LAMMPS +output options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". -The scalar value will be in temperature :doc:`units `. -The vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. Restrictions """""""""""" diff --git a/doc/src/compute_temp_region_eff.rst b/doc/src/compute_temp_region_eff.rst index b8cd73f4fd..4193a0a7ec 100644 --- a/doc/src/compute_temp_region_eff.rst +++ b/doc/src/compute_temp_region_eff.rst @@ -32,32 +32,33 @@ temperature (e.g., :doc:`thermo_modify `). The operation of this compute is exactly like that described by the :doc:`compute temp/region ` command, except that -the formula for the temperature itself includes the radial electron -velocity contributions, as discussed by the -:doc:`compute temp/eff ` command. +the formulas for the temperature (scalar) and diagonal components of +the symmetric tensor (vector) include the radial electron velocity +contributions, as discussed by the :doc:`compute temp/eff +` command. Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1--6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. See the -:doc:`Howto output ` page for an overview of LAMMPS output -options. +vector of length 6 (symmetric tensor), which can be accessed by +indices 1--6. These values can be used by any command that uses +global scalar or vector values from a compute as input. See the +:doc:`Howto output ` page for an overview of LAMMPS +output options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". -The scalar value will be in temperature :doc:`units `. The -vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. Restrictions """""""""""" -This compute is part of the EFF package. It is only enabled if -LAMMPS was built with that package. -See the :doc:`Build package ` page for more info. +This compute is part of the EFF package. It is only enabled if LAMMPS +was built with that package. See the :doc:`Build package +` page for more info. Related commands """""""""""""""" diff --git a/doc/src/compute_temp_rotate.rst b/doc/src/compute_temp_rotate.rst index 7c445109a1..7fab9a1325 100644 --- a/doc/src/compute_temp_rotate.rst +++ b/doc/src/compute_temp_rotate.rst @@ -43,12 +43,17 @@ where KE is the total kinetic energy of the group of atoms (sum of :math:`N` is the number of atoms in the group, :math:`k_B` is the Boltzmann constant, and :math:`T` is the absolute temperature. -A kinetic energy tensor, stored as a six-element vector, is also calculated by -this compute for use in the computation of a pressure tensor. The formula for -the components of the tensor is the same as the above formula, except that -:math:`v^2` is replaced by :math:`v_x v_y` for the :math:`xy` component, and -so on. The six components of the vector are ordered :math:`xx`, :math:`yy`, -:math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute for use in the computation of a pressure tensor by the +:doc:`compute pressue ` command. The formula for +the components of the tensor is the same as the above expression for +:math:`E_\mathrm{kin}`, except that the 1/2 factor is NOT included and +the :math:`v_i^2` is replaced by :math:`v_{i,x} v_{i,y}` for the +:math:`xy` component, and so on. Note that because it lacks the 1/2 +factor, these tensor components are twice those of the traditional +kinetic energy tensor. The six components of the vector are ordered +:math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, +:math:`yz`. The number of atoms contributing to the temperature is assumed to be constant for the duration of the run; use the *dynamic* option of the @@ -80,17 +85,16 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1-6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. See the -:doc:`Howto output ` page for an overview of LAMMPS output -options. +vector of length 6 (symmetric tensor), which can be accessed by +indices 1-6. These values can be used by any command that uses global +scalar or vector values from a compute as input. See the :doc:`Howto +output ` page for an overview of LAMMPS output options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". -The scalar value will be in temperature :doc:`units `. The -vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. Restrictions """""""""""" diff --git a/doc/src/compute_temp_sphere.rst b/doc/src/compute_temp_sphere.rst index d1891f64bf..5499b3aae9 100644 --- a/doc/src/compute_temp_sphere.rst +++ b/doc/src/compute_temp_sphere.rst @@ -77,6 +77,18 @@ tensor is the same as the above formulas, except that :math:`v^2` and vector are ordered :math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute for use in the computation of a pressure tensor by the +:doc:`compute pressue ` command. The formula for +the components of the tensor is the same as the above expression for +:math:`E_\mathrm{kin}`, except that the 1/2 factor is NOT included and +the :math:`v_i^2` and :math:`\omega^2` are replaced by :math:`v_x v_y` +and :math:`\omega_x \omega_y` for the :math:`xy` component, and so on. +Note that because it lacks the 1/2 factor, these tensor components are +twice those of the traditional kinetic energy tensor. The six +components of the vector are ordered :math:`xx`, :math:`yy`, +:math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. + The number of atoms contributing to the temperature is assumed to be constant for the duration of the run; use the *dynamic* option of the :doc:`compute_modify ` command if this is not the case. @@ -117,17 +129,17 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 6 (KE tensor), which can be accessed by indices 1--6. -These values can be used by any command that uses global scalar or -vector values from a compute as input. -See the :doc:`Howto output ` page for an overview of LAMMPS +vector of length 6 (symmetric tensor), which can be accessed by +indices 1--6. These values can be used by any command that uses +global scalar or vector values from a compute as input. See the +:doc:`Howto output ` page for an overview of LAMMPS output options. The scalar value calculated by this compute is "intensive". The vector values are "extensive". -The scalar value will be in temperature :doc:`units `. The -vector values will be in energy :doc:`units `. +The scalar value is in temperature :doc:`units `. The vector +values are in energy :doc:`units `. Restrictions """""""""""" diff --git a/doc/src/compute_viscosity_cos.rst b/doc/src/compute_viscosity_cos.rst index 87cfec56cf..bfc0c03d79 100644 --- a/doc/src/compute_viscosity_cos.rst +++ b/doc/src/compute_viscosity_cos.rst @@ -86,12 +86,17 @@ where KE is the total kinetic energy of the group of atoms (sum of :math:`N` is the number of atoms in the group, :math:`k_B` is the Boltzmann constant, and :math:`T` is the absolute temperature. -A kinetic energy tensor, stored as a six-element vector, is also -calculated by this compute for use in the computation of a pressure -tensor. The formula for the components of the tensor is the same as -the above formula, except that :math:`v^2` is replaced by :math:`v_x v_y` for -the :math:`xy` component, and so on. The six components of the vector are -ordered :math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, :math:`yz`. +A symmetric tensor, stored as a six-element vector, is also calculated +by this compute for use in the computation of a pressure tensor by the +:doc:`compute pressue ` command. The formula for +the components of the tensor is the same as the above expression for +:math:`E_\mathrm{kin}`, except that the 1/2 factor is NOT included and +the :math:`v_i^2` is replaced by :math:`v_{i,x} v_{i,y}` for the +:math:`xy` component, and so on. Note that because it lacks the 1/2 +factor, these tensor components are twice those of the traditional +kinetic energy tensor. The six components of the vector are ordered +:math:`xx`, :math:`yy`, :math:`zz`, :math:`xy`, :math:`xz`, +:math:`yz`. The number of atoms contributing to the temperature is assumed to be constant for the duration of the run; use the *dynamic* option of the @@ -126,21 +131,21 @@ Output info """"""""""" This compute calculates a global scalar (the temperature) and a global -vector of length 7, which can be accessed by indices 1--7. -The first six elements of the vector are the KE tensor, -and the seventh is the cosine-shaped velocity amplitude :math:`V`, -which can be used to calculate the reciprocal viscosity, as shown in the example. -These values can be used by any command that uses global scalar or -vector values from a compute as input. -See the :doc:`Howto output ` page for an overview of LAMMPS output options. +vector of length 7, which can be accessed by indices 1--7. The first +six elements of the vector are those of the symmetric tensor discussed +above. The seventh is the cosine-shaped velocity amplitude :math:`V`, +which can be used to calculate the reciprocal viscosity, as shown in +the example. These values can be used by any command that uses global +scalar or vector values from a compute as input. See the :doc:`Howto +output ` page for an overview of LAMMPS output options. The scalar value calculated by this compute is "intensive". The first six elements of vector values are "extensive", and the seventh element of vector values is "intensive". -The scalar value will be in temperature :doc:`units `. -The first six elements of vector values will be in energy :doc:`units `. -The seventh element of vector value will be in velocity :doc:`units `. +The scalar value is in temperature :doc:`units `. The first +six elements of vector values are in energy :doc:`units `. The +seventh element of vector value us in velocity :doc:`units `. Restrictions """""""""""" diff --git a/doc/src/fix_adapt.rst b/doc/src/fix_adapt.rst index 03aef12a6c..1943798160 100644 --- a/doc/src/fix_adapt.rst +++ b/doc/src/fix_adapt.rst @@ -319,25 +319,28 @@ all types from 1 to :math:`N`. A leading asterisk means all types from :math:`N` (inclusive). A middle asterisk means all types from m to n (inclusive). -Currently *bond* does not support bond_style hybrid nor bond_style -hybrid/overlay as bond styles. The bond styles that currently work -with fix_adapt are +If :doc:`bond_style hybrid ` is used, *bstyle* should be a +sub-style name. The bond styles that currently work with fix adapt are: -+------------------------------------+------------+------------+ -| :doc:`class2 ` | r0 | type bonds | -+------------------------------------+------------+------------+ -| :doc:`fene ` | k,r0 | type bonds | -+------------------------------------+------------+------------+ -| :doc:`fene/nm ` | k,r0 | type bonds | -+------------------------------------+------------+------------+ -| :doc:`gromos ` | k,r0 | type bonds | -+------------------------------------+------------+------------+ -| :doc:`harmonic ` | k,r0 | type bonds | -+------------------------------------+------------+------------+ -| :doc:`morse ` | r0 | type bonds | -+------------------------------------+------------+------------+ -| :doc:`nonlinear ` | epsilon,r0 | type bonds | -+------------------------------------+------------+------------+ ++---------------------------------------------------+------------+------------+ +| :doc:`class2 ` | r0 | type bonds | ++---------------------------------------------------+------------+------------+ +| :doc:`fene ` | k,r0 | type bonds | ++---------------------------------------------------+------------+------------+ +| :doc:`fene/nm ` | k,r0 | type bonds | ++---------------------------------------------------+------------+------------+ +| :doc:`gromos ` | k,r0 | type bonds | ++---------------------------------------------------+------------+------------+ +| :doc:`harmonic ` | k,r0 | type bonds | ++---------------------------------------------------+------------+------------+ +| :doc:`harmonic/shift ` | k,r0,r1 | type bonds | ++---------------------------------------------------+------------+------------+ +| :doc:`harmonic/restrain ` | k | type bonds | ++---------------------------------------------------+------------+------------+ +| :doc:`morse ` | r0 | type bonds | ++---------------------------------------------------+------------+------------+ +| :doc:`nonlinear ` | epsilon,r0 | type bonds | ++---------------------------------------------------+------------+------------+ ---------- @@ -357,9 +360,8 @@ all types from 1 to :math:`N`. A leading asterisk means all types from :math:`N` (inclusive). A middle asterisk means all types from m to n (inclusive). -Currently *angle* does not support angle_style hybrid nor angle_style -hybrid/overlay as angle styles. The angle styles that currently work -with fix_adapt are +If :doc:`angle_style hybrid ` is used, *astyle* should be a +sub-style name. The angle styles that currently work with fix adapt are: +------------------------------------+----------+-------------+ | :doc:`harmonic ` | k,theta0 | type angles | diff --git a/doc/src/fix_bond_react.rst b/doc/src/fix_bond_react.rst index af3ee0fd48..08c2f5fb9d 100644 --- a/doc/src/fix_bond_react.rst +++ b/doc/src/fix_bond_react.rst @@ -785,3 +785,7 @@ reset_mol_ids = yes, custom_charges = no, molecule = off, modify_create = *fit a .. _Gissinger2020: **(Gissinger2020)** Gissinger, Jensen and Wise, Macromolecules, 53, 22, 9953-9961 (2020). + +.. _Gissinger2024: + +**(Gissinger2024)** Gissinger, Jensen and Wise, Computer Physics Communications, 304, 109287 (2024). diff --git a/doc/src/fix_meso_move.rst b/doc/src/fix_meso_move.rst index 64b451b7f1..d5e1bba446 100644 --- a/doc/src/fix_meso_move.rst +++ b/doc/src/fix_meso_move.rst @@ -247,7 +247,7 @@ defined by the :doc:`atom_style sph ` command. All particles in the group must be mesoscopic SPH/SDPD particles. -.. versionchanged:: TBD +.. versionchanged:: 29Aug2024 This fix is incompatible with deformation controls that remap velocity, for instance the *remap v* option of :doc:`fix deform `. diff --git a/doc/src/fix_mvv_dpd.rst b/doc/src/fix_mvv_dpd.rst index e64a162bf4..44883e92ad 100644 --- a/doc/src/fix_mvv_dpd.rst +++ b/doc/src/fix_mvv_dpd.rst @@ -97,7 +97,7 @@ These fixes are part of the DPD-MESO package. They are only enabled if LAMMPS was built with that package. See the :doc:`Build package ` page for more info. -.. versionchanged:: TBD +.. versionchanged:: 29Aug2024 This fix is incompatible with deformation controls that remap velocity, for instance the *remap v* option of :doc:`fix deform `. diff --git a/doc/src/fix_rheo.rst b/doc/src/fix_rheo.rst index 3c7f8449c7..2977662238 100644 --- a/doc/src/fix_rheo.rst +++ b/doc/src/fix_rheo.rst @@ -44,7 +44,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 29Aug2024 Perform time integration for RHEO particles, updating positions, velocities, and densities. For an overview of other features available in the RHEO package, diff --git a/doc/src/fix_rheo_oxidation.rst b/doc/src/fix_rheo_oxidation.rst index ba3ead3f1f..dc22ed304a 100644 --- a/doc/src/fix_rheo_oxidation.rst +++ b/doc/src/fix_rheo_oxidation.rst @@ -27,7 +27,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 29Aug2024 This fix dynamically creates bonds on the surface of fluids to represent physical processes such as oxidation. It is intended diff --git a/doc/src/fix_rheo_pressure.rst b/doc/src/fix_rheo_pressure.rst index 40d623ae07..2a714b298b 100644 --- a/doc/src/fix_rheo_pressure.rst +++ b/doc/src/fix_rheo_pressure.rst @@ -33,7 +33,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 29Aug2024 This fix defines a pressure equation of state for RHEO particles. One can define different equations of state for different atom types. An equation diff --git a/doc/src/fix_rheo_thermal.rst b/doc/src/fix_rheo_thermal.rst index cf245cbdca..214bc1db86 100644 --- a/doc/src/fix_rheo_thermal.rst +++ b/doc/src/fix_rheo_thermal.rst @@ -48,7 +48,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 29Aug2024 This fix performs time integration of temperature for atom style rheo/thermal. In addition, it defines multiple thermal properties of particles and handles diff --git a/doc/src/fix_rheo_viscosity.rst b/doc/src/fix_rheo_viscosity.rst index 5bc1b2a210..804059e6f8 100644 --- a/doc/src/fix_rheo_viscosity.rst +++ b/doc/src/fix_rheo_viscosity.rst @@ -38,7 +38,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 29Aug2024 This fix defines a viscosity for RHEO particles. One can define different viscosities for different atom types, but a viscosity must be specified for diff --git a/doc/src/fix_rigid_meso.rst b/doc/src/fix_rigid_meso.rst index 3f734e3fef..6a9a85a865 100644 --- a/doc/src/fix_rigid_meso.rst +++ b/doc/src/fix_rigid_meso.rst @@ -353,7 +353,7 @@ defined by the :doc:`atom_style sph ` command. All particles in the group must be mesoscopic SPH/SDPD particles. -.. versionchanged:: TBD +.. versionchanged:: 29Aug2024 This fix is incompatible with deformation controls that remap velocity, for instance the *remap v* option of :doc:`fix deform `. diff --git a/doc/src/fix_shake.rst b/doc/src/fix_shake.rst index 339d0fd68c..434415eecf 100644 --- a/doc/src/fix_shake.rst +++ b/doc/src/fix_shake.rst @@ -137,7 +137,7 @@ constrained (within a fudge factor of MASSDELTA specified in both bonds in the angle are constrained then the angle will also be constrained if its type is in the list. -.. versionchanged:: TBD +.. versionchanged:: 29Aug2024 The types may be given as type labels *only* if there is no atom, bond, or angle type label named *b*, *a*, *t*, or *m* defined in the diff --git a/doc/src/fix_smd_integrate_tlsph.rst b/doc/src/fix_smd_integrate_tlsph.rst index 44d4bab3a5..fce4c057c3 100644 --- a/doc/src/fix_smd_integrate_tlsph.rst +++ b/doc/src/fix_smd_integrate_tlsph.rst @@ -53,7 +53,7 @@ Restrictions This fix is part of the MACHDYN package. It is only enabled if LAMMPS was built with that package. See the :doc:`Build package ` page for more info. -.. versionchanged:: TBD +.. versionchanged:: 29Aug2024 This fix is incompatible with deformation controls that remap velocity, for instance the *remap v* option of :doc:`fix deform `. diff --git a/doc/src/fix_smd_integrate_ulsph.rst b/doc/src/fix_smd_integrate_ulsph.rst index 6b1e070763..60dfb06a0e 100644 --- a/doc/src/fix_smd_integrate_ulsph.rst +++ b/doc/src/fix_smd_integrate_ulsph.rst @@ -61,7 +61,7 @@ Restrictions This fix is part of the MACHDYN package. It is only enabled if LAMMPS was built with that package. See the :doc:`Build package ` page for more info. -.. versionchanged:: TBD +.. versionchanged:: 29Aug2024 This fix is incompatible with deformation controls that remap velocity, for instance the *remap v* option of :doc:`fix deform `. diff --git a/doc/src/geturl.rst b/doc/src/geturl.rst index 0ca0ce0cd3..acf1e21a3e 100644 --- a/doc/src/geturl.rst +++ b/doc/src/geturl.rst @@ -32,7 +32,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 29Aug2024 Download a file from an URL to the local disk. This is implemented with the `libcurl library `_ which supports a diff --git a/doc/src/group2ndx.rst b/doc/src/group2ndx.rst index 19c472e109..e1c4fd23f5 100644 --- a/doc/src/group2ndx.rst +++ b/doc/src/group2ndx.rst @@ -51,7 +51,7 @@ index file. When specifying group IDs, only those groups will be written to the index file. In order to follow the Gromacs conventions, the group *all* will be renamed to *System* in the index file. -The *ndx2group* command will create of update group definitions from +The *ndx2group* command will create or update group definitions from those stored in an index file. Without specifying any group IDs, all groups except *System* will be read from the index file and the corresponding groups recreated. If a group of the same name already diff --git a/doc/src/neigh_modify.rst b/doc/src/neigh_modify.rst index 753990c93f..bf87c8452c 100644 --- a/doc/src/neigh_modify.rst +++ b/doc/src/neigh_modify.rst @@ -159,7 +159,7 @@ sample scenarios where this is useful: * When one or more rigid bodies are specified, interactions within each body can be turned off to save needless computation. See the :doc:`fix rigid ` command for more details. -.. versionchanged:: TBD +.. versionchanged:: 29Aug2024 Support for type labels was added. diff --git a/doc/src/pair_hbond_dreiding.rst b/doc/src/pair_hbond_dreiding.rst index 7e73f23b08..ce19ff9e38 100644 --- a/doc/src/pair_hbond_dreiding.rst +++ b/doc/src/pair_hbond_dreiding.rst @@ -18,28 +18,27 @@ Syntax .. code-block:: LAMMPS - pair_style style N inner_distance_cutoff outer_distance_cutoff angle_cutof + pair_style style N inner_distance_cutoff outer_distance_cutoff angle_cutoff * style = *hbond/dreiding/lj* or *hbond/dreiding/morse* -* n = cosine angle periodicity +* N = power of cosine of angle theta (integer) * inner_distance_cutoff = global inner cutoff for Donor-Acceptor interactions (distance units) * outer_distance_cutoff = global cutoff for Donor-Acceptor interactions (distance units) -* angle_cutoff = global angle cutoff for Acceptor-Hydrogen-Donor -* interactions (degrees) +* angle_cutoff = global angle cutoff for Acceptor-Hydrogen-Donor interactions (degrees) Examples """""""" .. code-block:: LAMMPS - pair_style hybrid/overlay lj/cut 10.0 hbond/dreiding/lj 4 9.0 11.0 90 + pair_style hybrid/overlay lj/cut 10.0 hbond/dreiding/lj 4 9.0 11.0 90.0 pair_coeff 1 2 hbond/dreiding/lj 3 i 9.5 2.75 4 9.0 11.0 90.0 - pair_style hybrid/overlay lj/cut 10.0 hbond/dreiding/morse 2 9.0 11.0 90 - pair_coeff 1 2 hbond/dreiding/morse 3 i 3.88 1.7241379 2.9 2 9 11 90 + pair_style hybrid/overlay lj/cut 10.0 hbond/dreiding/morse 2 9.0 11.0 90.0 + pair_coeff 1 2 hbond/dreiding/morse 3 i 3.88 1.7241379 2.9 2 9.0 11.0 90.0 labelmap atom 1 C 2 O 3 H - pair_coeff C O hbond/dreiding/morse H i 3.88 1.7241379 2.9 2 9 11 90 + pair_coeff C O hbond/dreiding/morse H i 3.88 1.7241379 2.9 2 9.0 11.0 90.0 Description """"""""""" @@ -65,7 +64,8 @@ force field, given by: where :math:`r_{\rm in}` is the inner spline distance cutoff, :math:`r_{\rm out}` is the outer distance cutoff, :math:`\theta_c` is -the angle cutoff, and *n* is the cosine periodicity. +the angle cutoff, and :math:`n` is the power of the cosine of the angle +:math:`\theta`. Here, *r* is the radial distance between the donor (D) and acceptor (A) atoms and :math:`\theta` is the bond angle between the acceptor, the @@ -217,7 +217,8 @@ These pair styles do not support the :doc:`pair_modify ` tail option for adding long-range tail corrections to energy and pressure. -These pair styles do not write their information to :doc:`binary restart files `, so pair_style and pair_coeff commands need to be +These pair styles do not write their information to :doc:`binary restart +files `, so pair_style and pair_coeff commands need to be re-specified in an input script that reads a restart file. These pair styles can only be used via the *pair* keyword of the diff --git a/doc/src/pair_rheo.rst b/doc/src/pair_rheo.rst index 993ec3cee3..927d2f0266 100644 --- a/doc/src/pair_rheo.rst +++ b/doc/src/pair_rheo.rst @@ -31,7 +31,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 29Aug2024 Pair style *rheo* computes pressure and viscous forces between particles in the :doc:`rheo package `. If thermal evolution is turned diff --git a/doc/src/pair_rheo_solid.rst b/doc/src/pair_rheo_solid.rst index 0b1ed47fb8..f71cba7bdb 100644 --- a/doc/src/pair_rheo_solid.rst +++ b/doc/src/pair_rheo_solid.rst @@ -21,7 +21,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 29Aug2024 Style *rheo/solid* is effectively a copy of pair style :doc:`bpm/spring ` except it only applies forces diff --git a/doc/src/region.rst b/doc/src/region.rst index 9d2af01de1..3a27c4b5ff 100644 --- a/doc/src/region.rst +++ b/doc/src/region.rst @@ -18,13 +18,13 @@ Syntax *delete* = no args *block* args = xlo xhi ylo yhi zlo zhi xlo,xhi,ylo,yhi,zlo,zhi = bounds of block in all dimensions (distance units) - xlo,xhi,ylo,yhi,zlo,zhi can be a variable + xlo,xhi,ylo,yhi,zlo,zhi can be a variable (see below) *cone* args = dim c1 c2 radlo radhi lo hi dim = *x* or *y* or *z* = axis of cone c1,c2 = coords of cone axis in other 2 dimensions (distance units) radlo,radhi = cone radii at lo and hi end (distance units) lo,hi = bounds of cone in dim (distance units) - c1,c2,radlo,radhi,lo,hi can be a variable (see below) + c1,c2,radlo,radhi,lo,hi can be a variable (see below) *cylinder* args = dim c1 c2 radius lo hi dim = *x* or *y* or *z* = axis of cylinder c1,c2 = coords of cylinder axis in other 2 dimensions (distance units) @@ -38,6 +38,7 @@ Syntax *plane* args = px py pz nx ny nz px,py,pz = point on the plane (distance units) nx,ny,nz = direction normal to plane (distance units) + px,py,pz can be a variable (see below) *prism* args = xlo xhi ylo yhi zlo zhi xy xz yz xlo,xhi,ylo,yhi,zlo,zhi = bounds of untilted prism (distance units) xy = distance to tilt y in x direction (distance units) @@ -166,7 +167,7 @@ extending in the y-direction from -5.0 to the upper box boundary. .. versionadded:: 4May2022 -For style *ellipsoid*, an axis-aligned ellipsoid is defined. The +For style *ellipsoid*, an axis-aligned ellipsoid is defined. The ellipsoid has its center at (x,y,z) and is defined by 3 axis-aligned vectors given by A = (a,0,0); B = (0,b,0); C = (0,0,c). Note that although the ellipsoid is specified as axis-aligned it can be rotated @@ -206,9 +207,10 @@ parameters a,b,c for style *ellipsoid*, can each be specified as an equal-style :doc:`variable `. Likewise, for style *sphere* and *ellipsoid* the x-, y-, and z- coordinates of the center of the sphere/ellipsoid can be specified as an equal-style variable. And for -style *cylinder* the two center positions c1 and c2 for the location -of the cylinder axes can be specified as a equal-style variable. For style *cone* -all properties can be defined via equal-style variables. +style *cylinder* the two center positions c1 and c2 for the location of +the cylinder axes can be specified as a equal-style variable. For style +*cone* all properties can be defined via equal-style variables. For +style *plane* the point can be defined via equal-style variables. If the value is a variable, it should be specified as v_name, where name is the variable name. In this case, the variable will be diff --git a/doc/src/variable.rst b/doc/src/variable.rst index 330e44139e..1867532efa 100644 --- a/doc/src/variable.rst +++ b/doc/src/variable.rst @@ -1042,7 +1042,7 @@ label2type(), but returns 1 if the type label has been assigned, otherwise it returns 0. This function can be used to check if a particular type label already exists in the simulation. -.. versionadded:: TBD +.. versionadded:: 29Aug2024 The is_timeout() function returns 1 when the :doc:`timer timeout ` has expired otherwise it returns 0. This function can be used diff --git a/doc/utils/sphinx-config/_static/lammps-logo-large.jpg b/doc/utils/sphinx-config/_static/lammps-logo-large.jpg deleted file mode 100644 index 8cb15e77b2..0000000000 Binary files a/doc/utils/sphinx-config/_static/lammps-logo-large.jpg and /dev/null differ diff --git a/doc/utils/sphinx-config/_static/lammps-logo-large.png b/doc/utils/sphinx-config/_static/lammps-logo-large.png new file mode 100644 index 0000000000..a8f45b2b26 Binary files /dev/null and b/doc/utils/sphinx-config/_static/lammps-logo-large.png differ diff --git a/doc/utils/sphinx-config/conf.py.in b/doc/utils/sphinx-config/conf.py.in index 31e073c755..e4b461397d 100644 --- a/doc/utils/sphinx-config/conf.py.in +++ b/doc/utils/sphinx-config/conf.py.in @@ -416,7 +416,7 @@ latex_documents = [ # The name of an image file (relative to this directory) to place at the top of # the title page. -latex_logo = "_static/lammps-logo-large.jpg" +latex_logo = "_static/lammps-logo-large.png" latex_toplevel_sectioning = 'part' diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index f1d9c0b748..70d6b4e323 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -141,6 +141,7 @@ arg arge args argv +Armv arrhenius Arun arXiv @@ -215,7 +216,6 @@ ba Babadi Babaei backcolor -backends Baczewski Bagchi Bagi @@ -407,6 +407,7 @@ Bybee bz Cadarache cadetblue +Caen Cagin calc calibrationfunctions @@ -1538,6 +1539,7 @@ idx ie ielement ieni +ifdef ifdefs iff ifort @@ -1705,6 +1707,7 @@ jec Jeffers jewett Jewett +jgissing ji Jiang Jiao @@ -2723,6 +2726,7 @@ OMP oneAPI onebody onelevel +oneMKL oneway onlysalt ons @@ -3550,6 +3554,7 @@ Steinhauser Stepaniants stepwise Stesmans +stevens stiffnesses Stillinger stk @@ -4127,6 +4132,7 @@ Xiaowang Xie xk xlat +xlattice xlo xmax Xmax @@ -4178,6 +4184,7 @@ yflag yhi yi ylat +ylattice ylo ylz ymax @@ -4226,6 +4233,7 @@ Ziegenhain zincblende zj Zj +zlattice zlim zlo Zm diff --git a/examples/COUPLE/plugin/liblammpsplugin.c b/examples/COUPLE/plugin/liblammpsplugin.c index 5d27a0a64b..c8a38c21e4 100644 --- a/examples/COUPLE/plugin/liblammpsplugin.c +++ b/examples/COUPLE/plugin/liblammpsplugin.c @@ -41,7 +41,6 @@ #include - liblammpsplugin_t *liblammpsplugin_load(const char *lib) { liblammpsplugin_t *lmp; @@ -106,6 +105,7 @@ liblammpsplugin_t *liblammpsplugin_load(const char *lib) ADDSYM(map_atom); ADDSYM(extract_atom_datatype); + ADDSYM(extract_atom_size); ADDSYM(extract_atom); ADDSYM(extract_compute); @@ -191,6 +191,9 @@ liblammpsplugin_t *liblammpsplugin_load(const char *lib) ADDSYM(is_running); ADDSYM(force_timeout); + // symbol not present + if (!lmp->config_has_exceptions) return NULL; + lmp->has_exceptions = lmp->config_has_exceptions(); if (lmp->has_exceptions) { ADDSYM(has_error); diff --git a/examples/COUPLE/plugin/liblammpsplugin.h b/examples/COUPLE/plugin/liblammpsplugin.h index 556718816c..b444f75215 100644 --- a/examples/COUPLE/plugin/liblammpsplugin.h +++ b/examples/COUPLE/plugin/liblammpsplugin.h @@ -151,6 +151,7 @@ struct _liblammpsplugin { int (*map_atom)(void *, const void *); int (*extract_atom_datatype)(void *, const char *); + int (*extract_atom_size)(void *, const char *, int); void *(*extract_atom)(void *, const char *); void *(*extract_compute)(void *, const char *, int, int); diff --git a/examples/PACKAGES/pace/plugin/CMakeLists.txt b/examples/PACKAGES/pace/plugin/CMakeLists.txt index 0701a754c4..ede63e3d38 100644 --- a/examples/PACKAGES/pace/plugin/CMakeLists.txt +++ b/examples/PACKAGES/pace/plugin/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.16) -project(paceplugin VERSION 1.0 LANGUAGES CXX) +project(paceplugin VERSION 1.1 LANGUAGES CXX) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) include(CheckIncludeFileCXX) @@ -15,7 +15,11 @@ include(ML-PACE) ########################## # building the plugins -add_library(paceplugin MODULE paceplugin.cpp ${LAMMPS_SOURCE_DIR}/ML-PACE/pair_pace.cpp) +add_library(paceplugin MODULE paceplugin.cpp + ${LAMMPS_SOURCE_DIR}/ML-PACE/pair_pace.cpp + ${LAMMPS_SOURCE_DIR}/ML-PACE/pair_pace_extrapolation.cpp + ${LAMMPS_SOURCE_DIR}/ML-PACE/compute_pace.cpp) + target_link_libraries(paceplugin PRIVATE pace) target_link_libraries(paceplugin PRIVATE lammps) target_include_directories(paceplugin PRIVATE ${LAMMPS_SOURCE_DIR}/ML-PACE) diff --git a/examples/PACKAGES/pace/plugin/paceplugin.cpp b/examples/PACKAGES/pace/plugin/paceplugin.cpp index adf1c168f9..f231318d23 100644 --- a/examples/PACKAGES/pace/plugin/paceplugin.cpp +++ b/examples/PACKAGES/pace/plugin/paceplugin.cpp @@ -3,6 +3,8 @@ #include "version.h" #include "pair_pace.h" +#include "pair_pace_extrapolation.h" +#include "compute_pace.h" using namespace LAMMPS_NS; @@ -11,6 +13,16 @@ static Pair *pair_pace_creator(LAMMPS *lmp) return new PairPACE(lmp); } +static Pair *pair_pace_extrapolation_creator(LAMMPS *lmp) +{ + return new PairPACEExtrapolation(lmp); +} + +static Compute *compute_pace_creator(LAMMPS *lmp, int argc, char **argv) +{ + return new ComputePACE(lmp, argc, argv); +} + extern "C" void lammpsplugin_init(void *lmp, void *handle, void *regfunc) { lammpsplugin_t plugin; @@ -25,4 +37,24 @@ extern "C" void lammpsplugin_init(void *lmp, void *handle, void *regfunc) plugin.creator.v1 = (lammpsplugin_factory1 *) &pair_pace_creator; plugin.handle = handle; (*register_plugin)(&plugin, lmp); + + // register pace/extrapolation pair style + plugin.version = LAMMPS_VERSION; + plugin.style = "pair"; + plugin.name = "pace/extrapolation"; + plugin.info = "PACE plugin extrapolation pair style v1.0"; + plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)"; + plugin.creator.v1 = (lammpsplugin_factory1 *) &pair_pace_extrapolation_creator; + plugin.handle = handle; + (*register_plugin)(&plugin, lmp); + + // register pace compute style + plugin.version = LAMMPS_VERSION; + plugin.style = "compute"; + plugin.name = "pace"; + plugin.info = "PACE plugin compute style v1.0"; + plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)"; + plugin.creator.v2 = (lammpsplugin_factory2 *) &compute_pace_creator; + plugin.handle = handle; + (*register_plugin)(&plugin, lmp); } diff --git a/examples/PACKAGES/pace/plugin/paceplugin.nsis b/examples/PACKAGES/pace/plugin/paceplugin.nsis index de8d1d8478..0ca96b95a6 100644 --- a/examples/PACKAGES/pace/plugin/paceplugin.nsis +++ b/examples/PACKAGES/pace/plugin/paceplugin.nsis @@ -39,7 +39,7 @@ InstallDir "$LOCALAPPDATA\${PACEPLUGIN}" ShowInstDetails show ShowUninstDetails show -SetCompressor lzma +SetCompressor zlib !define MUI_ABORTWARNING diff --git a/examples/PACKAGES/plumed/plugin/CMakeLists.txt b/examples/PACKAGES/plumed/plugin/CMakeLists.txt new file mode 100644 index 0000000000..33ed34123d --- /dev/null +++ b/examples/PACKAGES/plumed/plugin/CMakeLists.txt @@ -0,0 +1,59 @@ +# -*- CMake -*- build system for plugin examples. +# The is meant to be used as a template for plugins that are +# distributed independent from the LAMMPS package. +########################################## + +cmake_minimum_required(VERSION 3.16) + +project(plumedplugin VERSION 1.0 LANGUAGES CXX) + +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) +include(CheckIncludeFileCXX) +include(LAMMPSInterfacePlugin) +include(PLUMED) + +########################## +# building the plugins + +add_library(plumedplugin MODULE plumedplugin.cpp ${LAMMPS_SOURCE_DIR}/PLUMED/fix_plumed.cpp) +target_link_libraries(plumedplugin PRIVATE LAMMPS::PLUMED) +target_link_libraries(plumedplugin PRIVATE lammps) +target_include_directories(plumedplugin PRIVATE ${LAMMPS_SOURCE_DIR}/PLUMED) +set_target_properties(plumedplugin PROPERTIES PREFIX "" SUFFIX ".so") + +# MacOS seems to need this +if(CMAKE_SYSTEM_NAME STREQUAL Darwin) + set_target_properties(plumedplugin PROPERTIES LINK_FLAGS "-Wl,-undefined,dynamic_lookup") +elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") +# tell CMake to export all symbols to a .dll on Windows with special case for MinGW cross-compilers + set_target_properties(plumedplugin PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + if(CMAKE_CROSSCOMPILING) + set_target_properties(plumedplugin PROPERTIES LINK_FLAGS "-Wl,--export-all-symbols") + endif() + + get_lammps_version(${LAMMPS_SOURCE_DIR}/version.h LAMMPS_VERSION) + find_program(MAKENSIS_PATH makensis) + if(MAKENSIS_PATH) + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_SOURCE_DIR}/lammps.ico + ${CMAKE_SOURCE_DIR}/lammps-text-logo-wide.bmp ${CMAKE_SOURCE_DIR}/plumedplugin.nsis + ${CMAKE_BINARY_DIR}) + if(BUILD_MPI) + if(USE_MSMPI) + add_custom_target(package ${MAKENSIS_PATH} -V1 -DVERSION=${LAMMPS_VERSION}-MSMPI plumedplugin.nsis + DEPENDS plumedplugin plumed_copy lammps.ico lammps-text-logo-wide.bmp plumedplugin.nsis + BYPRODUCTS LAMMPS-PLUMED-plugin-${LAMMPS_VERSION}-MSMPI.exe) + else() + add_custom_target(package ${MAKENSIS_PATH} -V1 -DVERSION=${LAMMPS_VERSION}-MPI plumedplugin.nsis + DEPENDS plumedplugin plumed_copy lammps.ico lammps-text-logo-wide.bmp plumedplugin.nsis + BYPRODUCTS LAMMPS-PLUMED-plugin-${LAMMPS_VERSION}-MPI.exe) + endif() + else() + add_custom_target(package ${MAKENSIS_PATH} -V1 -DVERSION=${LAMMPS_VERSION} plumedplugin.nsis + COMMAND ${CMAKE_COMMAND} -E echo ${PWD} + DEPENDS plumedplugin plumed_copy lammps.ico lammps-text-logo-wide.bmp plumedplugin.nsis + BYPRODUCTS LAMMPS-PLUMED-plugin-${LAMMPS_VERSION}.exe) + endif() + endif() +else() + set_target_properties(plumedplugin PROPERTIES LINK_FLAGS "-rdynamic") +endif() diff --git a/examples/PACKAGES/plumed/plugin/LAMMPSInterfacePlugin.cmake b/examples/PACKAGES/plumed/plugin/LAMMPSInterfacePlugin.cmake new file mode 120000 index 0000000000..2ac6d20a54 --- /dev/null +++ b/examples/PACKAGES/plumed/plugin/LAMMPSInterfacePlugin.cmake @@ -0,0 +1 @@ +../../../../cmake/Modules/LAMMPSInterfacePlugin.cmake \ No newline at end of file diff --git a/examples/PACKAGES/plumed/plugin/PLUMED.cmake b/examples/PACKAGES/plumed/plugin/PLUMED.cmake new file mode 120000 index 0000000000..b69e8b04f5 --- /dev/null +++ b/examples/PACKAGES/plumed/plugin/PLUMED.cmake @@ -0,0 +1 @@ +../../../../cmake/Modules/Packages/PLUMED.cmake \ No newline at end of file diff --git a/examples/PACKAGES/plumed/plugin/README.txt b/examples/PACKAGES/plumed/plugin/README.txt new file mode 100644 index 0000000000..2b1971ddbc --- /dev/null +++ b/examples/PACKAGES/plumed/plugin/README.txt @@ -0,0 +1,2 @@ +This folder contains a loader and support files to build the PLUMED package as plugin. +For more information please see: https://docs.lammps.org/Developer_plugins.html diff --git a/examples/PACKAGES/plumed/plugin/lammps-text-logo-wide.bmp b/examples/PACKAGES/plumed/plugin/lammps-text-logo-wide.bmp new file mode 100644 index 0000000000..b9ec4c35f2 Binary files /dev/null and b/examples/PACKAGES/plumed/plugin/lammps-text-logo-wide.bmp differ diff --git a/examples/PACKAGES/plumed/plugin/lammps.ico b/examples/PACKAGES/plumed/plugin/lammps.ico new file mode 100644 index 0000000000..cce156bf79 Binary files /dev/null and b/examples/PACKAGES/plumed/plugin/lammps.ico differ diff --git a/examples/PACKAGES/plumed/plugin/plumedplugin.cpp b/examples/PACKAGES/plumed/plugin/plumedplugin.cpp new file mode 100644 index 0000000000..48edc48e6e --- /dev/null +++ b/examples/PACKAGES/plumed/plugin/plumedplugin.cpp @@ -0,0 +1,28 @@ + +#include "lammpsplugin.h" +#include "version.h" + +#include "fix_plumed.h" + +using namespace LAMMPS_NS; + +static Fix *fix_plumed_creator(LAMMPS *lmp, int argc, char **argv) +{ + return new FixPlumed(lmp, argc, argv); +} + +extern "C" void lammpsplugin_init(void *lmp, void *handle, void *regfunc) +{ + lammpsplugin_t plugin; + lammpsplugin_regfunc register_plugin = (lammpsplugin_regfunc) regfunc; + + // register plumed fix style + plugin.version = LAMMPS_VERSION; + plugin.style = "fix"; + plugin.name = "plumed"; + plugin.info = "Plumed2 plugin fix style v1.0"; + plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)"; + plugin.creator.v1 = (lammpsplugin_factory1 *) &fix_plumed_creator; + plugin.handle = handle; + (*register_plugin)(&plugin, lmp); +} diff --git a/examples/PACKAGES/plumed/plugin/plumedplugin.nsis b/examples/PACKAGES/plumed/plugin/plumedplugin.nsis new file mode 100644 index 0000000000..1de9800d26 --- /dev/null +++ b/examples/PACKAGES/plumed/plugin/plumedplugin.nsis @@ -0,0 +1,172 @@ +#!Nsis Installer Command Script +# +# The following external defines are recognized: +# ${VERSION} = YYYYMMDD + +!include "MUI2.nsh" +!include "FileFunc.nsh" + +!define MUI_ICON "lammps.ico" +!define MUI_UNICON "lammps.ico" +!define MUI_HEADERIMAGE +!define MUI_HEADERIMAGE_BITMAP "lammps-text-logo-wide.bmp" +!define MUI_HEADERIMAGE_RIGHT + +Unicode true +XPStyle on + +!include "LogicLib.nsh" +!addplugindir "envvar/Plugins/x86-unicode" +!include "x64.nsh" + +RequestExecutionLevel user + +!macro VerifyUserIsAdmin +UserInfo::GetAccountType +pop $0 +${If} $0 != "admin" + messageBox mb_iconstop "Administrator rights required!" + setErrorLevel 740 ;ERROR_ELEVATION_REQUIRED + quit +${EndIf} +!macroend + +!define PLUMEDPLUGIN "LAMMPS PLUMED Plugin ${VERSION}" +OutFile "LAMMPS-PLUMED-plugin-${VERSION}.exe" + +Name "${PLUMEDPLUGIN}" +InstallDir "$LOCALAPPDATA\${PLUMEDPLUGIN}" + +ShowInstDetails show +ShowUninstDetails show +SetCompressor zlib + +!define MUI_ABORTWARNING + +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES + +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES + +!insertmacro MUI_LANGUAGE "English" + +function .onInit + # Determine if LAMMPS was already installed and check whether it was in 32-bit + # or 64-bit. Then look up path to uninstaller and offer to uninstall or quit + SetRegView 32 + ReadRegDWORD $0 HKCU "Software\LAMMPS-PLUMED" "Bits" + SetRegView LastUsed + ${If} $0 == "32" + SetRegView 32 + ${ElseIf} $0 == "64" + SetRegView 64 + ${Else} + SetRegView 64 + ${EndIf} + ClearErrors + ReadRegStr $R0 HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" "UninstallString" + SetRegView LastUsed + ${If} ${Errors} + DetailPrint "LAMMPS PLUMED plugin not (yet) installed" + ${Else} + MessageBox MB_YESNO "LAMMPS PLUMED plugin ($0 bit) is already installed. Uninstall existing version?" /SD IDYES IDNO Quit + Pop $R1 + StrCmp $R1 2 Quit +1 + Exec $R0 + Quit: + Quit + ${EndIf} + setShellVarContext all +functionEnd + +Section "${PLUMEDPLUGIN}" SecPlumedplugin + SectionIn RO + # Write LAMMPS installation bitness marker. Always use 32-bit registry view + SetRegView 32 + IntFmt $0 "0x%08X" 64 + WriteRegDWORD HKCU "Software\LAMMPS-PLUMED" "Bits" $0 + + # Switch to "native" registry view + SetRegView 64 + SetShellVarContext current + + SetOutPath "$INSTDIR" + CreateDirectory "$INSTDIR\patches" + CreateDirectory "$INSTDIR\bin" + File lammps.ico + File plumedplugin.so + + SetOutPath "$INSTDIR\bin" + File plumed.exe + + # Register Application and its uninstaller + WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \ + "DisplayName" "${PLUMEDPLUGIN}" + WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \ + "Publisher" "The LAMMPS and PLUMED Developers" + WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \ + "URLInfoAbout" "lammps.org" + WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \ + "DisplayIcon" "$INSTDIR\lammps.ico" + WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \ + "DisplayVersion" "${VERSION}" + WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \ + "InstallLocation" "$INSTDIR" + WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \ + "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" + WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \ + "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" + + ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 + IntFmt $0 "0x%08X" $0 + WriteRegDWORD HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" \ + "EstimatedSize" "$0" + + # update path variables + EnVar::SetHKCU + # add plumed executable path + EnVar::AddValue "PATH" "$INSTDIR\bin" + # add to LAMMPS plugin search path + EnVar::AddValue "LAMMPS_PLUGIN_PATH" "$INSTDIR" + # add plumed2 patch files + EnVar::AddValue "PLUMED_ROOT" "$INSTDIR" + + WriteUninstaller "$INSTDIR\Uninstall.exe" +SectionEnd + +function un.onInit + SetShellVarContext current +functionEnd + +Section "Uninstall" + # remove LAMMPS bitness/installation indicator always in 32-bit registry view + SetRegView 32 + DeleteRegKey HKCU "Software\LAMMPS-PLUMED" + + # unregister extension, and uninstall info + SetRegView 64 + SetShellVarContext current + # unregister installation + DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\LAMMPS-PLUMED" + + # update path variables + EnVar::SetHKCU + # remove plumed executable path + EnVar::DeleteValue "PATH" "$INSTDIR\bin" + # remove entry from LAMMPS plugin search path + EnVar::DeleteValue "LAMMPS_PLUGIN_PATH" "$INSTDIR" + # remove plumed patch environment + EnVar::Delete "PLUMED_ROOT" + + RMDir /r /REBOOTOK "$INSTDIR\patches" + RMDir /r /REBOOTOK "$INSTDIR\bin" + Delete /REBOOTOK "$INSTDIR\plumedplugin.so" + Delete /REBOOTOK "$INSTDIR\Uninstall.exe" + Delete /REBOOTOK "$INSTDIR\lammps.ico" + RMDir /REBOOTOK "$INSTDIR" +SectionEnd + +# Local Variables: +# mode: sh +# End: diff --git a/examples/PACKAGES/reaction/tiny_nylon/in.tiny_nylon.stabilized b/examples/PACKAGES/reaction/tiny_nylon/in.tiny_nylon.stabilized index 60d33aa351..4998ea7d9d 100644 --- a/examples/PACKAGES/reaction/tiny_nylon/in.tiny_nylon.stabilized +++ b/examples/PACKAGES/reaction/tiny_nylon/in.tiny_nylon.stabilized @@ -44,6 +44,7 @@ thermo 50 fix myrxns all bond/react stabilization yes statted_grp .03 & react rxn1 all 1 0.0 2.9 mol1 mol2 rxn1_stp1_map & react rxn2 all 1 0.0 5.0 mol3 mol4 rxn1_stp2_map + react rxn2 all 1 0.0 5.0 mol3 mol4 rxn1_stp2_map rescale_charges yes fix 1 statted_grp_REACT nvt temp 300 300 100 diff --git a/examples/PACKAGES/reaction/tiny_nylon/in.tiny_nylon.stabilized_variable_probability b/examples/PACKAGES/reaction/tiny_nylon/in.tiny_nylon.stabilized_variable_probability index 770f4fc3b1..4b268cf0d9 100644 --- a/examples/PACKAGES/reaction/tiny_nylon/in.tiny_nylon.stabilized_variable_probability +++ b/examples/PACKAGES/reaction/tiny_nylon/in.tiny_nylon.stabilized_variable_probability @@ -47,7 +47,7 @@ thermo 50 fix myrxns all bond/react stabilization yes statted_grp .03 & react rxn1 all 1 0.0 5.0 mol1 mol2 rxn1_stp1_map prob v_prob1 1234 & - react rxn2 all 1 0.0 5.0 mol3 mol4 rxn1_stp2_map prob v_prob2 1234 + react rxn2 all 1 0.0 5.0 mol3 mol4 rxn1_stp2_map prob v_prob2 1234 rescale_charges yes fix 1 statted_grp_REACT nvt temp 300 300 100 diff --git a/examples/PACKAGES/reaction/tiny_nylon/in.tiny_nylon.unstabilized b/examples/PACKAGES/reaction/tiny_nylon/in.tiny_nylon.unstabilized index 4ade3f8b99..3ecf552174 100644 --- a/examples/PACKAGES/reaction/tiny_nylon/in.tiny_nylon.unstabilized +++ b/examples/PACKAGES/reaction/tiny_nylon/in.tiny_nylon.unstabilized @@ -44,7 +44,7 @@ thermo 50 fix myrxns all bond/react stabilization no & react rxn1 all 1 0.0 2.9 mol1 mol2 rxn1_stp1_map & - react rxn2 all 1 0.0 5.0 mol3 mol4 rxn1_stp2_map + react rxn2 all 1 0.0 5.0 mol3 mol4 rxn1_stp2_map rescale_charges yes fix 1 all nve/limit .03 diff --git a/examples/PACKAGES/reaction/tiny_nylon/rxn1_stp1_reacted.molecule_template b/examples/PACKAGES/reaction/tiny_nylon/rxn1_stp1_reacted.molecule_template index 40f3aa8276..594775b39c 100644 --- a/examples/PACKAGES/reaction/tiny_nylon/rxn1_stp1_reacted.molecule_template +++ b/examples/PACKAGES/reaction/tiny_nylon/rxn1_stp1_reacted.molecule_template @@ -48,27 +48,6 @@ Types 17 hc 18 hc -Charges - - 1 -0.300000 - 2 0.000000 - 3 0.000000 - 4 0.000000 - 5 0.000000 - 6 0.000000 - 7 0.000000 - 8 0.000000 - 9 0.000000 - 10 0.300000 - 11 0.000000 - 12 0.000000 - 13 0.000000 - 14 0.000000 - 15 0.000000 - 16 0.000000 - 17 0.000000 - 18 0.000000 - Molecules 1 1 diff --git a/examples/PACKAGES/reaction/tiny_nylon/rxn1_stp2_reacted.molecule_template b/examples/PACKAGES/reaction/tiny_nylon/rxn1_stp2_reacted.molecule_template index 2e91261468..7e1a350d16 100644 --- a/examples/PACKAGES/reaction/tiny_nylon/rxn1_stp2_reacted.molecule_template +++ b/examples/PACKAGES/reaction/tiny_nylon/rxn1_stp2_reacted.molecule_template @@ -44,21 +44,21 @@ Types Charges - 1 -0.300000 - 2 0.000000 - 3 0.000000 - 4 0.410000 - 5 0.000000 - 6 0.000000 - 7 0.000000 - 8 0.000000 - 9 0.000000 - 10 0.300000 - 11 0.000000 - 12 -0.820000 - 13 0.000000 - 14 0.000000 - 15 0.410000 + 1 -0.60533 + 2 -0.01149 + 3 -0.76306 + 4 0.38 + 5 0.29346 + 6 0.18360 + 7 0.15396 + 8 -0.72636 + 9 -0.27437 + 10 0.40603 + 11 -0.65530 + 12 -0.76 + 13 0.21423 + 14 0.18949 + 15 0.38 Molecules diff --git a/examples/PACKAGES/reaction/tiny_nylon/tiny_nylon.data b/examples/PACKAGES/reaction/tiny_nylon/tiny_nylon.data index ee8e397956..73c776c430 100644 --- a/examples/PACKAGES/reaction/tiny_nylon/tiny_nylon.data +++ b/examples/PACKAGES/reaction/tiny_nylon/tiny_nylon.data @@ -1,15 +1,15 @@ -this is LAMMPS data file containing two nylon monomers +LAMMPS data file via write_data, version 27 Jun 2024, timestep = 0, units = real 44 atoms 11 atom types 42 bonds -15 bond types +13 bond types 74 angles -29 angle types +26 angle types 100 dihedrals -36 dihedral types -44 impropers -13 improper types +33 dihedral types +16 impropers +5 improper types -25 25 xlo xhi -25 25 ylo yhi @@ -17,15 +17,15 @@ this is LAMMPS data file containing two nylon monomers Atom Type Labels -1 c2 -2 c_1 -3 o -4 hc -5 ho -6 o_1 -7 na -8 hn -9 n +1 c2 +2 c_1 +3 o +4 hc +5 ho +6 o_1 +7 na +8 hn +9 n 10 hw 11 o* @@ -37,102 +37,86 @@ Bond Type Labels 4 c2-c_1 5 c_1-o_1 6 o-ho -7 c2-c2-repeat -8 c2-hc-repeat -9 na-c2 -10 na-hn -11 n-c2 -12 n-hn -13 n-c_1 -14 c2-na -15 hw-o* +7 na-c2 +8 na-hn +9 n-c2 +10 n-hn +11 n-c_1 +12 c2-na +13 hw-o* Angle Type Labels -1 hc-c2-hc -2 c2-c2-hc -3 c2-c2-c2 -4 c2-c_1-o_1 -5 o-c_1-o_1 -6 c2-c_1-o -7 c_1-o-ho -8 c2-c2-c_1 -9 c_1-c2-hc -10 c2-c2-hc-repeat -11 c2-c2-c2-repeat -12 hc-c2-hc-repeat -13 c2-c2-na -14 na-c2-hc -15 c2-na-hn -16 hn-na-hn -17 c2-n-hn -18 c2-n-c_1 -19 hn-n-hn -20 hn-n-c_1 -21 n-c2-c2 -22 n-c2-hc -23 hc-c2-c_1 -24 n-c_1-c2 -25 o_1-c_1-o -26 n-c_1-o_1 -27 n-c_1-o -28 na-c2-c2 -29 hw-o*-hw +1 hc-c2-hc +2 c2-c2-hc +3 c2-c2-c2 +4 c2-c_1-o_1 +5 o-c_1-o_1 +6 c2-c_1-o +7 c_1-o-ho +8 c2-c2-c_1 +9 c_1-c2-hc +10 c2-c2-na +11 na-c2-hc +12 c2-na-hn +13 hn-na-hn +14 c2-n-hn +15 c2-n-c_1 +16 hn-n-hn +17 hn-n-c_1 +18 n-c2-c2 +19 n-c2-hc +20 hc-c2-c_1 +21 n-c_1-c2 +22 o_1-c_1-o +23 n-c_1-o_1 +24 n-c_1-o +25 na-c2-c2 +26 hw-o*-hw Dihedral Type Labels -1 c_1-c2-c2-hc -2 hc-c2-c2-hc -3 c2-c2-c2-c_1 -4 c2-c2-c2-hc -5 c2-c2-c2-c2 -6 c2-c_1-o-ho -7 o_1-c_1-o-ho -8 c2-c2-c_1-o -9 hc-c2-c_1-o +1 c_1-c2-c2-hc +2 hc-c2-c2-hc +3 c2-c2-c2-c_1 +4 c2-c2-c2-hc +5 c2-c2-c2-c2 +6 c2-c_1-o-ho +7 o_1-c_1-o-ho +8 c2-c2-c_1-o +9 hc-c2-c_1-o 10 c2-c2-c_1-o_1 11 hc-c2-c_1-o_1 12 na-c2-c2-hc -13 hc-c2-c2-hc-repeat -14 c2-c2-c2-na -15 c2-c2-c2-hc-repeat -16 c2-c2-c2-c2-repeat -17 c2-c2-na-hn -18 hn-na-c2-hc -19 hn-n-c2-c2 -20 hn-n-c2-hc -21 c_1-n-c2-c2 -22 c_1-n-c2-hc -23 c2-n-c_1-c2 -24 c2-n-c_1-o_1 -25 c2-n-c_1-o -26 hn-n-c_1-c2 -27 hn-n-c_1-o_1 -28 hn-n-c_1-o -29 n-c2-c2-c2 -30 n-c2-c2-hc -31 c2-c2-c_1-n -32 hc-c2-c_1-n -33 n-c_1-o-ho -34 hn-na-c2-c2 -35 hc-c2-na-hn -36 na-c2-c2-c2 +13 c2-c2-c2-na +14 c2-c2-na-hn +15 hn-na-c2-hc +16 hn-n-c2-c2 +17 hn-n-c2-hc +18 c_1-n-c2-c2 +19 c_1-n-c2-hc +20 c2-n-c_1-c2 +21 c2-n-c_1-o_1 +22 c2-n-c_1-o +23 hn-n-c_1-c2 +24 hn-n-c_1-o_1 +25 hn-n-c_1-o +26 n-c2-c2-c2 +27 n-c2-c2-hc +28 c2-c2-c_1-n +29 hc-c2-c_1-n +30 n-c_1-o-ho +31 hn-na-c2-c2 +32 hc-c2-na-hn +33 na-c2-c2-c2 Improper Type Labels -1 c2-c_1-o-o_1 -2 c2-na-hn-hn -3 c2-c_1-o_1-o -4 c2-n-hn-c_1 -5 zero5 -6 zero6 -7 zero7 -8 zero8 -9 zero9 -10 zero10 -11 zero11 -12 zero12 -13 n-c_1-c2-o_1 +1 c2-c_1-o-o_1 +2 c2-na-hn-hn +3 c2-c_1-o_1-o +4 c2-n-hn-c_1 +5 n-c_1-c2-o_1 Masses @@ -148,7 +132,7 @@ Masses 10 1.00797 11 15.9994 -Pair Coeffs # lj/class2/coul/cut +Pair Coeffs # lj/class2/coul/long 1 0.054 4.01 2 0.12 3.81 @@ -170,15 +154,13 @@ Bond Coeffs # class2 4 1.5202 253.707 -423.037 396.9 5 1.202 851.14 -1918.49 2160.77 6 0.965 532.506 -1282.9 2004.77 -7 1.53 299.67 -501.77 679.81 -8 1.101 345 -691.89 844.6 -9 1.457 365.805 -699.637 998.484 -10 1.006 466.74 -1073.6 1251.11 -11 1.452 327.166 -547.899 526.5 -12 1.01 462.75 -1053.63 1545.76 -13 1.416 359.159 -558.473 1146.38 -14 1.457 365.805 -699.637 998.484 -15 0.97 563.28 -1428.22 1902.12 +7 1.457 365.805 -699.637 998.484 +8 1.006 466.74 -1073.6 1251.11 +9 1.452 327.166 -547.899 526.5 +10 1.01 462.75 -1053.63 1545.76 +11 1.416 359.159 -558.473 1146.38 +12 1.457 365.805 -699.637 998.484 +13 0.97 563.28 -1428.22 1902.12 Angle Coeffs # class2 @@ -191,26 +173,23 @@ Angle Coeffs # class2 7 111.254 53.5303 -11.8454 -11.5405 8 108.53 51.9747 -9.4851 -10.9985 9 107.734 40.6099 -28.8121 0 -10 110.77 41.453 -10.604 5.129 -11 112.67 39.516 -7.443 -9.5583 -12 107.66 39.641 -12.921 -2.4318 -13 111.91 60.7147 -13.3366 -13.0785 -14 110.62 51.3137 -6.7198 -2.6003 -15 110.954 50.8652 -4.4522 -10.0298 -16 107.067 45.252 -7.5558 -9.512 -17 113.868 45.9271 -20.0824 0 -18 111.037 31.8958 -6.6942 -6.837 -19 116.94 37.5749 -8.6676 0 -20 117.961 37.4964 -8.1837 0 -21 114.302 42.6589 -10.5464 -9.3243 -22 108.937 57.401 2.9374 0 -23 107.734 40.6099 -28.8121 0 -24 116.926 39.4193 -10.9945 -8.7733 -25 118.986 98.6813 -22.2485 10.3673 -26 125.542 92.572 -34.48 -11.1871 -27 125.542 92.572 -34.48 -11.1871 -28 111.91 60.7147 -13.3366 -13.0785 -29 103.7 49.84 -11.6 -8 +10 111.91 60.7147 -13.3366 -13.0785 +11 110.62 51.3137 -6.7198 -2.6003 +12 110.954 50.8652 -4.4522 -10.0298 +13 107.067 45.252 -7.5558 -9.512 +14 113.868 45.9271 -20.0824 0 +15 111.037 31.8958 -6.6942 -6.837 +16 116.94 37.5749 -8.6676 0 +17 117.961 37.4964 -8.1837 0 +18 114.302 42.6589 -10.5464 -9.3243 +19 108.937 57.401 2.9374 0 +20 107.734 40.6099 -28.8121 0 +21 116.926 39.4193 -10.9945 -8.7733 +22 118.986 98.6813 -22.2485 10.3673 +23 125.542 92.572 -34.48 -11.1871 +24 125.542 92.572 -34.48 -11.1871 +25 111.91 60.7147 -13.3366 -13.0785 +26 103.7 49.84 -11.6 -8 BondBond Coeffs @@ -223,26 +202,23 @@ BondBond Coeffs 7 0 1.3649 0.965 8 5.4199 1.53 1.5202 9 0.7115 1.5202 1.101 -10 3.3872 1.53 1.101 -11 0 1.53 1.53 -12 5.3316 1.101 1.101 -13 4.6217 1.53 1.457 -14 12.426 1.457 1.101 -15 -6.4168 1.457 1.006 -16 -1.8749 1.006 1.006 -17 -3.471 1.452 1.01 -18 12.1186 1.452 1.416 -19 -0.5655 1.01 1.01 -20 -4.3126 1.01 1.416 -21 3.5446 1.452 1.53 -22 15.2994 1.452 1.101 -23 0.7115 1.101 1.5202 -24 0 1.416 1.5202 -25 0 1.202 1.3649 -26 138.495 1.416 1.202 -27 0 1.416 1.3649 -28 4.6217 1.457 1.53 -29 -9.5 0.97 0.97 +10 4.6217 1.53 1.457 +11 12.426 1.457 1.101 +12 -6.4168 1.457 1.006 +13 -1.8749 1.006 1.006 +14 -3.471 1.452 1.01 +15 12.1186 1.452 1.416 +16 -0.5655 1.01 1.01 +17 -4.3126 1.01 1.416 +18 3.5446 1.452 1.53 +19 15.2994 1.452 1.101 +20 0.7115 1.101 1.5202 +21 0 1.416 1.5202 +22 0 1.202 1.3649 +23 138.495 1.416 1.202 +24 0 1.416 1.3649 +25 4.6217 1.457 1.53 +26 -9.5 0.97 0.97 BondAngle Coeffs @@ -255,26 +231,23 @@ BondAngle Coeffs 7 0 0 1.3649 0.965 8 18.1678 15.8758 1.53 1.5202 9 12.4632 9.1765 1.5202 1.101 -10 20.754 11.421 1.53 1.101 -11 8.016 8.016 1.53 1.53 -12 18.103 18.103 1.101 1.101 -13 6.0876 16.5702 1.53 1.457 -14 42.4332 13.4582 1.457 1.101 -15 31.8096 20.5799 1.457 1.006 -16 28.0322 28.0322 1.006 1.006 -17 11.8828 5.9339 1.452 1.01 -18 3.7812 14.8633 1.452 1.416 -19 19.8125 19.8125 1.01 1.01 -20 10.8422 29.5743 1.01 1.416 -21 4.6031 -5.479 1.452 1.53 -22 34.8907 10.6917 1.452 1.101 -23 9.1765 12.4632 1.101 1.5202 -24 0 0 1.416 1.5202 -25 0 0 1.202 1.3649 -26 62.7124 52.4045 1.416 1.202 -27 0 0 1.416 1.3649 -28 16.5702 6.0876 1.457 1.53 -29 22.35 22.35 0.97 0.97 +10 6.0876 16.5702 1.53 1.457 +11 42.4332 13.4582 1.457 1.101 +12 31.8096 20.5799 1.457 1.006 +13 28.0322 28.0322 1.006 1.006 +14 11.8828 5.9339 1.452 1.01 +15 3.7812 14.8633 1.452 1.416 +16 19.8125 19.8125 1.01 1.01 +17 10.8422 29.5743 1.01 1.416 +18 4.6031 -5.479 1.452 1.53 +19 34.8907 10.6917 1.452 1.101 +20 9.1765 12.4632 1.101 1.5202 +21 0 0 1.416 1.5202 +22 0 0 1.202 1.3649 +23 62.7124 52.4045 1.416 1.202 +24 0 0 1.416 1.3649 +25 16.5702 6.0876 1.457 1.53 +26 22.35 22.35 0.97 0.97 Dihedral Coeffs # class2 @@ -290,30 +263,27 @@ Dihedral Coeffs # class2 10 0.0442 0 0.0292 0 0.0562 0 11 -0.1804 0 0.0012 0 0.0371 0 12 -0.2428 0 0.4065 0 -0.3079 0 -13 -0.1432 0 0.0617 0 -0.1083 0 -14 0.1764 0 0.1766 0 -0.5206 0 -15 0 0 0.0316 0 -0.1681 0 -16 0 0 0.0514 0 -0.143 0 -17 -1.1506 0 -0.6344 0 -0.1845 0 -18 -0.5187 0 -0.4837 0 -0.1692 0 -19 -0.0483 0 -0.0077 0 -0.0014 0 -20 -0.0148 0 -0.0791 0 -0.0148 0 -21 0.0143 0 -0.0132 0 0.0091 0 -22 0.0219 0 -0.026 0 0.0714 0 -23 -0.7532 0 2.7392 0 0.0907 0 -24 0.8297 0 3.7234 0 -0.0495 0 +13 0.1764 0 0.1766 0 -0.5206 0 +14 -1.1506 0 -0.6344 0 -0.1845 0 +15 -0.5187 0 -0.4837 0 -0.1692 0 +16 -0.0483 0 -0.0077 0 -0.0014 0 +17 -0.0148 0 -0.0791 0 -0.0148 0 +18 0.0143 0 -0.0132 0 0.0091 0 +19 0.0219 0 -0.026 0 0.0714 0 +20 -0.7532 0 2.7392 0 0.0907 0 +21 0.8297 0 3.7234 0 -0.0495 0 +22 0 0 0 0 0 0 +23 0 0 0 0 0 0 +24 -1.6938 0 2.7386 0 -0.336 0 25 0 0 0 0 0 0 -26 0 0 0 0 0 0 -27 -1.6938 0 2.7386 0 -0.336 0 -28 0 0 0 0 0 0 -29 0.0972 0 0.0722 0 -0.2581 0 -30 -0.0228 0 0.028 0 -0.1863 0 -31 0.1693 0 -0.009 0 -0.0687 0 -32 0.1693 0 -0.009 0 -0.0687 0 -33 0 0 0 0 0 0 -34 -1.1506 0 -0.6344 0 -0.1845 0 -35 -0.5187 0 -0.4837 0 -0.1692 0 -36 0.1764 0 0.1766 0 -0.5206 0 +26 0.0972 0 0.0722 0 -0.2581 0 +27 -0.0228 0 0.028 0 -0.1863 0 +28 0.1693 0 -0.009 0 -0.0687 0 +29 0.1693 0 -0.009 0 -0.0687 0 +30 0 0 0 0 0 0 +31 -1.1506 0 -0.6344 0 -0.1845 0 +32 -0.5187 0 -0.4837 0 -0.1692 0 +33 0.1764 0 0.1766 0 -0.5206 0 AngleAngleTorsion Coeffs @@ -329,30 +299,27 @@ AngleAngleTorsion Coeffs 10 -8.019 108.53 123.145 11 -15.3496 107.734 123.145 12 -15.7572 111.91 110.77 -13 -12.564 110.77 110.77 -14 -27.3953 112.67 111.91 -15 -16.164 112.67 110.77 -16 -22.045 112.67 112.67 -17 -7.5499 111.91 110.954 -18 -10.4258 110.62 110.954 -19 -4.6337 113.868 114.302 -20 -6.659 113.868 108.937 -21 -7.4314 111.037 114.302 -22 -8.1335 111.037 108.937 -23 -6.5335 111.037 116.926 -24 -15.5547 111.037 125.542 -25 0 111.037 0 -26 -1.3234 117.961 116.926 -27 -7.3186 117.961 125.542 -28 0 117.961 0 -29 -1.0631 114.302 112.67 -30 -12.7974 114.302 110.77 -31 -5.4514 108.53 116.926 -32 -12.2417 107.734 116.926 -33 0 0 111.254 -34 -7.5499 110.954 111.91 -35 -10.4258 110.954 110.62 -36 -27.3953 111.91 112.67 +13 -27.3953 112.67 111.91 +14 -7.5499 111.91 110.954 +15 -10.4258 110.62 110.954 +16 -4.6337 113.868 114.302 +17 -6.659 113.868 108.937 +18 -7.4314 111.037 114.302 +19 -8.1335 111.037 108.937 +20 -6.5335 111.037 116.926 +21 -15.5547 111.037 125.542 +22 0 111.037 0 +23 -1.3234 117.961 116.926 +24 -7.3186 117.961 125.542 +25 0 117.961 0 +26 -1.0631 114.302 112.67 +27 -12.7974 114.302 110.77 +28 -5.4514 108.53 116.926 +29 -12.2417 107.734 116.926 +30 0 0 111.254 +31 -7.5499 110.954 111.91 +32 -10.4258 110.954 110.62 +33 -27.3953 111.91 112.67 EndBondTorsion Coeffs @@ -368,30 +335,27 @@ EndBondTorsion Coeffs 10 0.2654 0.0503 0.1046 -0.281 0.0816 -0.1522 1.53 1.202 11 1.2143 0.2831 0.3916 -0.2298 0.0354 0.3853 1.101 1.202 12 0.1022 0.209 0.6433 0.196 0.7056 0.112 1.457 1.101 -13 0.213 0.312 0.0777 0.213 0.312 0.0777 1.101 1.101 -14 0.1032 0.5896 -0.4836 0.0579 -0.0043 -0.1906 1.53 1.457 -15 0.2486 0.2422 -0.0925 0.0814 0.0591 0.2219 1.53 1.101 -16 -0.0732 0 0 -0.0732 0 0 1.53 1.53 -17 -0.9466 0.9356 -0.5542 0.057 0.0625 0.4112 1.53 1.006 -18 -1.1685 0.9266 -0.0993 0.085 0.3061 0.2104 1.101 1.006 -19 -0.0992 -0.0727 -0.4139 0.132 0.0015 0.1324 1.01 1.53 -20 -0.4894 0.1644 0.3105 -0.8983 0.2826 0.0881 1.01 1.101 -21 -0.1245 -0.9369 0.7781 -0.2033 0.0035 0.056 1.416 1.53 -22 0.2292 1.1732 -0.058 -0.3667 0.8197 0.1335 1.416 1.101 -23 0.2299 -0.1141 -0.1424 0.0933 -0.4631 0.2883 1.452 1.5202 -24 0.1598 0.7253 -0.1007 0.1226 -2.1326 0.5581 1.452 1.202 -25 0 0 0 0 0 0 1.452 1.3649 -26 0.6413 0.1676 0.144 -0.6979 0.5619 0.4212 1.01 1.5202 -27 0.1214 0.1936 0.0816 -0.7604 -2.6431 1.2467 1.01 1.202 -28 0 0 0 0 0 0 1.01 1.3649 -29 -0.0797 -0.0406 0.0255 0.0742 0.0105 0.0518 1.452 1.53 -30 0.3022 0.2513 0.4641 -0.0601 -0.3763 -0.1876 1.452 1.101 -31 -0.2631 -0.0076 -0.1145 -0.2751 -0.3058 -0.1767 1.53 1.416 -32 -0.0268 0.7836 0.0035 0.3552 -0.2685 0.5834 1.101 1.416 -33 0 0 0 0 0 0 1.416 0.965 -34 0.057 0.0625 0.4112 -0.9466 0.9356 -0.5542 1.006 1.53 -35 0.085 0.3061 0.2104 -1.1685 0.9266 -0.0993 1.006 1.101 -36 0.0579 -0.0043 -0.1906 0.1032 0.5896 -0.4836 1.457 1.53 +13 0.1032 0.5896 -0.4836 0.0579 -0.0043 -0.1906 1.53 1.457 +14 -0.9466 0.9356 -0.5542 0.057 0.0625 0.4112 1.53 1.006 +15 -1.1685 0.9266 -0.0993 0.085 0.3061 0.2104 1.101 1.006 +16 -0.0992 -0.0727 -0.4139 0.132 0.0015 0.1324 1.01 1.53 +17 -0.4894 0.1644 0.3105 -0.8983 0.2826 0.0881 1.01 1.101 +18 -0.1245 -0.9369 0.7781 -0.2033 0.0035 0.056 1.416 1.53 +19 0.2292 1.1732 -0.058 -0.3667 0.8197 0.1335 1.416 1.101 +20 0.2299 -0.1141 -0.1424 0.0933 -0.4631 0.2883 1.452 1.5202 +21 0.1598 0.7253 -0.1007 0.1226 -2.1326 0.5581 1.452 1.202 +22 0 0 0 0 0 0 1.452 1.3649 +23 0.6413 0.1676 0.144 -0.6979 0.5619 0.4212 1.01 1.5202 +24 0.1214 0.1936 0.0816 -0.7604 -2.6431 1.2467 1.01 1.202 +25 0 0 0 0 0 0 1.01 1.3649 +26 -0.0797 -0.0406 0.0255 0.0742 0.0105 0.0518 1.452 1.53 +27 0.3022 0.2513 0.4641 -0.0601 -0.3763 -0.1876 1.452 1.101 +28 -0.2631 -0.0076 -0.1145 -0.2751 -0.3058 -0.1767 1.53 1.416 +29 -0.0268 0.7836 0.0035 0.3552 -0.2685 0.5834 1.101 1.416 +30 0 0 0 0 0 0 1.416 0.965 +31 0.057 0.0625 0.4112 -0.9466 0.9356 -0.5542 1.006 1.53 +32 0.085 0.3061 0.2104 -1.1685 0.9266 -0.0993 1.006 1.101 +33 0.0579 -0.0043 -0.1906 0.1032 0.5896 -0.4836 1.457 1.53 MiddleBondTorsion Coeffs @@ -407,30 +371,27 @@ MiddleBondTorsion Coeffs 10 0.3388 -0.1096 0.1219 1.5202 11 0.2359 0.9139 0.9594 1.5202 12 -10.4959 -0.7647 -0.0545 1.53 -13 -14.261 -0.5322 -0.4864 1.53 -14 -15.4174 -7.3055 -1.0749 1.53 -15 -14.879 -3.6581 -0.3138 1.53 -16 -17.787 -7.1877 0 1.53 -17 -2.2208 0.5479 -0.3527 1.457 -18 -3.4611 1.6996 -0.6007 1.457 -19 -3.5406 -3.3866 0.0352 1.452 -20 -1.1752 2.8058 0.8083 1.452 -21 -3.9501 -0.4002 -0.6798 1.452 -22 -0.6899 -2.2646 1.1579 1.452 +13 -15.4174 -7.3055 -1.0749 1.53 +14 -2.2208 0.5479 -0.3527 1.457 +15 -3.4611 1.6996 -0.6007 1.457 +16 -3.5406 -3.3866 0.0352 1.452 +17 -1.1752 2.8058 0.8083 1.452 +18 -3.9501 -0.4002 -0.6798 1.452 +19 -0.6899 -2.2646 1.1579 1.452 +20 0 0 0 1.416 +21 -8.8301 14.3079 -1.7716 1.416 +22 0 0 0 1.416 23 0 0 0 1.416 -24 -8.8301 14.3079 -1.7716 1.416 +24 -0.9084 6.1447 -0.4852 1.416 25 0 0 0 1.416 -26 0 0 0 1.416 -27 -0.9084 6.1447 -0.4852 1.416 -28 0 0 0 1.416 -29 -4.2324 -3.3023 -1.3244 1.53 -30 -4.1028 -0.5941 -0.047 1.53 -31 0 0 0 1.5202 -32 0 0 0 1.5202 -33 0 0 0 1.3649 -34 -2.2208 0.5479 -0.3527 1.457 -35 -3.4611 1.6996 -0.6007 1.457 -36 -15.4174 -7.3055 -1.0749 1.53 +26 -4.2324 -3.3023 -1.3244 1.53 +27 -4.1028 -0.5941 -0.047 1.53 +28 0 0 0 1.5202 +29 0 0 0 1.5202 +30 0 0 0 1.3649 +31 -2.2208 0.5479 -0.3527 1.457 +32 -3.4611 1.6996 -0.6007 1.457 +33 -15.4174 -7.3055 -1.0749 1.53 BondBond13 Coeffs @@ -446,30 +407,27 @@ BondBond13 Coeffs 10 0 1.53 1.202 11 0 1.101 1.202 12 0 1.457 1.101 -13 0 1.101 1.101 -14 0 1.53 1.457 -15 0 1.53 1.101 -16 0 1.53 1.53 -17 0 1.53 1.006 -18 0 1.101 1.006 -19 0 1.01 1.53 -20 0 1.01 1.101 -21 0 1.416 1.53 -22 0 1.416 1.101 -23 0 1.452 1.5202 -24 0 1.452 1.202 -25 0 1.452 1.3649 -26 0 1.01 1.5202 -27 0 1.01 1.202 -28 0 1.01 1.3649 -29 0 1.452 1.53 -30 0 1.452 1.101 -31 0 1.53 1.416 -32 0 1.101 1.416 -33 0 1.416 0.965 -34 0 1.006 1.53 -35 0 1.006 1.101 -36 0 1.457 1.53 +13 0 1.53 1.457 +14 0 1.53 1.006 +15 0 1.101 1.006 +16 0 1.01 1.53 +17 0 1.01 1.101 +18 0 1.416 1.53 +19 0 1.416 1.101 +20 0 1.452 1.5202 +21 0 1.452 1.202 +22 0 1.452 1.3649 +23 0 1.01 1.5202 +24 0 1.01 1.202 +25 0 1.01 1.3649 +26 0 1.452 1.53 +27 0 1.452 1.101 +28 0 1.53 1.416 +29 0 1.101 1.416 +30 0 1.416 0.965 +31 0 1.006 1.53 +32 0 1.006 1.101 +33 0 1.457 1.53 AngleTorsion Coeffs @@ -485,30 +443,27 @@ AngleTorsion Coeffs 10 0.0885 -1.3703 -0.5452 0.675 0.5965 0.6725 108.53 123.145 11 9.1299 -0.4847 0.3582 -1.4946 0.7308 -0.2083 107.734 123.145 12 -1.1075 0.282 0.8318 0.5111 1.6328 -1.0155 111.91 110.77 -13 -0.8085 0.5569 -0.2466 -0.8085 0.5569 -0.2466 110.77 110.77 -14 -1.9225 -1.345 0.221 2.0125 0.944 -2.7612 112.67 111.91 -15 -0.2454 0 -0.1136 0.3113 0.4516 -0.1988 112.67 110.77 -16 0.3886 -0.3139 0.1389 0.3886 -0.3139 0.1389 112.67 112.67 -17 -3.343 4.4558 -0.0346 0.2873 -0.8072 -0.096 111.91 110.954 -18 -3.9582 2.0063 0.3213 -0.4294 -0.4442 -0.6141 110.62 110.954 -19 -0.5807 0.2041 -0.1384 -2.8967 2.7084 -0.0375 113.868 114.302 -20 -0.3868 0.2041 0.0445 -3.7022 1.3876 0.2393 113.868 108.937 -21 -1.523 1.1296 0.7167 -0.7555 0.0564 1.2177 111.037 114.302 -22 0.0372 -0.3418 -0.0775 -1.5157 2.0781 0.5364 111.037 108.937 -23 5.916 1.7856 0.4052 4.2133 2.9302 3.2903 111.037 116.926 -24 7.4427 2.1505 -0.2206 4.4466 4.0317 1.7129 111.037 125.542 -25 0 0 0 0 0 0 111.037 0 -26 1.9306 0.2105 0.0557 -2.2134 1.2909 0.9726 117.961 116.926 -27 2.3848 0.703 0.1399 -2.6238 0.3606 0.5474 117.961 125.542 -28 0 0 0 0 0 0 117.961 0 -29 0.2039 0.1602 -0.7946 -0.5501 -1.6982 0.2485 114.302 112.67 -30 -1.982 0.2325 -0.3928 -1.2469 1.6933 -1.2081 114.302 110.77 -31 2.1802 -0.0335 -1.3816 2.1221 0.5032 -0.0767 108.53 116.926 -32 7.095 0.0075 0.691 2.0013 0.5068 0.8406 107.734 116.926 -33 0 0 0 0 0 0 0 111.254 -34 0.2873 -0.8072 -0.096 -3.343 4.4558 -0.0346 110.954 111.91 -35 -0.4294 -0.4442 -0.6141 -3.9582 2.0063 0.3213 110.954 110.62 -36 2.0125 0.944 -2.7612 -1.9225 -1.345 0.221 111.91 112.67 +13 -1.9225 -1.345 0.221 2.0125 0.944 -2.7612 112.67 111.91 +14 -3.343 4.4558 -0.0346 0.2873 -0.8072 -0.096 111.91 110.954 +15 -3.9582 2.0063 0.3213 -0.4294 -0.4442 -0.6141 110.62 110.954 +16 -0.5807 0.2041 -0.1384 -2.8967 2.7084 -0.0375 113.868 114.302 +17 -0.3868 0.2041 0.0445 -3.7022 1.3876 0.2393 113.868 108.937 +18 -1.523 1.1296 0.7167 -0.7555 0.0564 1.2177 111.037 114.302 +19 0.0372 -0.3418 -0.0775 -1.5157 2.0781 0.5364 111.037 108.937 +20 5.916 1.7856 0.4052 4.2133 2.9302 3.2903 111.037 116.926 +21 7.4427 2.1505 -0.2206 4.4466 4.0317 1.7129 111.037 125.542 +22 0 0 0 0 0 0 111.037 0 +23 1.9306 0.2105 0.0557 -2.2134 1.2909 0.9726 117.961 116.926 +24 2.3848 0.703 0.1399 -2.6238 0.3606 0.5474 117.961 125.542 +25 0 0 0 0 0 0 117.961 0 +26 0.2039 0.1602 -0.7946 -0.5501 -1.6982 0.2485 114.302 112.67 +27 -1.982 0.2325 -0.3928 -1.2469 1.6933 -1.2081 114.302 110.77 +28 2.1802 -0.0335 -1.3816 2.1221 0.5032 -0.0767 108.53 116.926 +29 7.095 0.0075 0.691 2.0013 0.5068 0.8406 107.734 116.926 +30 0 0 0 0 0 0 0 111.254 +31 0.2873 -0.8072 -0.096 -3.343 4.4558 -0.0346 110.954 111.91 +32 -0.4294 -0.4442 -0.6141 -3.9582 2.0063 0.3213 110.954 110.62 +33 2.0125 0.944 -2.7612 -1.9225 -1.345 0.221 111.91 112.67 Improper Coeffs # class2 @@ -516,15 +471,7 @@ Improper Coeffs # class2 2 0 0 3 0 0 4 0 0 -5 0 0 -6 0 0 -7 0 0 -8 0 0 -9 0 0 -10 0 0 -11 0 0 -12 0 0 -13 24.3329 0 +5 24.3329 0 AngleAngle Coeffs @@ -532,378 +479,342 @@ AngleAngle Coeffs 2 0.2738 -0.4825 0.2738 110.77 107.66 110.77 3 -1.3199 -1.3199 0.1184 112.67 110.77 110.77 4 2.0403 -1.8202 1.0827 108.53 107.734 110.77 -5 -3.3867 -3.4976 -3.3867 107.734 107.66 107.734 -6 0 0 0 110.954 107.067 110.954 -7 0.2738 -0.4825 0.2738 110.77 107.66 110.77 -8 -1.3199 -1.3199 0.1184 112.67 110.77 110.77 -9 -2.5301 0.5381 2.4286 111.91 110.62 110.77 -10 2.4321 -3.5496 2.4321 110.62 107.66 110.62 -11 0 0 0 123.145 118.985 0 -12 0 0 0 113.868 117.961 111.037 -13 0 0 0 116.926 123.145 125.542 +5 0 0 0 116.926 123.145 125.542 Atoms # full -1 1 1 0.0000000000000000e+00 12.288168 0.738732 4.374280 0 0 0 -2 1 2 2.9999999999999999e-01 13.959928 -0.883144 5.090597 0 0 0 -3 1 3 0.0000000000000000e+00 14.411288 -1.994419 5.682160 0 0 0 -4 1 4 0.0000000000000000e+00 12.881083 0.872503 3.506176 0 0 0 -5 1 4 0.0000000000000000e+00 11.232775 0.801641 3.998777 0 0 0 -6 1 5 0.0000000000000000e+00 13.704366 -2.470396 6.130105 0 0 0 -7 1 1 0.0000000000000000e+00 12.489752 -0.793693 4.710639 0 0 0 -8 1 1 0.0000000000000000e+00 12.455071 1.866388 5.385870 0 0 0 -9 1 1 0.0000000000000000e+00 11.248961 1.901849 6.347664 0 0 0 -10 1 2 2.9999999999999999e-01 10.005971 2.466710 5.772840 -1 1 0 -11 1 6 0.0000000000000000e+00 14.795360 -0.034436 4.807367 0 0 0 -12 1 6 0.0000000000000000e+00 9.115239 1.654547 5.617002 -1 0 0 -13 1 3 0.0000000000000000e+00 9.745096 3.807654 5.573585 -1 1 0 -14 1 4 0.0000000000000000e+00 12.248215 -1.371492 3.808598 0 0 0 -15 1 4 0.0000000000000000e+00 11.715755 -1.036825 5.500449 0 0 0 -16 1 4 0.0000000000000000e+00 12.559724 2.807687 4.858452 0 1 0 -17 1 4 0.0000000000000000e+00 13.299968 1.616570 6.123781 0 0 0 -18 1 4 0.0000000000000000e+00 11.650505 2.330454 7.282410 0 1 0 -19 1 4 0.0000000000000000e+00 10.888420 0.913219 6.637162 -1 0 0 -20 1 5 0.0000000000000000e+00 10.550073 4.294209 5.758192 -1 1 0 -21 2 1 0.0000000000000000e+00 5.851425 1.929552 6.038335 0 0 0 -22 2 1 0.0000000000000000e+00 6.741509 3.160751 6.233074 0 0 0 -23 2 7 -2.9999999999999999e-01 7.957761 3.121780 5.252257 1 0 0 -24 2 7 -2.9999999999999999e-01 2.599653 -2.258940 5.985863 0 -1 0 -25 2 1 0.0000000000000000e+00 3.834337 -1.907078 5.441528 0 -1 0 -26 2 1 0.0000000000000000e+00 4.810793 -1.083699 6.310184 0 -1 0 -27 2 4 0.0000000000000000e+00 6.505912 1.182799 5.449104 0 0 0 -28 2 4 0.0000000000000000e+00 5.156429 2.256468 5.348423 0 0 0 -29 2 4 0.0000000000000000e+00 7.232782 3.178785 7.181911 0 0 0 -30 2 4 0.0000000000000000e+00 6.251671 4.103621 6.222913 0 0 0 -31 2 8 0.0000000000000000e+00 8.249909 4.070668 4.881297 1 0 0 -32 2 8 0.0000000000000000e+00 7.813025 2.623184 4.400744 1 0 0 -33 2 8 0.0000000000000000e+00 2.626695 -2.857547 6.817247 0 -1 0 -34 2 8 0.0000000000000000e+00 1.955281 -2.684319 5.328460 0 -1 0 -35 2 4 0.0000000000000000e+00 3.637708 -1.322842 4.469265 0 -1 0 -36 2 4 0.0000000000000000e+00 4.415570 -2.739689 4.997336 0 -1 0 -37 2 4 0.0000000000000000e+00 5.710714 -1.010014 5.642798 0 -1 0 -38 2 4 0.0000000000000000e+00 5.103831 -1.696423 7.160345 0 -1 0 -39 2 1 0.0000000000000000e+00 5.270763 1.286629 7.308822 0 0 0 -40 2 4 0.0000000000000000e+00 4.834381 2.168531 7.931687 0 0 1 -41 2 4 0.0000000000000000e+00 6.118354 0.786724 7.794709 0 0 1 -42 2 1 0.0000000000000000e+00 4.273849 0.167695 6.957862 0 -1 0 -43 2 4 0.0000000000000000e+00 3.792544 -0.081782 7.904418 0 -1 1 -44 2 4 0.0000000000000000e+00 3.527495 0.674238 6.348869 0 0 0 +1 1 c2 -0.37128 12.288168 0.738732 4.37428 +2 1 c_1 0.77363 13.959928 -0.883144 5.090597 +3 1 o -0.68333 14.411288 -1.994419 5.68216 +4 1 hc 0.20049 12.881083 0.872503 3.506176 +5 1 hc 0.19609 11.232775 0.801641 3.998777 +6 1 ho 0.48328 13.704366 -2.470396 6.130105 +7 1 c2 -0.46692 12.489752 -0.793693 4.710639 +8 1 c2 -0.38182 12.455071 1.866388 5.38587 +9 1 c2 -0.47583 11.248961 1.901849 6.347664 +10 1 c_1 0.78608 10.005971 2.46671 5.77284 +11 1 o_1 -0.56991 14.79536 -0.034436 4.807367 +12 1 o_1 -0.58244 9.115239 1.654547 5.617002 +13 1 o -0.68598 9.745096 3.807654 5.573585 +14 1 hc 0.20664 12.248215 -1.371492 3.808598 +15 1 hc 0.21572 11.715755 -1.036825 5.500449 +16 1 hc 0.18182 12.559724 2.807687 4.858452 +17 1 hc 0.21541 13.299968 1.61657 6.123781 +18 1 hc 0.20587 11.650505 2.330454 7.28241 +19 1 hc 0.22795 10.88842 0.913219 6.637162 +20 1 ho 0.48600 10.550073 4.294209 5.758192 +21 2 c2 -0.38667 5.851425 1.929552 6.038335 +22 2 c2 -0.17544 6.741509 3.160751 6.233074 +23 2 na -0.79903 7.957761 3.12178 5.252257 +24 2 na -0.79111 2.599653 -2.25894 5.985863 +25 2 c2 -0.17576 3.834337 -1.907078 5.441528 +26 2 c2 -0.38091 4.810793 -1.083699 6.310184 +27 2 hc 0.19062 6.505912 1.182799 5.449104 +28 2 hc 0.18951 5.156429 2.256468 5.348423 +29 2 hc 0.17321 7.232782 3.178785 7.181911 +30 2 hc 0.16772 6.251671 4.103621 6.222913 +31 2 hn 0.33245 8.249909 4.070668 4.881297 +32 2 hn 0.34480 7.813025 2.623184 4.400744 +33 2 hn 0.33793 2.626695 -2.857547 6.817247 +34 2 hn 0.33306 1.955281 -2.684319 5.32846 +35 2 hc 0.17708 3.637708 -1.322842 4.469265 +36 2 hc 0.15806 4.41557 -2.739689 4.997336 +37 2 hc 0.18117 5.710714 -1.010014 5.642798 +38 2 hc 0.18224 5.103831 -1.696423 7.160345 +39 2 c2 -0.38394 5.270763 1.286629 7.308822 +40 2 hc 0.17720 4.834381 2.168531 7.931687 +41 2 hc 0.18425 6.118354 0.786724 7.794709 +42 2 c2 -0.37058 4.273849 0.167695 6.957862 +43 2 hc 0.18777 3.792544 -0.081782 7.904418 +44 2 hc 0.18490 3.527495 0.674238 6.348869 Velocities -1 -2.4626989626218821e-03 -1.5920230003311222e-03 -3.0621927786115238e-03 -2 9.5082416704385837e-03 -6.9903166167507250e-03 1.3702671335945608e-02 -3 2.3431518493187576e-03 -2.9261683108242173e-03 1.4269399726982105e-03 -4 -1.8184451408256214e-02 3.1103803691687960e-02 -1.3358827768357973e-02 -5 2.6084132471017967e-02 -1.0819576493517332e-02 3.0403384454794881e-02 -6 -4.7312115958218744e-03 -1.9111462399478338e-02 -3.6793354156497558e-02 -7 -7.5068797595949869e-03 6.5661422055962489e-03 1.3226575122695422e-03 -8 3.3807881380161281e-03 3.0458732663557089e-03 2.2368826795446284e-03 -9 -3.1113905793879316e-03 8.2908867720754773e-03 -1.7561238039496530e-03 -10 2.4685206571693056e-03 1.3194776209841030e-03 -2.8041877032800441e-03 -11 -3.4945605770565296e-03 3.2323777135621814e-03 1.6223017668450866e-03 -12 -6.1153483612847778e-03 -5.1534857074262185e-03 1.7735747357354274e-03 -13 2.1384296781859011e-04 -4.5398902942729667e-03 6.1649769894413760e-03 -14 2.5004619864373401e-03 -1.5709184283264888e-03 2.0837548254667757e-02 -15 6.0547939205643532e-03 -1.2650704436910937e-02 -5.4430753266962190e-03 -16 -1.0374605775698001e-02 9.1408658463889240e-03 -1.1306875858287088e-02 -17 -1.2736499128987409e-02 -9.1726811852506501e-03 5.1136502685461254e-03 -18 7.6741778607048112e-03 1.8629856635459279e-02 -1.1300096447670932e-02 -19 -1.8616138775281121e-02 1.0848388547730185e-03 -5.7118433687798576e-03 -20 5.4137572241479059e-03 -1.4564578166395727e-02 -1.2618420441909540e-02 -21 5.8473521452312256e-03 -4.0595286000332086e-03 -6.2517801580146415e-03 -22 3.6402033824753104e-03 -1.4629540504663154e-03 -4.0030712318898046e-03 -23 9.0266305019107689e-03 -2.7511425384659687e-03 4.5576402565437142e-03 -24 -1.3102302415548614e-02 -4.7286703965305791e-03 -1.8966887841189517e-03 -25 7.8621682621103171e-03 -4.2046313540949568e-03 9.6887957374751301e-04 -26 -4.7380176438337968e-03 9.6090441940775827e-03 -8.7592431387039336e-03 -27 5.4311658811632517e-03 2.0032224663495989e-02 -9.4952076489808503e-03 -28 -2.9056381493904374e-03 3.3317109723156875e-03 1.6650350064426677e-02 -29 -6.4569944033489122e-03 2.8423983541959541e-03 -2.6066912906505167e-02 -30 -2.2173867823429387e-02 1.4628839880961319e-02 -2.3330833961402380e-02 -31 9.1925713381983114e-03 -2.5697556639281928e-03 -1.2822203161488303e-02 -32 -8.3206975051927905e-03 -2.2538429924858707e-03 7.7620244118580314e-03 -33 1.9920685674825727e-02 5.0317764848494097e-03 -2.1106672824976403e-02 -34 1.4118463330250982e-02 1.7455545466840316e-02 -1.2482101375598437e-02 -35 -6.1116505640437966e-03 1.3353021777303568e-02 -2.5492434283827668e-02 -36 9.1001521565859649e-03 5.5737774505222404e-03 1.4573768978939985e-02 -37 1.6523593470528035e-03 -2.2107518020000917e-02 2.0311423445130115e-02 -38 -1.0346275393471860e-02 1.6055856586351790e-02 5.5489127019262424e-03 -39 -3.2054811383248638e-03 1.6779208962376315e-03 2.9390509537535661e-03 -40 1.9649219364916443e-02 4.0815776523222859e-03 -9.8422441166041274e-03 -41 5.6961697588160361e-04 7.1361132234741477e-04 4.6335764220256257e-03 -42 2.2221300208006252e-03 3.6217319632558197e-03 -6.3299398503455151e-03 -43 2.5710172734841170e-03 8.0029179814482924e-03 1.9992986928468189e-02 -44 -6.0827581822674656e-03 -1.1834273655641976e-02 2.0526923045885208e-02 +1 -0.002462698962621882 -0.0015920230003311222 -0.003062192778611524 +2 0.009508241670438584 -0.006990316616750725 0.013702671335945608 +3 0.0023431518493187576 -0.0029261683108242173 0.0014269399726982105 +4 -0.018184451408256214 0.03110380369168796 -0.013358827768357973 +5 0.026084132471017967 -0.010819576493517332 0.03040338445479488 +6 -0.004731211595821874 -0.01911146239947834 -0.03679335415649756 +7 -0.007506879759594987 0.006566142205596249 0.0013226575122695422 +8 0.003380788138016128 0.003045873266355709 0.0022368826795446284 +9 -0.0031113905793879316 0.008290886772075477 -0.001756123803949653 +10 0.0024685206571693056 0.001319477620984103 -0.002804187703280044 +11 -0.0034945605770565296 0.0032323777135621814 0.0016223017668450866 +12 -0.006115348361284778 -0.0051534857074262185 0.0017735747357354274 +13 0.0002138429678185901 -0.004539890294272967 0.006164976989441376 +14 0.00250046198643734 -0.0015709184283264888 0.020837548254667757 +15 0.006054793920564353 -0.012650704436910937 -0.005443075326696219 +16 -0.010374605775698001 0.009140865846388924 -0.011306875858287088 +17 -0.01273649912898741 -0.00917268118525065 0.005113650268546125 +18 0.007674177860704811 0.01862985663545928 -0.011300096447670932 +19 -0.01861613877528112 0.0010848388547730185 -0.005711843368779858 +20 0.005413757224147906 -0.014564578166395727 -0.01261842044190954 +21 0.005847352145231226 -0.004059528600033209 -0.0062517801580146415 +22 0.0036402033824753104 -0.0014629540504663154 -0.004003071231889805 +23 0.009026630501910769 -0.0027511425384659687 0.004557640256543714 +24 -0.013102302415548614 -0.004728670396530579 -0.0018966887841189517 +25 0.007862168262110317 -0.004204631354094957 0.000968879573747513 +26 -0.004738017643833797 0.009609044194077583 -0.008759243138703934 +27 0.005431165881163252 0.02003222466349599 -0.00949520764898085 +28 -0.0029056381493904374 0.0033317109723156875 0.016650350064426677 +29 -0.006456994403348912 0.002842398354195954 -0.026066912906505167 +30 -0.022173867823429387 0.014628839880961319 -0.02333083396140238 +31 0.009192571338198311 -0.0025697556639281928 -0.012822203161488303 +32 -0.00832069750519279 -0.0022538429924858707 0.007762024411858031 +33 0.019920685674825727 0.00503177648484941 -0.021106672824976403 +34 0.014118463330250982 0.017455545466840316 -0.012482101375598437 +35 -0.006111650564043797 0.013353021777303568 -0.025492434283827668 +36 0.009100152156585965 0.00557377745052224 0.014573768978939985 +37 0.0016523593470528035 -0.022107518020000917 0.020311423445130115 +38 -0.01034627539347186 0.01605585658635179 0.005548912701926242 +39 -0.0032054811383248638 0.0016779208962376315 0.002939050953753566 +40 0.019649219364916443 0.004081577652322286 -0.009842244116604127 +41 0.0005696169758816036 0.0007136113223474148 0.004633576422025626 +42 0.0022221300208006252 0.0036217319632558197 -0.006329939850345515 +43 0.002571017273484117 0.008002917981448292 0.01999298692846819 +44 -0.006082758182267466 -0.011834273655641976 0.020526923045885208 Bonds -1 1 1 5 -2 1 1 4 -3 2 1 7 -4 2 1 8 -5 3 2 3 -6 5 2 11 -7 6 3 6 -8 4 7 2 -9 1 7 14 -10 1 7 15 -11 2 8 9 -12 1 8 16 -13 1 8 17 -14 4 9 10 -15 1 9 18 -16 1 9 19 -17 5 10 12 -18 3 10 13 -19 6 13 20 -20 7 21 22 -21 8 21 27 -22 8 21 28 -23 7 21 39 -24 9 22 23 -25 8 22 29 -26 8 22 30 -27 10 23 31 -28 10 23 32 -29 10 24 33 -30 10 24 34 -31 9 25 24 -32 7 25 26 -33 8 25 35 -34 8 25 36 -35 8 26 37 -36 8 26 38 -37 7 26 42 -38 8 39 40 -39 8 39 41 -40 7 39 42 -41 8 42 43 -42 8 42 44 +1 c2-hc 1 5 +2 c2-hc 1 4 +3 c2-c2 1 7 +4 c2-c2 1 8 +5 c_1-o 2 3 +6 c_1-o_1 2 11 +7 o-ho 3 6 +8 c2-c_1 7 2 +9 c2-hc 7 14 +10 c2-hc 7 15 +11 c2-c2 8 9 +12 c2-hc 8 16 +13 c2-hc 8 17 +14 c2-c_1 9 10 +15 c2-hc 9 18 +16 c2-hc 9 19 +17 c_1-o_1 10 12 +18 c_1-o 10 13 +19 o-ho 13 20 +20 c2-c2 21 22 +21 c2-hc 21 27 +22 c2-hc 21 28 +23 c2-c2 21 39 +24 na-c2 22 23 +25 c2-hc 22 29 +26 c2-hc 22 30 +27 na-hn 23 31 +28 na-hn 23 32 +29 na-hn 24 33 +30 na-hn 24 34 +31 na-c2 25 24 +32 c2-c2 25 26 +33 c2-hc 25 35 +34 c2-hc 25 36 +35 c2-hc 26 37 +36 c2-hc 26 38 +37 c2-c2 26 42 +38 c2-hc 39 40 +39 c2-hc 39 41 +40 c2-c2 39 42 +41 c2-hc 42 43 +42 c2-hc 42 44 Angles -1 1 5 1 4 -2 2 7 1 5 -3 2 8 1 5 -4 2 7 1 4 -5 2 8 1 4 -6 3 7 1 8 -7 4 7 2 3 -8 5 3 2 11 -9 6 7 2 11 -10 7 2 3 6 -11 8 1 7 2 -12 2 1 7 14 -13 2 1 7 15 -14 9 2 7 14 -15 9 2 7 15 -16 1 14 7 15 -17 3 1 8 9 -18 2 1 8 16 -19 2 1 8 17 -20 2 9 8 16 -21 2 9 8 17 -22 1 16 8 17 -23 8 8 9 10 -24 2 8 9 18 -25 2 8 9 19 -26 9 10 9 18 -27 9 10 9 19 -28 1 18 9 19 -29 6 9 10 12 -30 4 9 10 13 -31 5 13 10 12 -32 7 10 13 20 -33 10 22 21 27 -34 10 22 21 28 -35 11 22 21 39 -36 12 27 21 28 -37 10 39 21 27 -38 10 39 21 28 -39 13 21 22 23 -40 10 21 22 29 -41 10 21 22 30 -42 14 23 22 29 -43 14 23 22 30 -44 12 29 22 30 -45 15 22 23 31 -46 15 22 23 32 -47 16 31 23 32 -48 15 25 24 33 -49 15 25 24 34 -50 16 33 24 34 -51 13 26 25 24 -52 14 24 25 35 -53 14 24 25 36 -54 10 26 25 35 -55 10 26 25 36 -56 12 35 25 36 -57 10 25 26 37 -58 10 25 26 38 -59 11 25 26 42 -60 12 37 26 38 -61 10 42 26 37 -62 10 42 26 38 -63 10 21 39 40 -64 10 21 39 41 -65 11 21 39 42 -66 12 40 39 41 -67 10 42 39 40 -68 10 42 39 41 -69 11 26 42 39 -70 10 26 42 43 -71 10 26 42 44 -72 10 39 42 43 -73 10 39 42 44 -74 12 43 42 44 +1 hc-c2-hc 5 1 4 +2 c2-c2-hc 7 1 5 +3 c2-c2-hc 8 1 5 +4 c2-c2-hc 7 1 4 +5 c2-c2-hc 8 1 4 +6 c2-c2-c2 7 1 8 +7 c2-c_1-o_1 7 2 3 +8 o-c_1-o_1 3 2 11 +9 c2-c_1-o 7 2 11 +10 c_1-o-ho 2 3 6 +11 c2-c2-c_1 1 7 2 +12 c2-c2-hc 1 7 14 +13 c2-c2-hc 1 7 15 +14 c_1-c2-hc 2 7 14 +15 c_1-c2-hc 2 7 15 +16 hc-c2-hc 14 7 15 +17 c2-c2-c2 1 8 9 +18 c2-c2-hc 1 8 16 +19 c2-c2-hc 1 8 17 +20 c2-c2-hc 9 8 16 +21 c2-c2-hc 9 8 17 +22 hc-c2-hc 16 8 17 +23 c2-c2-c_1 8 9 10 +24 c2-c2-hc 8 9 18 +25 c2-c2-hc 8 9 19 +26 c_1-c2-hc 10 9 18 +27 c_1-c2-hc 10 9 19 +28 hc-c2-hc 18 9 19 +29 c2-c_1-o 9 10 12 +30 c2-c_1-o_1 9 10 13 +31 o-c_1-o_1 13 10 12 +32 c_1-o-ho 10 13 20 +33 c2-c2-hc 22 21 27 +34 c2-c2-hc 22 21 28 +35 c2-c2-c2 22 21 39 +36 hc-c2-hc 27 21 28 +37 c2-c2-hc 39 21 27 +38 c2-c2-hc 39 21 28 +39 c2-c2-na 21 22 23 +40 c2-c2-hc 21 22 29 +41 c2-c2-hc 21 22 30 +42 na-c2-hc 23 22 29 +43 na-c2-hc 23 22 30 +44 hc-c2-hc 29 22 30 +45 c2-na-hn 22 23 31 +46 c2-na-hn 22 23 32 +47 hn-na-hn 31 23 32 +48 c2-na-hn 25 24 33 +49 c2-na-hn 25 24 34 +50 hn-na-hn 33 24 34 +51 c2-c2-na 26 25 24 +52 na-c2-hc 24 25 35 +53 na-c2-hc 24 25 36 +54 c2-c2-hc 26 25 35 +55 c2-c2-hc 26 25 36 +56 hc-c2-hc 35 25 36 +57 c2-c2-hc 25 26 37 +58 c2-c2-hc 25 26 38 +59 c2-c2-c2 25 26 42 +60 hc-c2-hc 37 26 38 +61 c2-c2-hc 42 26 37 +62 c2-c2-hc 42 26 38 +63 c2-c2-hc 21 39 40 +64 c2-c2-hc 21 39 41 +65 c2-c2-c2 21 39 42 +66 hc-c2-hc 40 39 41 +67 c2-c2-hc 42 39 40 +68 c2-c2-hc 42 39 41 +69 c2-c2-c2 26 42 39 +70 c2-c2-hc 26 42 43 +71 c2-c2-hc 26 42 44 +72 c2-c2-hc 39 42 43 +73 c2-c2-hc 39 42 44 +74 hc-c2-hc 43 42 44 Dihedrals -1 2 5 1 7 14 -2 2 5 1 7 15 -3 2 4 1 7 14 -4 2 4 1 7 15 -5 3 8 1 7 2 -6 4 8 1 7 14 -7 4 8 1 7 15 -8 2 5 1 8 16 -9 2 5 1 8 17 -10 2 4 1 8 16 -11 2 4 1 8 17 -12 5 7 1 8 9 -13 4 7 1 8 16 -14 4 7 1 8 17 -15 6 7 2 3 6 -16 7 11 2 3 6 -17 1 2 7 1 5 -18 1 2 7 1 4 -19 8 1 7 2 3 -20 9 14 7 2 3 -21 9 15 7 2 3 -22 10 1 7 2 11 -23 11 14 7 2 11 -24 11 15 7 2 11 -25 4 9 8 1 5 -26 4 9 8 1 4 -27 3 1 8 9 10 -28 4 1 8 9 18 -29 4 1 8 9 19 -30 2 16 8 9 18 -31 2 16 8 9 19 -32 2 17 8 9 18 -33 2 17 8 9 19 -34 1 10 9 8 16 -35 1 10 9 8 17 -36 10 8 9 10 12 -37 8 8 9 10 13 -38 11 18 9 10 12 -39 9 18 9 10 13 -40 11 19 9 10 12 -41 9 19 9 10 13 -42 6 9 10 13 20 -43 7 12 10 13 20 -44 13 27 21 22 29 -45 13 27 21 22 30 -46 13 28 21 22 29 -47 13 28 21 22 30 -48 14 39 21 22 23 -49 15 39 21 22 29 -50 15 39 21 22 30 -51 15 22 21 39 40 -52 15 22 21 39 41 -53 16 22 21 39 42 -54 13 27 21 39 40 -55 13 27 21 39 41 -56 13 28 21 39 40 -57 13 28 21 39 41 -58 12 23 22 21 27 -59 12 23 22 21 28 -60 17 21 22 23 31 -61 17 21 22 23 32 -62 18 29 22 23 31 -63 18 29 22 23 32 -64 18 30 22 23 31 -65 18 30 22 23 32 -66 17 26 25 24 33 -67 18 35 25 24 33 -68 18 36 25 24 33 -69 17 26 25 24 34 -70 18 35 25 24 34 -71 18 36 25 24 34 -72 12 24 25 26 37 -73 12 24 25 26 38 -74 13 35 25 26 37 -75 13 35 25 26 38 -76 13 36 25 26 37 -77 13 36 25 26 38 -78 14 42 26 25 24 -79 15 42 26 25 35 -80 15 42 26 25 36 -81 16 25 26 42 39 -82 15 25 26 42 43 -83 15 25 26 42 44 -84 13 37 26 42 43 -85 13 37 26 42 44 -86 13 38 26 42 43 -87 13 38 26 42 44 -88 15 42 39 21 27 -89 15 42 39 21 28 -90 16 21 39 42 26 -91 15 21 39 42 43 -92 15 21 39 42 44 -93 13 40 39 42 43 -94 13 40 39 42 44 -95 13 41 39 42 43 -96 13 41 39 42 44 -97 15 39 42 26 37 -98 15 39 42 26 38 -99 15 26 42 39 40 -100 15 26 42 39 41 +1 hc-c2-c2-hc 5 1 7 14 +2 hc-c2-c2-hc 5 1 7 15 +3 hc-c2-c2-hc 4 1 7 14 +4 hc-c2-c2-hc 4 1 7 15 +5 c2-c2-c2-c_1 8 1 7 2 +6 c2-c2-c2-hc 8 1 7 14 +7 c2-c2-c2-hc 8 1 7 15 +8 hc-c2-c2-hc 5 1 8 16 +9 hc-c2-c2-hc 5 1 8 17 +10 hc-c2-c2-hc 4 1 8 16 +11 hc-c2-c2-hc 4 1 8 17 +12 c2-c2-c2-c2 7 1 8 9 +13 c2-c2-c2-hc 7 1 8 16 +14 c2-c2-c2-hc 7 1 8 17 +15 c2-c_1-o-ho 7 2 3 6 +16 o_1-c_1-o-ho 11 2 3 6 +17 c_1-c2-c2-hc 2 7 1 5 +18 c_1-c2-c2-hc 2 7 1 4 +19 c2-c2-c_1-o 1 7 2 3 +20 hc-c2-c_1-o 14 7 2 3 +21 hc-c2-c_1-o 15 7 2 3 +22 c2-c2-c_1-o_1 1 7 2 11 +23 hc-c2-c_1-o_1 14 7 2 11 +24 hc-c2-c_1-o_1 15 7 2 11 +25 c2-c2-c2-hc 9 8 1 5 +26 c2-c2-c2-hc 9 8 1 4 +27 c2-c2-c2-c_1 1 8 9 10 +28 c2-c2-c2-hc 1 8 9 18 +29 c2-c2-c2-hc 1 8 9 19 +30 hc-c2-c2-hc 16 8 9 18 +31 hc-c2-c2-hc 16 8 9 19 +32 hc-c2-c2-hc 17 8 9 18 +33 hc-c2-c2-hc 17 8 9 19 +34 c_1-c2-c2-hc 10 9 8 16 +35 c_1-c2-c2-hc 10 9 8 17 +36 c2-c2-c_1-o_1 8 9 10 12 +37 c2-c2-c_1-o 8 9 10 13 +38 hc-c2-c_1-o_1 18 9 10 12 +39 hc-c2-c_1-o 18 9 10 13 +40 hc-c2-c_1-o_1 19 9 10 12 +41 hc-c2-c_1-o 19 9 10 13 +42 c2-c_1-o-ho 9 10 13 20 +43 o_1-c_1-o-ho 12 10 13 20 +44 hc-c2-c2-hc 27 21 22 29 +45 hc-c2-c2-hc 27 21 22 30 +46 hc-c2-c2-hc 28 21 22 29 +47 hc-c2-c2-hc 28 21 22 30 +48 c2-c2-c2-na 39 21 22 23 +49 c2-c2-c2-hc 39 21 22 29 +50 c2-c2-c2-hc 39 21 22 30 +51 c2-c2-c2-hc 22 21 39 40 +52 c2-c2-c2-hc 22 21 39 41 +53 c2-c2-c2-c2 22 21 39 42 +54 hc-c2-c2-hc 27 21 39 40 +55 hc-c2-c2-hc 27 21 39 41 +56 hc-c2-c2-hc 28 21 39 40 +57 hc-c2-c2-hc 28 21 39 41 +58 na-c2-c2-hc 23 22 21 27 +59 na-c2-c2-hc 23 22 21 28 +60 c2-c2-na-hn 21 22 23 31 +61 c2-c2-na-hn 21 22 23 32 +62 hn-na-c2-hc 29 22 23 31 +63 hn-na-c2-hc 29 22 23 32 +64 hn-na-c2-hc 30 22 23 31 +65 hn-na-c2-hc 30 22 23 32 +66 c2-c2-na-hn 26 25 24 33 +67 hn-na-c2-hc 35 25 24 33 +68 hn-na-c2-hc 36 25 24 33 +69 c2-c2-na-hn 26 25 24 34 +70 hn-na-c2-hc 35 25 24 34 +71 hn-na-c2-hc 36 25 24 34 +72 na-c2-c2-hc 24 25 26 37 +73 na-c2-c2-hc 24 25 26 38 +74 hc-c2-c2-hc 35 25 26 37 +75 hc-c2-c2-hc 35 25 26 38 +76 hc-c2-c2-hc 36 25 26 37 +77 hc-c2-c2-hc 36 25 26 38 +78 c2-c2-c2-na 42 26 25 24 +79 c2-c2-c2-hc 42 26 25 35 +80 c2-c2-c2-hc 42 26 25 36 +81 c2-c2-c2-c2 25 26 42 39 +82 c2-c2-c2-hc 25 26 42 43 +83 c2-c2-c2-hc 25 26 42 44 +84 hc-c2-c2-hc 37 26 42 43 +85 hc-c2-c2-hc 37 26 42 44 +86 hc-c2-c2-hc 38 26 42 43 +87 hc-c2-c2-hc 38 26 42 44 +88 c2-c2-c2-hc 42 39 21 27 +89 c2-c2-c2-hc 42 39 21 28 +90 c2-c2-c2-c2 21 39 42 26 +91 c2-c2-c2-hc 21 39 42 43 +92 c2-c2-c2-hc 21 39 42 44 +93 hc-c2-c2-hc 40 39 42 43 +94 hc-c2-c2-hc 40 39 42 44 +95 hc-c2-c2-hc 41 39 42 43 +96 hc-c2-c2-hc 41 39 42 44 +97 c2-c2-c2-hc 39 42 26 37 +98 c2-c2-c2-hc 39 42 26 38 +99 c2-c2-c2-hc 26 42 39 40 +100 c2-c2-c2-hc 26 42 39 41 Impropers -1 2 7 1 4 5 -2 2 8 1 4 5 -3 3 7 1 8 5 -4 3 7 1 8 4 -5 1 7 2 3 11 -6 4 1 7 2 14 -7 4 1 7 2 15 -8 2 1 7 14 15 -9 5 2 7 14 15 -10 3 1 8 9 16 -11 3 1 8 9 17 -12 2 1 8 16 17 -13 2 9 8 16 17 -14 4 8 9 10 18 -15 4 8 9 10 19 -16 2 8 9 18 19 -17 5 10 9 18 19 -18 1 9 10 13 12 -19 7 22 21 27 28 -20 8 22 21 39 27 -21 8 22 21 39 28 -22 7 39 21 28 27 -23 9 21 22 23 29 -24 9 21 22 23 30 -25 7 21 22 29 30 -26 10 23 22 29 30 -27 6 22 23 31 32 -28 6 25 24 33 34 -29 9 26 25 24 35 -30 9 26 25 24 36 -31 10 24 25 35 36 -32 7 26 25 35 36 -33 7 25 26 37 38 -34 8 25 26 42 37 -35 8 25 26 42 38 -36 7 42 26 38 37 -37 7 21 39 40 41 -38 8 21 39 42 40 -39 8 21 39 42 41 -40 7 42 39 41 40 -41 8 26 42 39 43 -42 8 26 42 39 44 -43 7 26 42 43 44 -44 7 39 42 43 44 +1 c2-na-hn-hn 7 1 4 5 +2 c2-na-hn-hn 8 1 4 5 +3 c2-c_1-o_1-o 7 1 8 5 +4 c2-c_1-o_1-o 7 1 8 4 +5 c2-c_1-o-o_1 7 2 3 11 +6 c2-n-hn-c_1 1 7 2 14 +7 c2-n-hn-c_1 1 7 2 15 +8 c2-na-hn-hn 1 7 14 15 +9 c2-c_1-o_1-o 1 8 9 16 +10 c2-c_1-o_1-o 1 8 9 17 +11 c2-na-hn-hn 1 8 16 17 +12 c2-na-hn-hn 9 8 16 17 +13 c2-n-hn-c_1 8 9 10 18 +14 c2-n-hn-c_1 8 9 10 19 +15 c2-na-hn-hn 8 9 18 19 +16 c2-c_1-o-o_1 9 10 13 12 diff --git a/examples/bpm/impact/brokenDump b/examples/bpm/impact/brokenDump deleted file mode 100644 index 0a2316cd5e..0000000000 --- a/examples/bpm/impact/brokenDump +++ /dev/null @@ -1,3914 +0,0 @@ -599 1817 5468 -600 1808 1815 -554 1938 5471 -548 5471 5591 -554 1938 5471 -571 5471 5590 -572 5471 5589 -599 1817 5468 -548 5471 5591 -571 5471 5590 -572 5471 5589 -608 1814 1815 -616 1815 1926 -622 5231 5350 -622 1818 1935 -635 1818 1929 -638 5468 5469 -648 1806 1923 -648 1818 1937 -649 1811 1812 -650 1822 5468 -650 1822 1935 -652 5469 5472 -655 1822 5589 -660 1812 1813 -662 1816 1929 -666 1810 1923 -672 1935 1937 -676 1810 1812 -676 1822 1938 -677 1806 1917 -677 1822 1937 -679 1812 1816 -683 1819 1937 -683 1816 1931 -684 1816 1937 -686 1810 1931 -695 1583 1584 -699 1821 1822 -700 1812 1929 -616 1815 1926 -635 1818 1929 -648 1806 1923 -650 1822 1935 -660 1923 1930 -662 1816 1929 -666 1810 1923 -671 1935 1936 -672 1935 1937 -676 1822 1938 -677 1806 1917 -683 1816 1931 -686 1810 1931 -687 2052 5709 -692 1923 2040 -692 2169 5709 -694 2052 5588 -696 1936 1940 -700 1812 1929 -605 5477 5596 -610 5467 5468 -611 5237 5350 -622 5231 5350 -628 5467 5474 -629 5473 5474 -635 5467 5472 -637 5473 5480 -638 5468 5469 -640 5474 5475 -646 5354 5467 -647 5467 5475 -650 1822 5468 -652 5347 5354 -652 5469 5472 -653 5479 5480 -658 5473 5478 -661 5472 5475 -661 5474 5478 -663 5480 5481 -665 5358 5478 -668 5227 5234 -669 5480 5593 -670 5347 5355 -671 5234 5347 -672 5479 5486 -674 5352 5354 -674 5475 5478 -677 5471 5472 -678 5478 5593 -679 5478 5481 -681 5352 5355 -682 5352 5475 -682 5468 5471 -687 5352 5357 -687 5486 5599 -689 5232 5234 -689 5481 5601 -690 5476 5478 -691 5480 5484 -693 5484 5599 -694 5471 5477 -700 5479 5484 -655 1822 5589 -669 5480 5593 -678 5478 5593 -687 5486 5599 -687 2052 5709 -692 2169 5709 -693 5484 5599 -693 5594 5600 -694 2052 5588 -695 5600 5714 -699 5828 5829 -700 5951 5958 -704 1806 1925 -706 1810 1925 -711 1816 1932 -711 1937 1940 -712 1800 1917 -716 1926 1931 -720 1457 1464 -721 1804 1917 -722 5469 5470 -722 1803 1920 -728 1820 5471 -729 1802 1809 -730 1925 1928 -734 1353 1469 -735 1923 1925 -737 5230 5231 -738 1804 1925 -739 1810 1926 -739 1816 1821 -740 1911 1918 -743 1822 5471 -745 1821 1937 -746 1458 1574 -755 1586 5231 -756 1469 4994 -756 1463 1470 -756 1467 1577 -756 1815 1931 -757 1804 1919 -758 1683 1793 -758 1800 1919 -760 1809 1810 -762 1692 1808 -763 5469 5471 -763 1932 1937 -765 1808 1810 -766 1914 1915 -769 1804 1806 -769 1821 1938 -771 1806 1809 -774 1926 1933 -776 1459 1574 -776 1568 1575 -776 1573 1574 -779 4994 5110 -779 5111 5229 -779 5229 5230 -781 1804 1807 -783 1797 1908 -783 1800 1806 -784 5112 5229 -787 1799 1804 -788 1799 1805 -789 1464 1580 -789 1802 1807 -795 1807 1810 -800 1674 1790 -800 1790 1797 -703 2057 5709 -704 5952 6071 -711 1816 1932 -711 1937 1940 -711 2052 5710 -712 1800 1917 -716 1926 1931 -717 2169 5829 -719 2277 2278 -721 1804 1917 -722 1803 1920 -724 2037 2038 -727 1940 2052 -730 1925 1928 -730 1940 2054 -731 1928 1930 -734 2169 5830 -735 1923 1925 -736 1928 1931 -736 1924 2040 -736 2044 2154 -736 2057 5710 -740 1911 1918 -745 1928 1934 -746 1923 1928 -746 1923 1931 -748 1921 2031 -749 1939 1940 -750 2170 2286 -751 1928 2048 -754 1928 2040 -755 1931 1933 -756 1917 1919 -756 1815 1931 -757 1804 1919 -758 1800 1919 -758 1933 2043 -759 1930 2040 -761 2057 5830 -762 1921 2038 -762 2283 2284 -763 1932 1937 -764 2287 2402 -766 1914 1915 -766 2040 2047 -769 1821 1938 -771 2161 2271 -774 1926 1933 -774 2406 2513 -778 2040 2042 -782 1930 1931 -784 2174 5829 -785 1912 2028 -788 2043 2048 -788 2041 2157 -790 1923 1924 -793 1940 2055 -795 2038 2039 -796 2174 5830 -799 1931 1934 -799 1937 1938 -799 2286 2287 -702 5114 5233 -702 5484 5601 -703 5470 5472 -704 5116 5117 -704 5255 5368 -707 5352 5470 -707 5495 5608 -710 5232 5237 -711 5232 5355 -713 5483 5602 -714 5478 5483 -716 5476 5477 -717 5232 5235 -718 5470 5471 -720 5227 5235 -721 5230 5232 -721 5599 5607 -722 5469 5470 -722 5482 5483 -725 5364 5484 -726 5123 5236 -728 1820 5471 -729 5366 5485 -729 5483 5601 -734 5350 5355 -737 5230 5231 -737 5350 5357 -739 5234 5235 -741 5374 5375 -742 5488 5495 -743 1822 5471 -745 5481 5484 -746 5114 5227 -749 5500 5501 -749 5606 5607 -751 5486 5605 -751 5604 5607 -751 5614 5615 -753 5479 5487 -760 5601 5602 -762 5113 5120 -763 5000 5110 -763 5469 5471 -763 5492 5605 -765 5108 5114 -767 5112 5227 -771 5472 5477 -773 5476 5596 -775 5381 5494 -778 5486 5487 -779 4994 5110 -779 5111 5229 -779 5229 5230 -779 5375 5488 -779 5470 5477 -781 5107 5108 -783 5116 5118 -784 5112 5229 -784 5242 5243 -784 5602 5604 -787 5368 5369 -787 5475 5477 -789 5233 5235 -791 5129 5242 -791 5602 5603 -792 5248 5249 -794 5485 5486 -795 5477 5478 -702 5484 5601 -703 2057 5709 -704 5952 6071 -708 5957 5964 -709 5593 5600 -711 2052 5710 -717 2169 5829 -718 5709 5829 -720 5736 5855 -721 5593 5601 -721 5599 5607 -722 5720 5721 -729 5483 5601 -730 5598 5600 -730 5828 5830 -733 5735 5742 -733 5709 5830 -733 5958 6077 -734 2169 5830 -736 2057 5710 -738 5714 5722 -740 5598 5601 -747 5605 5606 -749 5606 5607 -751 5486 5605 -751 5604 5607 -751 5614 5615 -751 5849 5856 -757 5841 5954 -759 5621 5741 -760 5601 5602 -761 5721 5722 -761 2057 5830 -761 5828 5833 -763 5492 5605 -769 5835 5948 -772 5721 5725 -776 5615 5735 -784 5602 5604 -784 2174 5829 -785 5833 5835 -786 5969 5976 -790 5726 5727 -791 5602 5603 -795 5831 5951 -796 2174 5830 -798 5605 5726 -799 5960 5961 -801 1568 1685 -801 1586 5229 -802 1463 1465 -802 1799 1800 -803 4991 5107 -803 1673 1680 -803 1685 1692 -803 5108 5112 -804 1799 1806 -804 1806 1807 -804 1911 1916 -805 1799 1802 -807 1807 1809 -808 1573 1575 -808 1586 1588 -808 5350 5351 -808 5351 5352 -810 1354 1469 -813 4994 5109 -813 1353 1468 -816 1580 1587 -816 1819 1821 -818 5351 5470 -819 1685 1690 -820 1689 1799 -821 1463 1468 -821 1911 1912 -823 1464 1574 -823 1575 1685 -823 1689 1806 -824 1471 5229 -824 1685 1687 -824 1799 1801 -825 1570 1575 -827 1583 1586 -827 1676 1677 -831 1463 1464 -833 1683 1801 -835 1805 1806 -836 5108 5109 -841 1586 1587 -841 1687 1807 -842 1686 1687 -843 1686 1802 -845 1681 1793 -847 1676 1681 -848 1471 5108 -849 1570 1690 -849 1687 1689 -849 1692 1802 -850 1684 1690 -851 1808 1809 -852 1676 1678 -853 1348 1465 -853 1464 1465 -854 1462 1464 -854 1464 1579 -854 1471 1583 -856 1348 1468 -857 1684 1687 -857 1687 1801 -857 1687 1799 -858 1570 1576 -859 1806 1810 -860 1585 5229 -860 1585 1588 -864 1462 1465 -865 1354 5109 -868 1681 1683 -870 1459 1576 -871 1573 1576 -872 1354 1468 -872 1683 1799 -873 1686 1801 -876 1585 1587 -877 1459 1579 -879 1687 1802 -882 1683 1686 -885 1584 1585 -885 1681 1801 -886 1466 5108 -886 1583 1585 -893 4995 5109 -896 1459 1464 -900 1354 1466 -900 1682 1684 -801 2045 2047 -802 2041 2158 -802 2396 2403 -803 1929 1931 -803 2039 2154 -804 1911 1916 -805 2045 2048 -805 2154 2159 -808 2040 2048 -812 1918 1919 -812 2045 2051 -812 2045 2157 -814 2040 2045 -814 2154 2161 -817 1928 1933 -818 1932 1938 -819 1932 1934 -819 2047 2050 -821 1911 1912 -821 2045 2165 -821 2156 2161 -822 2048 2050 -823 2286 5829 -825 2055 5710 -825 2047 2157 -828 2036 2038 -829 2156 2159 -829 2172 5830 -831 2161 2276 -831 2274 2281 -838 2167 2277 -839 1931 1932 -839 2022 2029 -841 1938 1939 -842 2159 2161 -842 2164 2280 -844 2276 2277 -848 2039 2153 -849 6191 6307 -852 2049 2050 -855 2050 2051 -856 2047 2165 -859 2161 2162 -861 5710 5712 -861 2157 2164 -863 5830 5832 -868 2162 2276 -869 2050 2165 -873 2631 6191 -874 5831 5832 -875 2276 2282 -876 2031 2036 -876 2290 2399 -879 2044 2161 -879 5712 5830 -881 2163 2165 -881 2161 2277 -884 2051 2165 -884 2507 2508 -885 2055 5591 -887 2051 2166 -889 2277 2279 -890 2160 2161 -890 2519 2520 -892 1933 1934 -896 2163 2164 -897 2393 2394 -897 2394 2501 -898 2282 2284 -898 2405 5952 -803 4991 5107 -803 5108 5112 -803 5118 5123 -803 5366 5487 -806 5477 5590 -808 5350 5351 -808 5351 5352 -812 5507 5620 -818 5351 5470 -822 5115 5116 -822 5122 5123 -822 5483 5596 -822 5484 5602 -824 5247 5248 -825 5365 5372 -825 5364 5487 -826 5129 5247 -829 5255 5373 -829 5364 5370 -832 5477 5595 -832 5483 5484 -832 5484 5486 -832 5611 5612 -834 5123 5241 -837 5124 5129 -840 5373 5374 -841 5000 5115 -842 5250 5255 -843 5130 5247 -843 5349 5350 -844 5122 5124 -846 5366 5370 -848 5248 5250 -848 5363 5483 -850 5249 5250 -853 5499 5500 -856 5365 5370 -859 5118 5121 -859 5235 5238 -859 5481 5482 -862 5124 5127 -865 5230 5237 -865 5256 5373 -865 5367 5370 -869 4995 5110 -869 5476 5483 -874 5350 5352 -875 5250 5256 -876 5374 5376 -877 5364 5482 -877 5376 5381 -879 5130 5250 -884 5250 5253 -884 5365 5373 -888 5001 5115 -891 5364 5369 -891 5381 5499 -891 5481 5483 -893 4995 5109 -894 4990 4997 -897 4997 5113 -898 5245 5250 -899 4995 5115 -900 5245 5247 -900 5371 5378 -803 5604 5609 -803 5970 6089 -805 5620 5627 -806 5477 5590 -810 5606 5610 -811 6196 6203 -812 5507 5620 -813 5612 5726 -815 6197 6313 -816 5856 5975 -816 6083 6090 -823 2286 5829 -825 2055 5710 -829 2172 5830 -832 5477 5595 -832 5611 5612 -832 5854 5855 -833 6084 6202 -833 6197 6307 -836 5971 5976 -837 5835 5955 -840 5971 6089 -840 6084 6090 -841 5732 5733 -843 5969 5974 -847 5737 5742 -847 5958 6071 -848 6075 6187 -849 6201 6202 -849 6085 6202 -849 6191 6307 -850 5727 5840 -852 5954 5955 -853 5855 5862 -855 5609 5723 -856 5610 5726 -858 6201 6203 -859 5740 5741 -861 5710 5712 -862 5604 5728 -862 5955 6074 -862 5955 5959 -863 5830 5832 -863 5954 5956 -864 5737 5855 -865 5955 5956 -865 5953 6071 -865 6088 6089 -866 5970 6088 -866 6083 6085 -866 6197 6312 -867 5835 5956 -867 5974 5976 -867 6083 6088 -868 5961 5967 -869 6085 6090 -871 5610 5728 -871 5954 5959 -872 5606 5728 -872 5740 5742 -872 5954 6074 -873 5857 5862 -873 6088 6090 -874 5831 5832 -877 5857 5975 -877 5948 5956 -877 6068 6075 -878 6074 6076 -879 5712 5830 -880 5974 5975 -881 5833 5836 -882 6192 6307 -883 5955 6076 -885 2055 5591 -888 5954 5957 -888 6201 6204 -891 6198 6203 -893 5961 6074 -894 5609 5728 -895 6198 6313 -897 5740 5743 -898 5830 5833 -898 5959 5961 -900 6068 6076 -901 1683 1684 -904 1570 1682 -906 1815 1816 -907 1677 1793 -913 1570 1572 -916 1571 1573 -918 1572 1573 -925 1467 1583 -928 1459 1571 -931 1582 1585 -937 1459 1461 -938 1810 1815 -942 1580 1582 -943 1566 1683 -944 1465 1582 -945 1560 1670 -949 1821 1932 -953 1461 1462 -958 1821 1939 -962 1577 1585 -965 1676 1683 -967 1566 1682 -968 1460 1465 -978 1460 1462 -979 1813 1815 -984 1348 1460 -986 1350 1468 -989 1565 1572 -994 1455 1571 -902 2165 2171 -904 2284 2285 -905 2277 2284 -907 2279 2282 -908 6191 6306 -910 2164 2165 -910 2285 2399 -912 1933 2048 -912 2400 2513 -914 2282 2398 -915 2163 2168 -916 2162 2164 -918 2033 2036 -920 2274 2276 -921 2401 2513 -923 2166 2171 -923 2164 2274 -925 1915 1916 -925 2274 2279 -926 2289 2290 -928 2056 2166 -929 1916 2031 -929 5712 5713 -929 2156 2158 -929 2158 2276 -931 2151 2156 -931 2279 2281 -932 2151 2158 -933 2030 2036 -935 2285 2398 -936 2162 2168 -936 2168 2170 -938 2165 2168 -940 2513 2518 -941 2399 2404 -949 1821 1932 -949 2274 2275 -949 2518 2520 -954 2056 2173 -957 2166 2168 -958 1821 1939 -958 5711 5712 -958 2274 2282 -959 2520 6191 -960 2399 2405 -961 2281 2398 -964 1932 1939 -964 1933 1939 -965 2170 2280 -967 2151 2153 -969 2168 2171 -969 2171 2173 -969 2512 2513 -970 2396 2398 -970 2521 2631 -971 1933 2049 -974 5712 5832 -974 2151 2152 -974 5832 5833 -977 2158 2268 -977 6192 6306 -985 2519 2521 -987 2289 5832 -990 2035 2153 -991 2281 2390 -995 5829 5833 -996 5712 5831 -997 2512 2514 -999 2172 2173 -904 5123 5242 -904 5252 5253 -904 5250 5252 -905 5245 5248 -906 5376 5379 -911 5245 5253 -912 5501 5502 -913 5245 5252 -913 5371 5372 -916 5121 5124 -917 5113 5121 -919 5118 5124 -920 5252 5256 -921 5130 5245 -922 5246 5250 -925 5367 5369 -926 5120 5121 -926 5245 5246 -926 5371 5374 -929 5123 5124 -935 5367 5368 -938 5363 5482 -939 5119 5124 -943 5132 5245 -944 5126 5130 -944 5256 5371 -945 5382 5499 -946 5363 5369 -948 5126 5247 -948 5502 5620 -953 5119 5239 -956 5117 5230 -956 5362 5368 -956 5499 5502 -957 5232 5350 -960 4995 5107 -961 5502 5619 -963 5001 5113 -963 5119 5120 -965 5118 5233 -965 5378 5381 -968 5371 5379 -971 5126 5127 -972 5116 5123 -974 5378 5379 -992 5125 5126 -902 5737 5860 -904 5728 5729 -905 5726 5734 -906 5971 6094 -907 5723 5730 -908 5732 5852 -911 5831 5833 -912 5728 5734 -912 5852 5855 -915 5829 5830 -916 5974 5977 -921 5742 5855 -923 5833 5838 -925 5833 5956 -926 5953 5956 -926 6198 6318 -927 5620 5625 -927 5723 5843 -927 5953 5955 -929 5712 5713 -929 5857 5980 -930 5728 5730 -930 5974 5980 -930 6088 6094 -932 6085 6207 -933 5733 5734 -933 5961 6082 -934 6088 6207 -934 6085 6091 -935 5953 6076 -936 5965 6088 -937 5728 5731 -939 5833 5951 -939 6073 6075 -939 6198 6312 -940 5956 6076 -944 6088 6091 -946 5726 5731 -946 5733 5737 -948 5502 5620 -949 5621 5622 -949 5831 5838 -950 5857 5860 -951 5724 5843 -951 6192 6312 -952 5727 5731 -952 5959 5962 -954 5852 5860 -955 6080 6081 -957 5718 5838 -957 5730 5736 -958 5711 5712 -959 5729 5730 -961 5502 5619 -964 5836 5838 -966 5739 5852 -966 5951 5953 -967 5855 5860 -967 6192 6309 -968 5620 5622 -970 5731 5846 -971 5958 6076 -974 5739 5860 -974 5832 5833 -974 5953 5958 -975 5724 5844 -975 5837 5838 -977 5725 5730 -977 6192 6306 -979 5737 5852 -980 5731 5733 -985 5730 5849 -986 5725 5843 -987 6199 6207 -987 2289 5832 -988 5837 5844 -989 5619 5625 -993 5843 5849 -993 6193 6194 -995 5730 5731 -995 5837 5839 -995 5829 5833 -996 5712 5831 -999 5619 5622 -1000 6199 6204 -1004 1460 1461 -1006 1465 1577 -1020 1580 1581 -1026 1574 1581 -1027 1454 1461 -1028 1344 1460 -1033 1579 1580 -1043 1574 1579 -1047 1461 1465 -1047 1465 1579 -1049 1350 1460 -1056 1350 1466 -1057 1681 1684 -1062 1799 1807 -1085 1343 1460 -1086 1574 1576 -1093 1466 4991 -1002 2401 2404 -1004 2170 2288 -1005 2507 2514 -1006 2404 2406 -1007 2172 5832 -1008 2173 2174 -1010 2033 2035 -1010 2405 2406 -1014 5950 5951 -1019 2521 6189 -1021 2521 6191 -1024 2035 2145 -1024 2510 2517 -1028 2396 2401 -1032 2028 2145 -1032 2515 2518 -1034 2162 2282 -1034 2512 2515 -1034 2518 2521 -1039 5829 5950 -1039 2510 2515 -1042 2028 2033 -1047 2167 2168 -1048 2401 2403 -1051 2507 2509 -1057 2509 2512 -1058 2028 2029 -1059 1916 2030 -1060 2401 2407 -1061 2396 2397 -1061 2506 2507 -1062 2174 2289 -1062 2406 2407 -1071 2504 2507 -1073 2517 2518 -1074 5832 5950 -1077 2507 2512 -1080 2274 2277 -1081 2028 2030 -1085 2511 2512 -1086 2403 2510 -1088 2394 2506 -1091 2395 2507 -1092 2162 2277 -1092 2516 2517 -1092 6190 6191 -1093 2166 2173 -1100 2516 2518 -1003 5003 5113 -1006 5252 5365 -1008 5118 5120 -1010 5119 5126 -1014 5251 5252 -1017 5378 5382 -1025 5258 5371 -1037 5126 5245 -1040 5377 5378 -1046 5362 5369 -1047 5498 5502 -1049 5118 5238 -1064 5235 5237 -1073 5382 5497 -1075 5118 5241 -1080 4997 5001 -1088 5497 5502 -1091 4995 4997 -1094 5497 5505 -1095 5236 5237 -1001 5730 5850 -1001 5848 5849 -1004 5730 5848 -1005 6087 6207 -1006 5729 5731 -1007 5739 5858 -1007 5835 5838 -1007 5972 5975 -1008 5622 5740 -1009 5731 5848 -1009 5739 5743 -1010 5727 5730 -1010 5731 5849 -1013 5733 5854 -1014 5950 5951 -1017 5725 5848 -1017 5846 5849 -1019 5731 5736 -1019 5848 5854 -1019 5973 6094 -1019 2521 6189 -1020 5842 5843 -1020 5973 5977 -1020 6087 6091 -1021 5731 5851 -1021 6086 6091 -1023 6086 6094 -1024 5852 5858 -1025 5725 5845 -1026 5849 5854 -1026 5849 5850 -1028 5852 5859 -1029 5736 5854 -1031 5731 5854 -1031 5842 5844 -1034 5849 5851 -1037 5730 5843 -1038 6200 6204 -1039 6198 6310 -1048 5836 5839 -1049 5731 5734 -1049 5842 5845 -1049 5733 5852 -1049 5972 5977 -1053 6068 6073 -1056 5736 5737 -1059 5736 5849 -1059 5737 5854 -1060 5839 5842 -1064 5610 5731 -1067 5727 5848 -1068 5729 5849 -1069 5857 5859 -1071 5841 5842 -1072 5972 5980 -1073 5834 5839 -1074 6200 6318 -1076 5859 5972 -1077 6199 6205 -1078 6194 6312 -1079 5738 5743 -1083 5835 5839 -1084 5972 5978 -1086 6075 6195 -1089 5972 5979 -1089 6193 6310 -1092 5618 5622 -1092 5857 5972 -1092 6190 6191 -1115 1349 1466 -1131 4991 4995 -1133 1574 1575 -1143 1354 4991 -1150 1350 4991 -1154 4990 4991 -1157 4991 4992 -1158 1908 1913 -1167 1905 1906 -1171 1349 4991 -1179 1349 4874 -1180 1905 1910 -1184 4874 4991 -1184 5107 5109 -1186 1349 4992 -1194 1905 1907 -1194 1905 1908 -1197 1574 1580 -1199 4991 5109 -1102 2277 2282 -1105 2167 2282 -1107 1912 2030 -1107 2174 2288 -1107 2400 2507 -1108 5951 5952 -1108 2394 2507 -1110 2510 2511 -1115 2403 2518 -1119 1913 2030 -1120 2174 5950 -1120 2405 2519 -1121 2516 2521 -1122 2041 2159 -1126 5829 5948 -1129 1913 1915 -1133 2407 2518 -1137 1912 2022 -1137 2151 2159 -1138 2166 2283 -1138 2521 6188 -1146 6069 6073 -1152 1910 1912 -1158 1908 1913 -1165 6188 6306 -1167 1905 1906 -1168 1910 1913 -1180 1905 1910 -1181 2407 2519 -1181 6069 6187 -1186 2045 2159 -1187 2174 2286 -1188 2504 2511 -1192 2628 6188 -1194 1905 1907 -1198 2519 6072 -1200 1899 1906 -1200 2039 2159 -1113 5230 5235 -1114 5502 5617 -1117 4996 4997 -1130 5236 5238 -1131 4991 4995 -1136 5249 5368 -1138 5247 5250 -1154 4990 4991 -1155 5384 5497 -1156 5617 5622 -1166 4997 4998 -1171 5250 5367 -1184 5107 5109 -1184 5236 5243 -1185 5617 5625 -1199 5118 5236 -1103 6192 6304 -1108 5951 5952 -1109 6194 6310 -1114 6070 6071 -1114 6070 6076 -1115 5834 5841 -1115 6087 6205 -1119 5972 6092 -1122 5840 5842 -1124 5972 5974 -1126 5829 5948 -1126 5973 6092 -1128 5745 5858 -1130 5725 5840 -1135 5622 5738 -1145 5855 5857 -1146 6069 6073 -1153 5739 5745 -1153 5853 5972 -1156 5617 5622 -1157 6200 6310 -1159 5973 6093 -1160 6086 6093 -1165 5855 5856 -1167 5727 5846 -1174 5738 5745 -1181 6069 6187 -1185 5617 5625 -1186 6070 6073 -1188 5738 5746 -1198 2519 6072 -1200 5721 5840 -1200 5835 5954 -1205 1349 1354 -1214 1809 1920 -1217 1240 1349 -1229 1792 1907 -1229 1792 1908 -1235 1686 1796 -1236 1804 1809 -1244 5109 5112 -1245 1788 1907 -1246 5109 5110 -1246 1809 1925 -1251 1809 1926 -1253 1788 1899 -1254 1350 1354 -1254 1925 1926 -1256 1791 1792 -1278 1348 1350 -1280 1680 1797 -1280 1790 1792 -1288 1680 1796 -1290 1788 1791 -1300 1349 1350 -1205 6188 6304 -1208 2174 5832 -1211 2519 6189 -1214 1809 1920 -1215 2041 2045 -1229 1792 1907 -1243 1926 1927 -1245 1788 1907 -1251 1809 1926 -1253 1788 1899 -1254 1925 1926 -1258 5832 5838 -1259 2042 2045 -1262 2167 2283 -1263 2039 2044 -1267 2040 2041 -1274 1927 1928 -1278 2282 2283 -1282 2166 2167 -1215 5617 5624 -1228 5504 5617 -1231 5236 5241 -1243 5250 5365 -1244 5109 5112 -1246 5109 5110 -1268 5497 5504 -1205 6188 6304 -1211 2519 6189 -1212 6194 6304 -1214 5624 5738 -1215 5617 5624 -1224 6189 6191 -1228 6194 6311 -1258 5832 5838 -1259 6191 6192 -1261 5958 5959 -1269 5726 5728 -1276 6199 6206 -1301 1681 1796 -1305 1790 1795 -1315 1680 1795 -1319 1343 1350 -1323 1681 1795 -1329 1782 1899 -1333 1350 1351 -1354 1789 1795 -1354 1789 1792 -1354 5110 5111 -1355 1675 1795 -1359 1786 1788 -1367 1675 1792 -1372 1787 1790 -1378 1786 1899 -1380 1786 1907 -1390 1782 1893 -1393 1788 1789 -1306 1924 1928 -1309 2519 6191 -1310 1928 2043 -1312 5832 5951 -1313 2165 2167 -1320 2162 2167 -1321 1928 2042 -1329 1782 1899 -1378 1786 1899 -1380 1786 1907 -1316 5111 5112 -1354 5110 5111 -1382 5501 5619 -1384 5501 5620 -1309 2519 6191 -1312 5832 5951 -1317 6200 6316 -1338 5733 5846 -1364 5606 5726 -1368 5619 5620 -1372 5620 5621 -1378 5614 5620 -1382 5501 5619 -1384 5501 5620 -1396 5619 5621 -1403 1782 1901 -1405 1677 1681 -1410 1804 1920 -1415 1787 1789 -1427 1677 1678 -1445 1675 1677 -1447 1787 1788 -1450 5111 5230 -1451 1675 1787 -1472 1671 1787 -1477 1670 1677 -1495 1462 1463 -1499 1469 5110 -1410 1804 1920 -1416 2279 2284 -1425 2044 2159 -1445 2284 2393 -1458 2516 6187 -1472 2031 2038 -1484 2284 2398 -1486 2032 2038 -1488 2042 2043 -1495 1927 2043 -1404 5368 5370 -1430 5006 5116 -1446 5116 5121 -1450 5111 5230 -1479 4999 5116 -1489 5129 5248 -1499 1469 5110 -1416 5621 5740 -1420 5614 5621 -1435 5616 5621 -1439 5733 5853 -1458 2516 6187 -1516 1347 1463 -1520 1781 1788 -1557 1338 1448 -1558 1348 1463 -1580 1560 1678 -1593 1454 1455 -1594 1782 1788 -1598 1564 1678 -1504 2398 2399 -1510 2038 2148 -1512 2033 2038 -1512 6069 6189 -1516 2393 2399 -1521 2284 2399 -1543 2033 2153 -1556 2037 2044 -1567 2038 2154 -1568 2038 2153 -1598 2042 2044 -1598 2504 2509 -1508 5000 5116 -1516 5129 5130 -1530 5127 5130 -1538 5001 5116 -1550 4880 4996 -1567 5128 5129 -1568 5128 5135 -1574 5128 5130 -1589 5009 5125 -1512 6069 6189 -1574 6072 6073 -1606 1459 1462 -1610 1353 1463 -1612 1558 1560 -1618 1553 1670 -1626 1679 1684 -1630 1448 1456 -1631 1684 1686 -1635 1553 1554 -1637 1455 1456 -1642 1553 1558 -1644 1554 1664 -1645 1558 1561 -1654 1557 1673 -1661 1439 1446 -1661 1440 1446 -1664 1440 1556 -1666 1455 1459 -1669 1547 1548 -1671 1553 1555 -1675 1556 1557 -1676 1680 1790 -1678 1673 1674 -1680 1554 1555 -1684 1437 1547 -1685 1564 1679 -1690 1331 1332 -1690 1555 1558 -1690 1679 1685 -1694 1453 1456 -1699 1563 1564 -1620 2275 2390 -1630 2390 2391 -1630 2518 2519 -1630 2506 2509 -1631 2275 2279 -1632 2511 2616 -1637 2390 2392 -1637 2399 2400 -1638 2275 2391 -1640 2397 2504 -1647 2262 2269 -1648 2384 2391 -1649 2505 2509 -1662 2276 2279 -1662 2504 2512 -1664 2029 2030 -1675 2279 2392 -1677 2395 2506 -1677 2505 2616 -1678 2406 2519 -1681 2392 2395 -1683 2263 2378 -1686 2278 2279 -1693 2391 2395 -1698 2506 2508 -1699 2504 2616 -1700 2510 2518 -1603 5121 5123 -1604 5125 5127 -1620 5013 5125 -1628 5009 5013 -1633 5251 5258 -1650 5008 5009 -1655 5010 5013 -1660 5127 5128 -1660 5256 5374 -1669 5122 5128 -1670 5256 5379 -1672 5013 5127 -1673 5008 5010 -1676 5255 5374 -1678 5256 5261 -1679 5012 5128 -1680 4892 5008 -1682 5138 5257 -1682 5255 5261 -1684 5258 5379 -1691 5377 5382 -1693 5254 5255 -1694 5012 5127 -1697 5258 5377 -1700 5254 5256 -1607 6071 6072 -1702 1561 1563 -1704 1569 1679 -1709 1554 1672 -1710 1336 1338 -1715 1437 1555 -1717 1563 1569 -1719 1672 1673 -1720 1556 1561 -1720 1557 1558 -1722 1440 1441 -1723 1441 1555 -1723 1547 1554 -1723 1552 1664 -1724 1329 1445 -1726 1439 1441 -1734 1563 1679 -1741 1439 1444 -1742 1674 1675 -1744 1675 1790 -1745 1441 1556 -1747 1681 1686 -1748 1435 1441 -1749 1435 1437 -1751 1569 1686 -1755 1217 1218 -1756 1329 1444 -1763 1679 1686 -1766 1329 1335 -1770 1438 1441 -1771 1224 1331 -1773 1562 1563 -1776 1670 1671 -1781 1453 1459 -1783 1331 1338 -1791 1437 1438 -1792 1430 1547 -1793 1555 1556 -1794 1436 1438 -1800 1459 1573 -1800 1563 1678 -1701 2394 2395 -1701 2385 2498 -1701 2492 2499 -1703 2030 2033 -1703 2610 2616 -1705 2278 2394 -1710 2027 2029 -1711 2023 2139 -1711 2512 2518 -1714 2506 2618 -1714 2505 2618 -1715 2391 2504 -1715 2407 6189 -1719 2389 2391 -1719 2501 2508 -1722 2250 2257 -1730 2610 2617 -1736 2385 2500 -1737 2504 2506 -1739 2503 2508 -1740 2399 2406 -1742 2389 2506 -1743 2389 2501 -1744 2401 2518 -1745 2401 2406 -1746 2031 2033 -1748 2610 2618 -1752 2503 2618 -1753 2389 2498 -1756 2400 2406 -1757 2391 2392 -1757 2493 2604 -1758 2612 2618 -1759 2389 2500 -1761 2386 2500 -1762 2492 2500 -1762 2504 2505 -1762 2503 2613 -1763 2610 2615 -1764 2615 2618 -1765 2140 2256 -1766 2388 2389 -1767 2611 2721 -1771 2503 2615 -1772 2383 2500 -1772 2502 2508 -1779 2399 2401 -1781 2032 2033 -1784 2492 2497 -1786 2611 2615 -1787 2027 2147 -1787 2387 2388 -1787 2383 2389 -1789 2493 2497 -1790 2502 2613 -1791 2612 2615 -1792 2027 2139 -1792 2386 2388 -1793 2392 2393 -1797 2612 2613 -1800 2391 2506 -1703 5258 5262 -1704 5251 5259 -1710 4896 5008 -1714 5138 5259 -1714 5253 5254 -1715 5377 5384 -1718 5256 5259 -1719 5012 5129 -1720 4891 4898 -1722 5258 5259 -1727 5258 5264 -1730 5010 5011 -1731 5377 5385 -1732 5012 5013 -1733 4896 4898 -1736 5264 5385 -1738 5264 5383 -1739 5011 5012 -1743 5136 5259 -1744 5257 5264 -1747 4896 5016 -1752 5257 5258 -1757 5136 5253 -1758 5136 5254 -1761 5263 5270 -1762 5135 5248 -1765 5135 5253 -1769 5135 5254 -1774 5138 5142 -1774 5251 5256 -1776 5262 5385 -1777 5136 5141 -1780 5000 5001 -1788 5137 5257 -1790 5136 5142 -1795 4898 4899 -1715 2407 6189 -1736 6072 6189 -1756 5957 5958 -1761 6072 6190 -1801 1336 1456 -1811 1430 1431 -1814 1670 1672 -1816 1430 1437 -1816 1554 1558 -1818 1458 1459 -1822 1670 1675 -1823 1430 1435 -1829 1110 1217 -1829 1324 1444 -1829 1457 1458 -1834 1672 1675 -1842 1558 1672 -1846 1456 1459 -1849 1552 1554 -1851 1324 1436 -1854 1552 1558 -1861 1435 1438 -1863 1324 1326 -1866 1675 1789 -1874 1454 1459 -1877 880 887 -1877 1320 1436 -1877 1446 1563 -1878 1671 1675 -1881 1457 1459 -1887 1554 1670 -1888 862 869 -1888 874 881 -1888 1329 1330 -1892 1671 1789 -1893 1304 1311 -1894 1314 1424 -1894 1671 1672 -1897 868 875 -1899 1671 1674 -1802 2721 2723 -1807 2721 2722 -1808 2715 2722 -1817 2383 2386 -1818 2615 2723 -1819 2492 2495 -1821 2032 2147 -1822 2133 2140 -1822 2383 2385 -1825 2406 2518 -1826 2383 2388 -1826 2385 2492 -1827 2381 2386 -1829 2728 2829 -1837 2032 2148 -1837 2272 2381 -1841 2378 2383 -1842 2614 2615 -1844 2721 2726 -1851 2267 2383 -1852 2267 2381 -1853 2244 2251 -1858 2391 2498 -1859 2278 2393 -1862 2726 2728 -1871 2378 2379 -1871 2395 2504 -1875 2134 2250 -1884 2835 2836 -1885 2378 2380 -1886 2267 2380 -1891 2726 2729 -1894 2263 2380 -1898 2612 2614 -1900 2266 2267 -1803 4896 5010 -1806 5130 5135 -1809 5256 5258 -1835 5137 5144 -1836 5269 5270 -1837 5134 5141 -1842 5134 5136 -1844 5137 5142 -1845 5139 5141 -1847 5139 5142 -1848 5027 5144 -1851 5130 5133 -1852 4777 4784 -1853 5250 5373 -1860 4896 5011 -1860 5027 5143 -1863 5137 5140 -1864 5139 5140 -1866 5137 5145 -1877 5027 5145 -1880 5135 5136 -1883 5377 5379 -1886 5026 5033 -1888 4784 4891 -1895 5025 5145 -1898 4891 4899 -1901 1327 1444 -1902 1197 1310 -1902 1670 1678 -1904 1446 1556 -1906 1675 1678 -1908 780 886 -1910 1319 1320 -1913 1673 1675 -1916 1331 1339 -1917 863 971 -1919 683 785 -1920 868 869 -1921 1319 1324 -1921 1678 1680 -1921 1669 1671 -1925 1675 1680 -1928 880 881 -1928 1324 1327 -1935 1671 1781 -1936 1082 1089 -1938 1664 1671 -1941 779 786 -1941 1196 1203 -1942 867 869 -1942 868 870 -1944 1327 1329 -1946 880 882 -1946 1558 1678 -1951 965 972 -1951 1305 1421 -1951 1680 1681 -1955 879 881 -1956 768 874 -1957 864 869 -1957 1321 1327 -1961 1083 1196 -1964 689 785 -1965 1322 1327 -1966 874 876 -1966 1212 1319 -1966 1319 1321 -1969 874 875 -1971 880 885 -1974 780 885 -1975 873 875 -1978 864 971 -1979 689 791 -1983 978 1088 -1983 1205 1206 -1983 1210 1324 -1985 763 870 -1985 1328 1329 -1985 1673 1678 -1986 1415 1422 -1989 1103 1104 -1989 1679 1680 -1995 1210 1212 -1997 780 781 -1997 1304 1309 -1998 970 971 -1999 779 781 -2000 873 876 -1919 2265 2266 -1923 2516 6189 -1927 2931 2932 -1930 2611 2614 -1931 2808 2809 -1932 2263 2372 -1934 2264 2266 -1934 2815 2913 -1937 2261 2263 -1937 2829 2837 -1939 2251 2366 -1944 2259 2265 -1945 2472 2577 -1949 2465 2466 -1949 2502 2607 -1952 2261 2264 -1952 2925 2926 -1954 2352 2459 -1956 2583 2584 -1957 2821 2919 -1958 2257 2372 -1962 2345 2346 -1962 2695 2701 -1963 2257 2373 -1964 2229 2230 -1965 2701 2802 -1965 2829 2836 -1969 2257 2261 -1970 2810 2913 -1972 2256 2261 -1973 2366 2372 -1975 1995 1996 -1975 2144 2261 -1976 2919 2920 -1977 2694 2695 -1977 2726 2837 -1979 2809 2810 -1979 3034 3125 -1982 2257 2374 -1985 2113 2229 -1987 2924 2926 -1989 2257 2366 -1991 2149 2265 -1992 1879 1995 -1992 2230 2345 -1992 2467 2472 -1992 2807 2809 -1993 2913 2918 -1993 3131 3132 -1994 2112 2113 -1994 2577 2582 -1999 2465 2467 -1904 4782 4784 -1907 5031 5143 -1914 5025 5140 -1917 4896 4899 -1917 4896 4901 -1920 5024 5134 -1922 5027 5031 -1923 4784 4785 -1927 4782 4899 -1929 4465 4564 -1931 5024 5139 -1933 4805 4912 -1944 5033 5143 -1948 4452 4453 -1948 5031 5145 -1950 4916 5032 -1951 5024 5141 -1953 4459 4558 -1953 5019 5024 -1957 5033 5034 -1961 5025 5030 -1962 4895 5011 -1964 5024 5140 -1965 4704 4705 -1971 4471 4570 -1974 4894 4900 -1981 4440 4441 -1982 4894 4901 -1989 4680 4686 -1995 4894 4899 -1995 5032 5033 -1998 5024 5030 -2000 4337 4434 -1913 5956 5959 -1923 2516 6189 -1926 5957 5959 -1995 6080 6082 -1999 5965 6082 -2004 684 785 -2004 867 870 -2005 1197 1309 -2011 695 791 -2011 4330 4331 -2012 1643 1650 -2013 1199 1205 -2014 1210 1321 -2015 1532 1539 -2016 1650 1760 -2017 1197 1198 -2017 1206 1319 -2018 970 972 -2018 1533 1649 -2018 1878 1879 -2019 879 882 -2022 689 790 -2022 966 1076 -2023 688 695 -2024 694 4331 -2024 683 784 -2024 876 879 -2026 775 885 -2026 867 976 -2029 1760 1767 -2031 1091 1092 -2034 1210 1327 -2035 870 873 -2035 1761 1878 -2037 690 791 -2037 1206 1210 -2037 1415 1420 -2041 779 784 -2041 1210 1216 -2042 864 973 -2043 778 885 -2043 1070 1077 -2043 1210 1322 -2046 694 695 -2046 1304 1306 -2047 967 972 -2048 865 870 -2050 1215 1322 -2051 878 879 -2051 1760 1765 -2052 970 973 -2052 1305 1306 -2052 1645 1650 -2053 1235 1236 -2054 864 976 -2055 694 696 -2055 1422 1532 -2055 1533 1534 -2059 1532 1537 -2059 1877 1878 -2060 778 781 -2060 1209 1210 -2060 1305 1420 -2062 693 695 -2062 1122 1235 -2063 1196 1197 -2064 1760 1878 -2065 678 784 -2066 1235 1237 -2066 1417 1422 -2067 684 787 -2067 967 1076 -2068 1532 1649 -2069 689 695 -2071 1236 1240 -2071 1532 1534 -2072 684 790 -2072 1417 1537 -2073 1098 1205 -2075 877 879 -2075 1192 1198 -2076 684 784 -2080 4329 4331 -2081 1235 1240 -2082 690 790 -2084 866 870 -2084 1648 1649 -2085 1529 1532 -2085 1648 1650 -2085 1761 1762 -2085 1762 1767 -2086 680 784 -2088 684 782 -2088 690 695 -2089 1531 1534 -2090 1192 1309 -2096 1417 1420 -2097 690 796 -2099 1300 1420 -2099 1534 1648 -2002 2464 2465 -2002 2611 2723 -2004 2259 2264 -2004 2802 2807 -2005 2694 2696 -2006 2695 2696 -2007 2467 2470 -2009 2918 2920 -2010 2693 2694 -2011 2258 2261 -2011 2347 2352 -2011 2696 2802 -2012 2344 2345 -2013 2230 2231 -2013 2352 2464 -2014 2696 2701 -2014 2926 2927 -2015 2584 2688 -2016 3138 3225 -2017 1996 2112 -2017 2113 2114 -2017 2228 2229 -2018 1878 1879 -2018 2582 2584 -2019 2255 2366 -2020 2584 2694 -2020 2584 2585 -2022 2353 2464 -2027 2255 2257 -2028 2810 2912 -2029 1996 1997 -2030 2607 2612 -2031 2579 2582 -2032 2919 2926 -2036 1994 1995 -2036 2345 2347 -2038 2579 2585 -2039 2256 2259 -2039 2467 2582 -2041 2347 2353 -2042 2111 2112 -2046 2347 2350 -2046 2693 2695 -2050 2516 6188 -2051 2231 2344 -2052 2149 2259 -2054 2920 2921 -2055 2585 2693 -2057 1879 1880 -2059 1877 1878 -2061 2696 2804 -2062 2804 2807 -2064 2467 2469 -2065 2137 2247 -2065 2143 2149 -2065 2144 2259 -2066 1997 2111 -2068 2228 2231 -2069 2142 2149 -2070 2609 2612 -2070 2696 2801 -2073 2114 2228 -2074 2462 2467 -2079 2921 3021 -2081 1994 1997 -2082 2111 2114 -2083 1880 1994 -2085 2258 2260 -2086 1877 1880 -2092 2462 2464 -2094 2574 2582 -2096 2609 2611 -2098 2258 2259 -2001 4787 4894 -2005 5023 5025 -2011 4330 4331 -2014 4577 4680 -2015 4464 4465 -2019 5254 5374 -2020 5031 5033 -2023 5031 5151 -2025 4780 4781 -2029 4349 4446 -2034 5023 5024 -2035 4782 4787 -2039 5254 5261 -2040 4783 4785 -2041 4440 4447 -2041 5025 5028 -2043 4672 4783 -2051 4361 4458 -2055 4785 4788 -2060 4686 4687 -2061 4459 4564 -2063 5027 5028 -2066 4687 4693 -2066 5022 5023 -2073 5020 5028 -2089 4459 4563 -2091 5261 5374 -2092 5034 5037 -2094 4676 4783 -2094 5254 5259 -2096 4915 4922 -2099 4907 5017 -2100 4440 4442 -2012 5962 5964 -2042 5964 5965 -2049 5963 5964 -2050 2516 6188 -2102 1760 1762 -2102 1762 1877 -2104 1121 1122 -2104 1207 1210 -2105 693 696 -2105 1075 1076 -2105 1126 1235 -2106 1208 1215 -2107 1240 4874 -2108 1205 1207 -2109 967 1081 -2109 1645 1765 -2112 775 877 -2112 1648 1651 -2114 1195 1196 -2115 1300 1306 -2117 1195 1198 -2118 1759 1762 -2119 1192 1306 -2120 872 873 -2120 968 971 -2120 1096 1207 -2121 1417 1419 -2123 696 4329 -2125 866 976 -2125 1092 1207 -2125 1195 1201 -2125 1645 1651 -2128 690 788 -2129 1092 1199 -2129 1205 1208 -2129 1208 1209 -2130 1092 1205 -2130 1303 1306 -2131 1208 1210 -2132 686 790 -2133 686 782 -2133 871 876 -2133 1207 1208 -2134 1092 1096 -2144 1085 1199 -2147 968 973 -2149 1096 1205 -2152 1101 1214 -2152 1417 1529 -2153 1092 1093 -2154 1240 4875 -2155 1085 1086 -2156 4329 4332 -2159 1646 1648 -2162 975 1086 -2162 1090 1092 -2163 1208 1213 -2164 968 976 -2164 1095 1208 -2166 690 692 -2168 776 784 -2168 1085 1090 -2169 1095 1096 -2170 1530 1534 -2171 975 1079 -2171 981 1085 -2172 1086 1087 -2172 1529 1531 -2174 1122 1126 -2175 1205 1210 -2181 1090 1093 -2181 1100 1107 -2181 1647 1648 -2189 776 781 -2190 1354 4992 -2194 1758 1762 -2195 1010 4648 -2195 1645 1647 -2199 1085 1087 -2102 1762 1877 -2105 2227 2231 -2107 2142 2147 -2108 2250 2255 -2108 2360 2367 -2108 2693 2696 -2111 2142 2259 -2113 2231 2342 -2113 2366 2368 -2114 2349 2464 -2116 2915 2918 -2118 2692 2696 -2120 2226 2231 -2120 2347 2349 -2121 2110 2114 -2123 2342 2350 -2128 2255 2258 -2128 2367 2368 -2131 2226 2227 -2132 2349 2456 -2132 2921 3020 -2133 2227 2342 -2133 2342 2347 -2134 1875 1877 -2134 2342 2349 -2134 2806 2807 -2135 2144 2149 -2135 2806 2810 -2136 2349 2350 -2136 2604 2609 -2137 2691 2693 -2138 2932 3027 -2139 2579 2581 -2142 2349 2353 -2143 1992 1994 -2143 2497 2607 -2145 2114 2226 -2146 1993 1997 -2146 2144 2264 -2148 2581 2693 -2152 2927 3027 -2154 2226 2234 -2157 2462 2463 -2159 2361 2474 -2159 2927 3026 -2160 2696 2799 -2161 2144 2146 -2161 2799 2807 -2162 2109 2114 -2162 2144 2147 -2162 3027 3032 -2165 2109 2226 -2165 2143 2144 -2166 2611 2715 -2169 2116 2226 -2169 2349 2462 -2169 2709 2716 -2170 2348 2349 -2172 2469 2574 -2174 2144 2256 -2175 2253 2258 -2175 2932 3034 -2176 1876 1880 -2178 2226 2233 -2179 3026 3027 -2180 2921 2926 -2182 2256 2258 -2182 3027 3034 -2183 2574 2581 -2185 2365 2367 -2185 2926 3027 -2187 2109 2110 -2189 2139 2144 -2189 2250 2251 -2190 3027 3029 -2192 2139 2142 -2192 2146 2256 -2195 2109 2111 -2195 2605 2715 -2197 2257 2258 -2104 4452 4454 -2106 4669 4774 -2107 4330 4332 -2108 4343 4446 -2108 4907 5022 -2110 5026 5027 -2117 4808 4921 -2118 5133 5136 -2123 5132 5133 -2127 4902 4907 -2128 4785 4787 -2131 4908 5022 -2140 4344 4446 -2140 4780 4787 -2141 4678 4789 -2147 4908 5020 -2149 5374 5379 -2150 4662 4663 -2154 4337 4439 -2154 4900 4901 -2156 4329 4332 -2156 4451 4453 -2156 4678 4684 -2157 5019 5136 -2162 4439 4440 -2163 4332 4337 -2165 4904 4908 -2168 4338 4439 -2169 4335 4439 -2169 4446 4451 -2169 4910 5026 -2170 4337 4440 -2173 4905 5022 -2174 4332 4335 -2175 4454 4459 -2176 4337 4338 -2178 4786 4787 -2182 4900 4902 -2182 4910 5028 -2185 4780 4782 -2190 4902 4905 -2191 4335 4337 -2192 4343 4445 -2193 4437 4440 -2194 4440 4445 -2198 5136 5139 -2109 5965 6083 -2110 5963 6083 -2129 5970 6083 -2140 5979 6092 -2143 5751 5864 -2147 6205 6206 -2150 5741 5742 -2159 6098 6099 -2160 5873 5880 -2169 5744 5745 -2174 5977 6092 -2174 6120 6238 -2177 6202 6203 -2180 6098 6217 -2187 6202 6209 -2188 5870 5871 -2191 5622 5743 -2192 6089 6090 -2192 6092 6100 -2192 6452 6459 -2195 5977 6097 -2198 5745 5746 -2198 6099 6100 -2198 6090 6202 -2200 5743 5746 -2200 6105 6217 -2201 1085 1092 -2201 1240 4992 -2202 1412 1420 -2203 1080 1187 -2208 777 885 -2209 975 1087 -2210 1083 1084 -2211 968 969 -2212 691 696 -2223 1456 1458 -2225 1757 1765 -2226 777 781 -2234 1302 1420 -2239 1084 1195 -2240 777 883 -2252 777 877 -2256 1302 1306 -2256 1757 1762 -2257 1530 1646 -2259 1082 1087 -2260 969 973 -2261 865 872 -2262 686 788 -2264 979 1087 -2264 1529 1530 -2270 969 970 -2271 1758 1875 -2272 692 693 -2273 1640 1646 -2280 1082 1084 -2289 978 1082 -2294 776 783 -2295 871 872 -2202 2605 2609 -2203 2810 2910 -2207 2226 2228 -2208 2257 2263 -2212 2256 2264 -2215 2606 2609 -2219 2143 2258 -2220 2365 2474 -2224 1993 2109 -2225 2910 2918 -2225 3027 3028 -2228 2142 2144 -2233 2251 2252 -2236 2252 2255 -2236 2605 2717 -2238 2031 2032 -2240 2139 2140 -2248 2917 2918 -2249 2139 2141 -2251 2917 2921 -2254 2709 2717 -2258 2025 2031 -2258 2581 2685 -2261 1915 2031 -2266 1875 1876 -2271 1758 1875 -2274 2251 2255 -2275 2805 2806 -2276 2474 2476 -2276 2691 2692 -2280 2921 3018 -2283 2368 2371 -2287 2030 2031 -2288 2921 3026 -2289 1992 1993 -2294 2468 2475 -2294 2698 2799 -2295 1876 1992 -2202 4336 4337 -2206 4338 4445 -2206 4904 4905 -2210 4678 4791 -2211 4676 4791 -2212 4678 4783 -2213 4344 4445 -2216 4899 4901 -2224 5374 5381 -2228 4897 4905 -2229 4678 4682 -2230 4343 4440 -2233 4338 4440 -2235 4344 4448 -2237 4779 4780 -2237 4788 4902 -2241 4330 4337 -2247 4899 4902 -2249 4454 4457 -2253 4336 4440 -2253 4677 4684 -2258 4338 4437 -2260 4448 4451 -2266 4327 4332 -2266 4451 4454 -2266 4669 4779 -2274 4450 4451 -2275 4903 5020 -2281 4443 4451 -2282 4785 4786 -2284 4677 4682 -2291 4910 5020 -2296 5635 5636 -2202 5977 6094 -2202 6440 6447 -2203 5976 6089 -2204 5757 5870 -2205 6446 6453 -2209 6202 6207 -2212 5975 5976 -2212 6452 6453 -2214 6097 6100 -2220 6548 6555 -2221 6099 6103 -2224 6451 6453 -2225 5741 5743 -2226 5744 5749 -2232 6316 6317 -2234 5746 5749 -2235 6103 6217 -2235 6202 6204 -2240 5744 5751 -2240 5749 5752 -2241 6452 6454 -2244 5746 5748 -2247 6232 6239 -2248 6316 6318 -2250 5747 5749 -2255 5741 5748 -2258 5751 5752 -2258 6448 6453 -2260 6344 6458 -2261 6103 6219 -2265 6217 6225 -2266 5766 5885 -2267 6219 6225 -2268 5750 5751 -2268 6005 6012 -2271 5627 5748 -2275 6343 6458 -2277 6094 6095 -2281 5747 5748 -2282 5630 5750 -2283 6095 6097 -2283 6080 6085 -2289 6223 6224 -2290 6224 6225 -2290 6343 6350 -2293 5892 6005 -2294 5885 5886 -2296 5635 5636 -2296 6119 6126 -2296 6343 6349 -2298 6653 6660 -2300 5750 5755 -2301 4762 4763 -2302 1081 1084 -2302 1640 1647 -2305 1757 1764 -2307 1647 1757 -2312 973 975 -2318 866 974 -2318 1126 1237 -2328 1193 1195 -2330 680 782 -2333 685 692 -2334 1301 1306 -2338 1301 1309 -2345 4328 4329 -2346 771 877 -2347 973 976 -2349 973 1087 -2351 1007 1014 -2352 691 692 -2352 1080 1084 -2360 1124 4651 -2363 1007 1008 -2363 1096 1213 -2364 973 978 -2365 1194 1195 -2367 1192 1194 -2374 971 972 -2380 1101 1213 -2383 1007 1009 -2386 971 973 -2391 1013 1014 -2394 1011 1121 -2398 691 4328 -2400 686 692 -2305 2812 2910 -2309 2365 2482 -2310 2495 2502 -2311 2143 2259 -2312 2255 2368 -2331 2586 2593 -2353 2254 2255 -2358 2368 2369 -2361 2513 2520 -2363 2916 2917 -2370 2253 2255 -2374 2253 2260 -2374 2917 2923 -2393 2110 2226 -2398 2513 2625 -2301 4762 4763 -2303 4903 4904 -2306 4344 4443 -2310 4340 4445 -2310 5629 5636 -2313 4332 4334 -2324 4460 4564 -2326 4334 4439 -2326 5141 5254 -2329 4683 4690 -2334 4768 4769 -2340 4899 4900 -2345 4328 4329 -2347 4568 4677 -2347 4657 4762 -2348 4897 4902 -2357 4775 4882 -2368 4460 4566 -2369 5638 5645 -2371 4460 4563 -2375 4897 4898 -2376 4679 4682 -2376 4676 4786 -2378 4779 4781 -2386 4465 4570 -2386 4664 4774 -2394 4327 4328 -2397 4465 4569 -2398 691 4328 -2399 4449 4454 -2302 5752 5755 -2303 6097 6102 -2306 5752 5754 -2306 6090 6207 -2309 5747 5754 -2310 5629 5636 -2310 6222 6225 -2310 6233 6349 -2313 6345 6458 -2315 6006 6125 -2315 6090 6208 -2316 6345 6350 -2319 6224 6228 -2323 5645 5759 -2323 5757 5878 -2324 6094 6096 -2325 6653 6654 -2328 6090 6091 -2330 6102 6219 -2341 5976 6095 -2343 6334 6335 -2348 5752 5753 -2350 5765 5766 -2352 6219 6220 -2353 6348 6350 -2355 6348 6349 -2359 5755 5758 -2362 6457 6458 -2365 5755 5757 -2365 6234 6349 -2366 6340 6341 -2367 6457 6459 -2369 5638 5645 -2370 6224 6340 -2376 6234 6239 -2379 5884 5885 -2386 6096 6097 -2391 6340 6342 -2396 6237 6239 -2397 5640 5645 -2409 1080 1193 -2426 1079 1084 -2433 1121 1123 -2434 1079 1087 -2437 4650 4651 -2451 1413 1529 -2461 1192 1301 -2469 1079 1086 -2469 1641 1647 -2476 1412 1419 -2494 1354 4994 -2496 968 975 -2422 2917 3018 -2425 2474 2475 -2426 2254 2369 -2459 2253 2369 -2467 2368 2370 -2467 2513 2514 -2473 2233 2342 -2486 2365 2370 -2404 4774 4779 -2412 4782 4785 -2413 4460 4569 -2421 4897 4904 -2425 4346 4443 -2426 4466 4570 -2427 5525 5638 -2429 4776 4779 -2434 4779 4782 -2437 4650 4651 -2437 4663 4774 -2440 4327 4431 -2443 4340 4443 -2447 5635 5642 -2448 4768 4770 -2449 4683 4684 -2452 4684 4685 -2455 5635 5640 -2459 4466 4572 -2461 4460 4561 -2464 4773 4779 -2465 4683 4688 -2471 4768 4775 -2477 4664 4773 -2478 4778 4779 -2481 4466 4569 -2485 4663 4773 -2489 4658 4664 -2491 4334 4431 -2492 4663 4664 -2493 4340 4437 -2493 4544 4653 -2494 4462 4569 -2497 4682 4685 -2500 4658 4773 -2405 6218 6328 -2406 6228 6342 -2408 6237 6238 -2408 6345 6463 -2409 6220 6222 -2423 6097 6214 -2423 6121 6238 -2424 6121 6126 -2426 6348 6463 -2438 5766 5767 -2438 6340 6345 -2441 5876 5883 -2442 5976 5977 -2444 6457 6463 -2447 5635 5642 -2455 5635 5640 -2462 6089 6094 -2469 5636 5637 -2472 6455 6456 -2477 5633 5753 -2480 6234 6354 -2485 6228 6345 -2485 6340 6347 -2487 6005 6010 -2490 6124 6126 -2520 1123 1126 -2553 1187 1194 -2561 1010 4538 -2569 1188 1194 -2579 1010 4649 -2588 1301 1303 -2589 1015 4648 -2589 1188 1301 -2591 1302 1418 -2600 978 1087 -2502 2476 2479 -2507 2475 2476 -2519 2476 2588 -2530 2473 2475 -2534 2025 2032 -2537 2365 2477 -2543 2469 2580 -2549 2030 2032 -2557 2473 2580 -2558 2476 2477 -2572 2027 2032 -2575 3018 3020 -2578 2473 2588 -2579 2607 2613 -2584 2032 2142 -2590 2580 2582 -2593 2476 2478 -2503 4567 4569 -2507 4456 4563 -2508 4334 4437 -2512 4462 4567 -2512 4661 4663 -2515 4570 4575 -2516 4771 4779 -2517 4567 4570 -2519 4663 4768 -2519 4664 4771 -2520 4657 4767 -2522 4462 4568 -2524 4561 4569 -2524 4685 4688 -2524 4777 4782 -2531 4767 4769 -2531 4777 4778 -2532 4572 4575 -2537 4660 4664 -2544 4575 4577 -2547 4658 4768 -2552 4657 4768 -2554 4567 4572 -2556 4454 4456 -2556 4658 4661 -2561 1010 4538 -2564 4685 4687 -2569 4660 4773 -2571 4676 4681 -2585 4666 4778 -2589 4666 4771 -2596 4658 4767 -2598 4686 4688 -2599 4780 4786 -2501 6005 6007 -2505 5876 5881 -2507 5882 5883 -2517 5886 5887 -2518 6124 6125 -2519 6006 6007 -2520 6348 6354 -2524 5761 5878 -2524 5876 5878 -2541 5976 6094 -2546 6348 6351 -2554 5742 5861 -2555 6237 6240 -2557 5883 5884 -2568 5742 5743 -2570 5753 5755 -2573 5767 5885 -2575 6347 6348 -2578 6004 6007 -2581 5887 5892 -2583 5881 5884 -2583 6446 6447 -2599 6001 6007 -2605 1096 1208 -2613 1015 1121 -2615 1101 1208 -2628 1015 4761 -2628 1093 1095 -2646 1908 1915 -2654 1240 4877 -2659 1301 1302 -2667 1301 1418 -2688 1295 1301 -2696 1085 1088 -2607 2254 2370 -2617 2469 2582 -2619 2613 2614 -2621 2581 2582 -2646 1908 1915 -2655 2473 2478 -2655 2615 2724 -2662 1909 1915 -2665 2473 2583 -2676 2582 2585 -2685 2364 2477 -2690 1915 2025 -2700 2363 2370 -2611 4655 4767 -2616 4572 4577 -2616 4679 4685 -2620 4449 4450 -2624 4683 4691 -2626 5522 5641 -2628 1015 4761 -2636 4576 4577 -2644 4455 4561 -2644 4570 4577 -2649 4680 4685 -2662 4462 4561 -2670 4573 4580 -2675 4652 4657 -2677 5521 5528 -2679 4658 4765 -2683 4659 4660 -2692 4686 4693 -2694 4675 4786 -2601 6124 6243 -2602 5885 5887 -2604 6124 6127 -2606 6121 6243 -2618 6457 6460 -2619 5887 6010 -2619 5889 6002 -2619 6085 6088 -2626 5522 5641 -2626 5755 5760 -2637 6345 6347 -2641 5753 5873 -2641 5760 5878 -2645 5883 5887 -2648 5753 5754 -2648 5887 6002 -2654 5767 5772 -2656 5887 5890 -2660 5887 5893 -2661 5767 5890 -2663 5765 5772 -2667 6102 6214 -2669 5887 6004 -2687 5651 5771 -2688 5761 5879 -2689 5760 5873 -2717 871 878 -2730 1352 4992 -2738 1015 4649 -2744 901 4538 -2752 906 4538 -2762 1012 4649 -2763 906 4649 -2768 1087 1088 -2769 1015 4651 -2797 1013 4649 -2797 1125 1126 -2704 2025 2030 -2705 1910 2030 -2710 1910 1915 -2745 2027 2030 -2750 1915 2030 -2751 2022 2030 -2752 2473 2582 -2762 2604 2605 -2718 4660 4661 -2720 4572 4574 -2720 4692 4693 -2722 4572 4685 -2723 4456 4555 -2727 4679 4681 -2728 4677 4685 -2736 4456 4561 -2739 4691 4693 -2744 901 4538 -2749 4567 4568 -2749 4688 4691 -2750 4674 4681 -2752 906 4538 -2753 4679 4680 -2756 4555 4561 -2784 4692 4694 -2785 4690 4691 -2791 4691 4694 -2705 6095 6096 -2712 6220 6221 -2715 5889 6010 -2719 5879 5884 -2723 6089 6096 -2723 6096 6102 -2724 5884 5886 -2725 5766 5879 -2737 6214 6220 -2740 6007 6124 -2745 5760 5879 -2752 5889 6008 -2756 6003 6007 -2763 5895 6008 -2763 6122 6124 -2765 6002 6007 -2780 6002 6010 -2799 5893 6008 -2817 901 4432 -2818 1013 1015 -2819 1013 4651 -2820 1238 4875 -2827 1124 4761 -2832 1124 1126 -2832 1126 1238 -2833 4541 4649 -2837 901 4539 -2839 1088 1090 -2847 1012 1013 -2849 906 4539 -2852 1238 4877 -2858 1352 4877 -2872 1238 4763 -2872 1352 4994 -2808 3012 3019 -2812 2471 2478 -2848 3020 3023 -2849 2472 2582 -2854 3019 3020 -2880 3017 3019 -2810 4692 4699 -2814 4677 4683 -2817 901 4432 -2823 4698 4699 -2827 1124 4761 -2832 4694 4697 -2833 4541 4649 -2835 4697 4699 -2848 4574 4677 -2865 4689 4694 -2868 4658 4660 -2873 4705 4810 -2885 4689 4690 -2898 4699 4700 -2811 5893 6010 -2813 5893 6013 -2818 6014 6015 -2842 6002 6009 -2847 5766 5886 -2868 5887 6005 -2870 6003 6122 -2881 6008 6016 -2908 794 4432 -2911 971 976 -2938 1124 4763 -2940 971 978 -2946 869 971 -2958 799 4432 -2969 869 978 -2982 869 976 -2988 794 4431 -2990 799 4539 -2901 2620 2724 -2918 2724 2729 -2934 2472 2583 -2903 4680 4682 -2904 4700 4810 -2906 4689 4696 -2908 794 4432 -2921 4571 4680 -2942 4700 4809 -2958 799 4432 -2966 4680 4687 -2980 4810 4815 -2984 4653 4660 -2988 794 4431 -2990 4572 4680 -2902 5892 6012 -2904 5904 6023 -2907 6015 6016 -2913 5892 6010 -2918 6235 6238 -2922 6123 6127 -2928 6013 6016 -2928 6304 6305 -2929 6017 6024 -2937 6122 6123 -2949 5893 6011 -2950 6002 6122 -2957 6123 6243 -2960 6021 6134 -2973 5892 6011 -2974 6235 6243 -2980 6014 6019 -2983 5891 6011 -2984 5892 5898 -2995 5892 5893 -2995 5898 6011 -2999 6455 6463 -3000 6347 6455 -3014 794 4328 -3039 794 4433 -3073 696 4328 -3090 1353 4994 -3092 906 4541 -3021 2724 2731 -3040 2692 2799 -3014 794 4328 -3021 4654 4765 -3039 794 4433 -3039 4816 4817 -3054 4817 4823 -3073 696 4328 -3075 4650 4652 -3079 4654 4658 -3080 4696 4697 -3092 906 4541 -3002 5891 5898 -3004 6235 6240 -3005 5893 6016 -3006 5891 5892 -3010 5893 5898 -3021 6011 6016 -3025 6016 6018 -3027 6016 6019 -3028 5778 5891 -3028 5885 5891 -3029 6236 6240 -3030 5890 5892 -3030 6454 6459 -3040 6236 6354 -3045 5885 5890 -3052 5896 5898 -3052 6235 6241 -3058 6346 6354 -3068 5772 5885 -3071 6235 6242 -3075 6123 6241 -3075 6346 6351 -3083 6346 6347 -3093 5896 5897 -3096 6455 6460 -3107 904 4539 -3112 799 4433 -3116 906 1013 -3158 1090 1095 -3161 866 968 -3171 1088 1095 -3191 1088 1089 -3141 2729 2731 -3107 4652 4655 -3112 799 4433 -3164 4653 4654 -3188 4654 4655 -3102 5778 5897 -3106 5895 6016 -3118 6346 6352 -3120 6454 6566 -3132 6236 6352 -3135 6089 6091 -3141 6453 6454 -3150 5896 5899 -3155 6445 6447 -3157 6454 6571 -3170 6451 6565 -3184 6448 6560 -3187 5777 5784 -3198 6019 6021 -3213 1013 4650 -3225 1095 1207 -3233 1301 1308 -3213 1013 4650 -3202 6448 6565 -3206 6456 6460 -3209 6454 6565 -3213 6447 6560 -3227 6456 6462 -3233 6456 6571 -3243 6304 6306 -3245 5895 5899 -3246 6561 6671 -3250 6554 6560 -3251 6450 6565 -3267 6559 6560 -3271 6455 6462 -3273 5895 6014 -3278 6557 6560 -3284 6560 6561 -3290 6559 6562 -3294 6557 6565 -3297 6561 6562 -3371 4649 4651 -3383 4649 4652 -3394 1095 1202 -3325 2934 2941 -3337 2935 3036 -3340 2836 2940 -3345 2513 2515 -3327 4680 4681 -3338 4695 4702 -3363 4697 4700 -3369 4695 4696 -3371 5381 5500 -3383 4649 4652 -3305 6557 6562 -3311 6564 6565 -3313 6561 6670 -3316 6450 6557 -3320 6563 6564 -3326 6557 6564 -3327 6345 6348 -3329 6563 6565 -3333 6563 6571 -3334 5894 5899 -3334 6558 6562 -3336 6561 6665 -3353 6346 6461 -3355 6563 6568 -3357 6346 6353 -3363 6555 6665 -3367 6456 6569 -3368 6558 6564 -3379 5894 5901 -3382 6556 6665 -3464 696 4433 -3489 1302 1412 -3414 3029 3032 -3424 2728 2837 -3425 3029 3034 -3432 3125 3130 -3435 3130 3132 -3408 5381 5387 -3421 4680 4792 -3427 5379 5382 -3431 4695 4700 -3460 5381 5382 -3464 696 4433 -3482 5380 5381 -3494 5379 5380 -3417 6555 6666 -3418 6556 6670 -3466 6222 6227 -3476 6563 6570 -3477 6664 6665 -3489 6343 6345 -3500 6552 6662 -3508 1295 1412 -3509 1300 1302 -3529 1085 1093 -3531 799 4435 -3542 797 4433 -3546 975 1085 -3569 979 1085 -3512 3131 3133 -3527 3127 3130 -3574 2836 2840 -3583 2940 2942 -3590 2834 2837 -3524 4698 4700 -3528 5262 5379 -3531 799 4435 -3537 5261 5380 -3542 797 4433 -3544 5261 5381 -3549 4702 4703 -3552 5261 5379 -3560 4700 4703 -3563 4592 4701 -3581 4701 4703 -3595 4592 4598 -3598 4703 4706 -3505 6342 6343 -3515 5781 5900 -3518 6227 6342 -3521 6651 6752 -3526 6343 6344 -3528 5894 5902 -3528 6659 6666 -3540 5781 5902 -3540 6664 6666 -3555 6664 6667 -3560 6659 6660 -3561 5779 5902 -3561 6661 6666 -3563 6660 6666 -3577 6658 6660 -3585 5780 5787 -3588 6758 6759 -3598 6558 6670 -3601 1302 1303 -3608 3030 3037 -3623 2836 2837 -3625 2939 2941 -3625 2941 3036 -3642 2941 2942 -3653 2840 2942 -3663 2941 3044 -3676 3037 3134 -3680 3049 3140 -3685 3042 3043 -3687 2942 2945 -3611 4591 4598 -3618 4698 4705 -3630 4596 4701 -3639 4596 4598 -3646 4596 4706 -3674 4703 4705 -3676 4596 4709 -3694 4492 4591 -3602 5779 5897 -3606 5781 5785 -3614 6662 6664 -3615 6655 6660 -3617 6556 6662 -3623 5780 5785 -3632 6659 6661 -3642 5780 5786 -3647 5666 5786 -3647 6558 6668 -3655 5782 5785 -3665 5672 5786 -3673 5779 5784 -3691 5780 5788 -3694 5666 5788 -3696 5672 5792 -3702 1013 4541 -3739 3146 3147 -3748 3042 3044 -3755 3147 3240 -3771 3036 3038 -3775 3047 3049 -3781 2739 6420 -3787 3031 3128 -3796 2942 2943 -3702 1013 4541 -3711 4704 4706 -3713 4591 4599 -3721 4485 4492 -3737 4490 4492 -3748 4704 4709 -3771 4490 4599 -3774 4596 4599 -3776 4388 4492 -3782 4594 4599 -3785 4388 4491 -3800 4704 4711 -3701 5670 5786 -3718 5664 5788 -3722 6305 6419 -3726 5782 5784 -3726 6227 6337 -3737 5672 5794 -3748 6661 6667 -3750 5670 5788 -3769 6305 6309 -3775 5783 5785 -3781 2739 6420 -3797 5672 5676 -3810 2832 2837 -3815 3140 3148 -3817 2740 2847 -3822 3147 3151 -3824 2945 3044 -3834 3044 3050 -3836 3042 3047 -3839 3235 3322 -3844 3047 3050 -3845 3234 3241 -3849 3047 3148 -3850 3044 3047 -3852 3042 3050 -3852 3147 3148 -3853 3042 3049 -3853 3047 3052 -3855 3045 3050 -3856 3043 3047 -3857 2944 2945 -3857 3045 3047 -3858 2945 3042 -3858 3050 3052 -3863 2945 3045 -3865 3145 3148 -3866 3143 3148 -3874 2941 2947 -3875 2943 2944 -3879 2944 2950 -3880 2947 3042 -3880 3051 3052 -3887 2941 2945 -3889 2940 2941 -3892 3052 3053 -3895 2950 3045 -3895 3234 3242 -3898 3147 3242 -3801 4596 4601 -3803 4492 4493 -3803 4495 4599 -3820 4491 4493 -3822 4594 4601 -3827 5671 5676 -3829 4493 4496 -3850 5673 5794 -3856 4392 4491 -3858 4601 4704 -3863 4495 4496 -3865 4704 4710 -3871 4387 4394 -3886 4392 4394 -3890 5677 5684 -3897 4493 4499 -3812 5678 5792 -3813 5669 5788 -3816 6306 6309 -3818 5783 5788 -3824 5663 5784 -3827 5671 5676 -3839 5678 5798 -3843 5670 5794 -3843 5783 5784 -3850 5673 5794 -3864 5676 5792 -3864 5678 5800 -3878 5676 5678 -3880 5678 5682 -3881 5670 5789 -3890 5677 5684 -3891 5676 5794 -3933 1295 1302 -3987 859 860 -3904 2838 2839 -3909 3145 3242 -3912 2839 2840 -3914 3145 3150 -3914 3239 3241 -3919 3239 3242 -3922 2837 2839 -3922 3143 3149 -3923 3237 3242 -3937 3150 3237 -3944 3052 3143 -3944 3143 3150 -3951 3322 3324 -3952 2839 2943 -3952 3322 3323 -3956 3145 3237 -3957 3239 3322 -3965 3239 3330 -3973 3242 3244 -3982 3323 3404 -3987 2726 2731 -3988 3046 3052 -3991 3239 3244 -3992 3322 3327 -3993 2731 2832 -3994 3052 3149 -3996 3045 3052 -3996 3322 3325 -3999 3052 3148 -3901 4392 4499 -3903 5677 5682 -3909 4495 4600 -3925 4494 4496 -3931 5683 5684 -3953 4295 4393 -3961 4494 4499 -3964 5684 5685 -3973 5679 5682 -3973 5562 5682 -3981 4394 4395 -3991 4494 4501 -3991 5682 5685 -3992 5683 5690 -3996 4393 4395 -3903 5677 5682 -3905 5676 5797 -3908 5783 5790 -3914 5676 5800 -3921 5675 5794 -3930 5676 5795 -3931 5683 5684 -3939 6558 6669 -3940 6558 6662 -3941 5783 5789 -3948 6661 6664 -3949 6647 6654 -3954 5676 5681 -3964 5684 5685 -3971 6663 6664 -3973 5562 5682 -3973 5679 5682 -3973 6658 6661 -3977 5669 5789 -3988 6468 6575 -3989 6656 6663 -3991 5682 5685 -3992 5683 5690 -4007 2923 3026 -4010 3327 3329 -4011 3327 3330 -4012 2923 3025 -4014 3404 3405 -4020 2923 3018 -4025 3237 3244 -4033 3325 3330 -4040 3238 3244 -4044 3404 3406 -4048 3013 3110 -4053 3244 3325 -4063 3323 3327 -4012 4395 4398 -4016 4394 4397 -4019 5683 5688 -4023 4397 4499 -4034 5570 5689 -4044 4294 4301 -4053 4397 4398 -4062 5568 5688 -4065 5685 5688 -4082 4299 4393 -4094 4397 4500 -4019 5683 5688 -4028 6569 6570 -4029 6661 6663 -4045 6569 6680 -4053 6019 6022 -4055 6581 6582 -4055 6663 6764 -4062 5568 5688 -4062 6569 6571 -4062 6576 6680 -4065 5685 5688 -4068 5675 5789 -4082 6021 6142 -4084 6570 6574 -4085 6569 6574 -4096 5680 5682 -4097 6680 6688 -4099 6574 6680 -4128 696 4331 -4141 797 4331 -4150 797 4435 -4102 3327 3404 -4105 3024 3026 -4112 3327 3412 -4117 3405 3480 -4119 3405 3409 -4121 3406 3412 -4133 3404 3409 -4154 3024 3029 -4158 3474 3481 -4161 3406 3409 -4168 2508 2613 -4170 3327 3332 -4198 3029 3031 -4102 4299 4301 -4124 4299 4401 -4147 4207 4300 -4147 5576 5689 -4148 5683 5691 -4149 5679 5681 -4150 797 4435 -4151 5574 5689 -4153 4396 4398 -4154 5570 5691 -4158 4331 4433 -4163 5685 5687 -4164 4294 4302 -4166 4331 4435 -4167 4331 4332 -4174 5568 5691 -4182 4331 4434 -4197 5574 5691 -4106 5675 5795 -4108 6574 6682 -4112 6680 6683 -4115 6017 6019 -4117 6022 6142 -4117 6021 6140 -4117 6680 6685 -4119 6570 6680 -4120 6680 6682 -4123 6027 6140 -4123 6570 6571 -4130 6764 6771 -4132 6460 6571 -4135 6674 6680 -4136 6568 6571 -4137 6681 6788 -4138 6681 6685 -4140 6025 6140 -4142 6687 6788 -4147 5576 5689 -4148 5683 5691 -4149 5679 5681 -4151 5574 5689 -4151 6680 6681 -4154 5570 5691 -4163 5685 5687 -4165 6025 6142 -4166 6685 6687 -4168 6685 6688 -4174 5568 5691 -4174 6146 6147 -4176 6080 6199 -4176 6661 6772 -4180 6764 6772 -4182 6140 6148 -4183 6573 6574 -4187 6794 6795 -4189 6687 6795 -4190 6019 6024 -4195 6147 6148 -4197 5574 5691 -4201 962 969 -4210 1440 1555 -4204 3029 3130 -4209 3325 3332 -4227 3133 3138 -4239 3130 3133 -4253 3024 3025 -4271 3405 3482 -4282 3327 3407 -4290 3474 3482 -4238 5576 5695 -4246 5674 5681 -4259 5582 5695 -4275 5576 5697 -4294 5574 5694 -4299 5574 5697 -4211 6788 6796 -4214 6687 6796 -4219 6146 6265 -4220 6571 6573 -4226 6566 6571 -4232 6024 6142 -4233 6682 6683 -4237 6795 6799 -4238 5576 5695 -4241 6794 6899 -4242 6794 6796 -4245 6147 6151 -4246 5674 5681 -4249 6795 6899 -4254 6017 6018 -4258 6145 6148 -4259 5582 5695 -4266 6691 6796 -4275 5576 5697 -4278 6153 6265 -4286 6683 6684 -4287 6899 6900 -4291 6899 6901 -4294 5574 5694 -4296 6142 6143 -4296 6151 6265 -4299 5574 5697 -4300 6683 6685 -4301 3138 3230 -4302 3129 3130 -4306 3122 3130 -4317 3133 3136 -4345 3406 3407 -4352 3406 3482 -4364 3403 3482 -4370 3231 3232 -4302 4206 4213 -4308 4299 4302 -4309 5582 5701 -4339 4396 4401 -4340 4301 4302 -4349 5580 5695 -4384 4300 4302 -4388 4301 4304 -4390 5582 5703 -4305 6151 6267 -4306 6796 6799 -4306 6799 6901 -4326 6271 6272 -4328 6024 6137 -4337 6899 6904 -4337 6906 7000 -4341 6265 6273 -4349 5580 5695 -4360 6573 6683 -4360 6685 6690 -4363 6272 6273 -4365 6143 6145 -4368 6796 6797 -4368 6904 6906 -4369 5680 5681 -4375 5680 5687 -4397 6690 6796 -4405 3128 3133 -4408 3479 3481 -4411 3475 3543 -4455 3326 3332 -4457 3479 3482 -4458 3138 3231 -4476 3481 3543 -4497 3408 3409 -4408 5685 5686 -4431 5573 5691 -4433 5568 5686 -4447 5580 5697 -4472 4302 4305 -4474 5586 5701 -4477 5574 5692 -4479 4302 4308 -4480 5580 5700 -4408 5685 5686 -4416 6661 6767 -4417 7006 7007 -4425 6278 6388 -4431 5573 5691 -4433 5568 5686 -4434 6145 6150 -4434 6904 6907 -4439 6904 6910 -4442 6150 6267 -4443 6453 6459 -4445 6272 6276 -4447 5580 5697 -4451 5686 5688 -4452 5686 5691 -4456 6798 6799 -4464 6143 6144 -4465 6276 6388 -4465 7000 7008 -4467 6459 6566 -4470 6572 6573 -4470 6904 7008 -4474 6901 6902 -4475 7000 7007 -4477 7007 7097 -4480 5580 5700 -4480 6270 6273 -4485 6904 6909 -4487 6265 6268 -4489 5686 5687 -4492 6902 6904 -4500 7005 7007 -4502 3326 3407 -4508 3144 3237 -4518 3408 3483 -4524 3128 3129 -4533 3031 3122 -4534 3144 3231 -4550 3479 3551 -4559 3139 3231 -4566 3139 3230 -4567 3407 3408 -4567 3408 3482 -4568 3144 3236 -4573 3477 3482 -4596 3479 3543 -4598 3142 3236 -4507 4211 4300 -4530 4211 4213 -4535 5580 5703 -4555 5586 5703 -4568 4304 4401 -4585 5586 5707 -4586 4211 4308 -4511 7005 7008 -4512 6267 6268 -4519 6276 6390 -4521 7003 7008 -4526 7097 7105 -4536 7005 7105 -4545 6690 6791 -4547 7097 7104 -4553 7103 7104 -4554 7102 7105 -4556 6660 6661 -4563 6268 6270 -4564 6797 6798 -4572 6798 6902 -4572 7104 7188 -4574 7102 7104 -4580 6150 6262 -4587 5686 5693 -4595 6902 6903 -4598 7194 7195 -4627 904 4541 -4660 904 4435 -4667 1413 1523 -4672 962 963 -4691 854 963 -4699 962 967 -4609 3145 3236 -4610 3543 3545 -4618 3139 3236 -4618 3537 3544 -4641 3133 3135 -4645 3139 3228 -4663 3479 3484 -4667 3141 3236 -4667 3544 3545 -4676 3135 3139 -4686 3477 3484 -4606 4327 4334 -4627 904 4541 -4636 4235 4327 -4645 5572 5692 -4655 4327 4335 -4660 904 4435 -4667 4213 4214 -4692 5573 5692 -4616 6394 6395 -4635 7188 7196 -4647 7005 7010 -4653 7102 7196 -4657 7100 7105 -4669 6388 6396 -4674 6903 6909 -4674 7188 7195 -4688 6909 7003 -4699 7003 7010 -4711 967 970 -4718 1406 1407 -4735 854 956 -4742 963 964 -4746 848 854 -4754 956 964 -4762 852 956 -4765 961 964 -4770 964 967 -4788 964 966 -4790 965 967 -4710 3542 3544 -4720 3545 3548 -4730 3135 3136 -4733 3544 3597 -4743 3141 3228 -4746 3234 3236 -4766 3134 3135 -4766 3546 3551 -4789 3545 3605 -4794 3484 3546 -4706 4141 4228 -4708 5579 5697 -4711 5579 5692 -4721 4233 4235 -4723 4228 4235 -4739 4233 4335 -4744 4228 4236 -4763 4134 4141 -4776 4233 4236 -4776 5585 5703 -4779 4139 4141 -4789 4330 4335 -4708 5579 5697 -4710 6395 6396 -4710 7102 7107 -4755 7193 7196 -4767 7189 7273 -4768 7191 7196 -4780 7195 7196 -4782 7201 7279 -4792 6270 6275 -4801 959 964 -4806 848 950 -4807 965 966 -4813 848 956 -4825 848 958 -4832 852 854 -4833 852 964 -4840 852 958 -4858 846 848 -4888 841 846 -4891 841 842 -4895 852 959 -4898 959 965 -4802 3234 3235 -4804 3597 3604 -4807 3546 3548 -4808 3546 3553 -4828 3598 3604 -4831 3128 3135 -4831 3597 3605 -4836 3542 3605 -4841 3234 3239 -4851 3547 3548 -4857 3542 3602 -4859 3547 3605 -4864 3602 3604 -4872 3600 3605 -4873 3597 3602 -4879 3604 3645 -4883 3602 3605 -4900 3645 3652 -4807 4053 4134 -4808 4139 4236 -4828 5698 5703 -4839 4134 4142 -4840 4233 4238 -4884 5585 5704 -4892 4231 4236 -4896 4238 4330 -4802 5697 5698 -4808 6275 6390 -4809 6393 6396 -4809 7193 7199 -4809 7195 7199 -4811 7196 7198 -4828 5698 5703 -4829 7199 7281 -4830 7010 7100 -4833 7285 7286 -4836 6269 6275 -4844 6268 6269 -4845 6150 6269 -4857 7107 7191 -4867 7199 7279 -4873 7279 7287 -4876 5698 5700 -4883 7198 7199 -4884 5585 5704 -4896 6395 6399 -4899 7286 7287 -4904 857 959 -4906 851 852 -4908 850 959 -4910 846 849 -4914 851 959 -4917 1758 1869 -4922 849 851 -4938 850 851 -4943 1758 1877 -4945 841 843 -4952 735 842 -4963 843 849 -4971 735 835 -4979 844 851 -4990 735 843 -4925 3645 3653 -4943 1758 1877 -4949 3602 3653 -4958 3605 3607 -4972 3646 3678 -4979 3645 3650 -4985 3602 3650 -4985 3646 3650 -4995 3647 3650 -4998 3645 3648 -4939 4231 4238 -4947 4139 4142 -4910 7100 7107 -4926 7284 7287 -4935 7286 7364 -4937 7199 7282 -4940 7286 7290 -4963 5698 5705 -4967 7364 7365 -4981 7364 7366 -4984 6275 6385 -4991 7282 7287 -5002 739 843 -5011 736 843 -5018 1752 1869 -5022 1756 1869 -5027 844 846 -5031 1752 1863 -5036 733 735 -5036 1752 1871 -5044 844 845 -5065 1756 1877 -5072 1746 1863 -5073 1756 1871 -5076 843 844 -5084 733 835 -5015 3646 3679 -5017 3602 3607 -5030 3547 3606 -5034 3600 3607 -5036 1752 1871 -5048 3675 3679 -5065 1756 1877 -5065 2336 2343 -5073 1756 1871 -5084 3602 3648 -5036 5586 5704 -5032 7371 7436 -5036 5586 5704 -5049 7290 7366 -5088 7364 7369 -5102 733 843 -5118 729 835 -5121 1750 1863 -5101 3648 3653 -5104 3648 3650 -5119 3644 3679 -5148 3649 3650 -5154 3648 3655 -5161 3649 3679 -5187 3607 3648 -5188 2227 2344 -5127 4396 4403 -5185 4299 4304 -5119 7287 7289 -5127 7369 7371 -5130 7191 7197 -5131 5698 5699 -5154 7436 7443 -5168 6655 6761 -5171 6390 6391 -5193 7369 7372 -5243 3677 3679 -5291 3649 3680 -5224 4304 4396 -5263 4125 4206 -5217 7197 7198 -5243 7289 7290 -5252 7204 7282 -5258 7369 7443 -5299 7289 7295 -5310 4206 4214 -5372 4118 4125 -5311 7366 7367 -5314 7288 7289 -5346 6766 6772 -5360 7367 7369 -5365 7369 7374 -5373 7289 7367 -5418 728 735 -5478 632 728 -5481 733 736 -5489 728 736 -5406 4123 4125 -5414 4304 4305 -5439 4118 4124 -5459 4304 4403 -5463 4211 4214 -5478 4208 4214 -5482 4042 4124 -5496 4123 4214 -5415 7441 7443 -5529 1761 1877 -5542 738 843 -5529 1761 1877 -5509 4123 4129 -5523 4118 4126 -5526 4123 4126 -5546 4302 4303 -5564 4304 4402 -5568 4042 4118 -5583 4211 4216 -5506 7439 7443 -5521 7367 7368 -5557 7374 7439 -5602 4211 4303 -5612 4209 4214 -5616 4041 4126 -5617 4297 4303 -5621 4042 4045 -5627 4123 4128 -5628 4042 4126 -5634 4210 4303 -5659 4043 4045 -5662 4303 4304 -5696 4043 4044 -5789 630 728 -5789 630 733 -5795 738 838 -5715 4121 4126 -5849 733 738 -5856 732 738 -5833 4209 4216 -5888 4044 4126 -5909 731 733 -5941 731 732 -5944 630 730 -5946 625 626 -5951 626 630 -5956 730 731 -5959 627 730 -5973 626 627 -5983 629 730 -5988 619 626 -5917 4121 4128 -6013 629 725 -6037 619 624 -6039 624 627 -6050 619 620 -6063 624 629 -6083 519 620 -6009 4044 4045 -6013 4044 4127 -6052 4128 4209 -6228 620 621 -6242 621 624 -6250 4046 4047 -6259 622 624 -6292 519 613 -6250 4046 4047 -6337 618 621 -6354 613 621 -6364 621 623 -6378 622 623 -6445 616 621 -6514 517 613 -6539 6275 6391 -6656 517 615 -6724 513 517 -6760 517 616 -6765 512 513 -6784 506 512 -6792 513 514 -6801 522 616 -6831 516 517 -6853 506 514 -6854 515 616 -6877 511 514 -6885 417 506 -6908 514 516 -6921 415 506 -6942 515 516 -6947 411 506 -6959 509 515 -6966 509 514 -7022 411 500 -7023 420 509 -7043 411 508 -7047 415 508 -7068 412 508 -7093 415 509 -7099 409 500 -7102 413 509 -7135 409 502 -7160 414 508 -7161 409 508 -7174 409 503 -7175 409 411 -7177 409 415 -7180 414 509 -7185 409 414 -7194 409 412 -7173 6274 6281 -7231 414 503 -7204 6280 6281 diff --git a/fortran/lammps.f90 b/fortran/lammps.f90 index 1617891b92..a2f28073e5 100644 --- a/fortran/lammps.f90 +++ b/fortran/lammps.f90 @@ -542,6 +542,14 @@ MODULE LIBLAMMPS INTEGER(c_int) :: lammps_extract_atom_datatype END FUNCTION lammps_extract_atom_datatype + FUNCTION lammps_extract_atom_size(handle, name, dtype) BIND(C) + IMPORT :: c_ptr, c_int + IMPLICIT NONE + TYPE(c_ptr), INTENT(IN), VALUE :: handle, name + INTEGER(c_int), INTENT(IN), VALUE :: dtype + INTEGER(c_int) :: lammps_extract_atom_size + END FUNCTION lammps_extract_atom_size + FUNCTION lammps_extract_atom(handle, name) BIND(C) IMPORT :: c_ptr IMPLICIT NONE @@ -1435,7 +1443,7 @@ CONTAINS IF (SIZE_TAGINT == 8) THEN Cptr = C_LOC(id) ELSE - id32 = id + id32 = INT(id, c_int) Cptr = C_LOC(id32) END IF lmp_map_atom_big = lammps_map_atom(self%handle, Cptr) + 1 @@ -1461,43 +1469,35 @@ CONTAINS ntypes = lmp_extract_setting(self, 'ntypes') Cname = f2c_string(name) datatype = lammps_extract_atom_datatype(self%handle, Cname) + nrows = lammps_extract_atom_size(self%handle, Cname, LMP_SIZE_ROWS) + ncols = lammps_extract_atom_size(self%handle, Cname, LMP_SIZE_COLS) Cptr = lammps_extract_atom(self%handle, Cname) CALL lammps_free(Cname) - SELECT CASE (name) - CASE ('mass') - ncols = ntypes + 1 - nrows = 1 - CASE ('x','v','f','mu','omega','torque','angmom') - ncols = nmax - nrows = 3 - CASE DEFAULT - ncols = nmax - nrows = 1 - END SELECT - peratom_data%lammps_instance => self SELECT CASE (datatype) CASE (LAMMPS_INT) peratom_data%datatype = DATA_INT_1D - CALL C_F_POINTER(Cptr, peratom_data%i32_vec, [ncols]) + CALL C_F_POINTER(Cptr, peratom_data%i32_vec, [nrows]) CASE (LAMMPS_INT64) peratom_data%datatype = DATA_INT64_1D - CALL C_F_POINTER(Cptr, peratom_data%i64_vec, [ncols]) + CALL C_F_POINTER(Cptr, peratom_data%i64_vec, [nrows]) CASE (LAMMPS_DOUBLE) peratom_data%datatype = DATA_DOUBLE_1D + ! The mass array is allocated from 0, but only used from 1. We also want to use it from 1. IF (name == 'mass') THEN - CALL C_F_POINTER(Cptr, dummy, [ncols]) + CALL C_F_POINTER(Cptr, dummy, [nrows]) peratom_data%r64_vec(0:) => dummy ELSE - CALL C_F_POINTER(Cptr, peratom_data%r64_vec, [ncols]) + CALL C_F_POINTER(Cptr, peratom_data%r64_vec, [nrows]) END IF CASE (LAMMPS_DOUBLE_2D) peratom_data%datatype = DATA_DOUBLE_2D ! First, we dereference the void** pointer to point to the void* - CALL C_F_POINTER(Cptr, Catomptr, [ncols]) + CALL C_F_POINTER(Cptr, Catomptr, [nrows]) ! Catomptr(1) now points to the first element of the array - CALL C_F_POINTER(Catomptr(1), peratom_data%r64_mat, [nrows,ncols]) + ! rows and columns are swapped in Fortran + CALL C_F_POINTER(Catomptr(1), peratom_data%r64_mat, [ncols,nrows]) CASE (-1) CALL lmp_error(self, LMP_ERROR_ALL + LMP_ERROR_WORLD, & 'per-atom property ' // name // ' not found in extract_setting') @@ -2604,6 +2604,8 @@ CONTAINS TYPE(c_ptr) :: Cid, Ctype, Cx, Cv, Cimage INTEGER(c_int) :: tagint_size, atoms_created + Ctype = c_null_ptr + Cx = c_null_ptr ! type is actually NOT optional, but we can't make id optional without it, ! so we check at run-time IF (.NOT. PRESENT(type)) THEN diff --git a/lib/gpu/Makefile.aurora b/lib/gpu/Makefile.aurora new file mode 100644 index 0000000000..c343e061ee --- /dev/null +++ b/lib/gpu/Makefile.aurora @@ -0,0 +1,31 @@ +# /* ---------------------------------------------------------------------- +# Generic Linux Makefile for OpenCL +# ------------------------------------------------------------------------- */ + +# which file will be copied to Makefile.lammps + +EXTRAMAKE = Makefile.lammps.opencl + +# OCL_TUNE = -DFERMI_OCL # -- Uncomment for NVIDIA Fermi +# OCL_TUNE = -DKEPLER_OCL # -- Uncomment for NVIDIA Kepler +# OCL_TUNE = -DCYPRESS_OCL # -- Uncomment for AMD Cypress +OCL_TUNE = -DGENERIC_OCL # -- Uncomment for generic device + +# this setting should match LAMMPS Makefile +# one of LAMMPS_SMALLBIG (default), LAMMPS_BIGBIG and LAMMPS_SMALLSMALL + +LMP_INC = -DLAMMPS_SMALLBIG + +OCL_INC = -I/opt/intel/oneapi/compiler/latest/linux/include/sycl/ # Path to CL directory +OCL_CPP = mpicxx -cxx=icpx -DCUDA_PROXY $(DEFAULT_DEVICE) -xHost -O2 -ffp-model=fast -qoverride-limits -DMPI_GERYON -DGERYON_NUMA_FISSION -DUCL_NO_EXIT -DMPICH_IGNORE_CXX_SEEK $(LMP_INC) $(OCL_INC) -DGERYON_NO_PROF +OCL_LINK = -L/opt/intel/oneapi/compiler/latest/linux/lib/ -lOpenCL +OCL_PREC = -D_SINGLE_DOUBLE + +BIN_DIR = ./ +OBJ_DIR = ./ +LIB_DIR = ./ +AR = ar +BSH = /bin/sh + +include Opencl.makefile + diff --git a/lib/gpu/lal_neighbor.cpp b/lib/gpu/lal_neighbor.cpp index 10816e2fa6..288415e0e7 100644 --- a/lib/gpu/lal_neighbor.cpp +++ b/lib/gpu/lal_neighbor.cpp @@ -586,8 +586,25 @@ void Neighbor::build_nbor_list(double **x, const int inum, const int host_inum, const int b2y=_block_cell_2d; const int g2x=static_cast(ceil(static_cast(_maxspecial)/b2x)); const int g2y=static_cast(ceil(static_cast(nt)/b2y)); - _shared->k_transpose.set_size(g2x,g2y,b2x,b2y); - _shared->k_transpose.run(&dev_special,&dev_special_t,&_maxspecial,&nt); + // the maximum number of blocks on the device is typically 65535 + // in principle we can use a lower number to have more resource per block 32768 + const int max_num_blocks = 65535; + int shift = 0; + if (g2y < max_num_blocks) { + _shared->k_transpose.set_size(g2x,g2y,b2x,b2y); + _shared->k_transpose.run(&dev_special,&dev_special_t,&_maxspecial,&nt,&shift); + } else { + // using a fixed number of blocks + int g2y_m = max_num_blocks; + _shared->k_transpose.set_size(g2x,g2y_m,b2x,b2y); + // number of chunks needed for the whole transpose + const int num_chunks = ceil(static_cast(g2y) / g2y_m); + for (int i = 0; i < num_chunks; i++) { + _shared->k_transpose.run(&dev_special,&dev_special_t,&_maxspecial,&nt,&shift); + shift += g2y_m*b2y; + } + } + time_transpose.stop(); } diff --git a/lib/gpu/lal_neighbor_gpu.cu b/lib/gpu/lal_neighbor_gpu.cu index a7506fc5c3..7d0941ccd5 100644 --- a/lib/gpu/lal_neighbor_gpu.cu +++ b/lib/gpu/lal_neighbor_gpu.cu @@ -147,7 +147,7 @@ __kernel void kernel_calc_cell_counts(const unsigned *restrict cell_id, __kernel void transpose(__global tagint *restrict out, const __global tagint *restrict in, - int columns_in, int rows_in) + int columns_in, int rows_in, int shift) { __local tagint block[BLOCK_CELL_2D][BLOCK_CELL_2D+1]; @@ -158,15 +158,15 @@ __kernel void transpose(__global tagint *restrict out, unsigned i=bi*BLOCK_CELL_2D+ti; unsigned j=bj*BLOCK_CELL_2D+tj; - if ((i` constants defined in the + :py:mod:`lammps` module. The return value is the requested size. + If *name* corresponds to a per-atom vector the *dtype* keyword is ignored. + + :param name: name of the property + :type name: string + :param type: either LMP_SIZE_ROWS or LMP_SIZE_COLS for arrays, otherwise ignored + :type type: int + :return: data type of per-atom property (see :ref:`py_datatype_constants`) + :rtype: int + """ + if name: newname = name.encode() + else: return None + return self.lib.lammps_extract_atom_size(self.lmp, newname, dtype) + # ------------------------------------------------------------------------- # extract per-atom info def extract_atom(self, name, dtype=LAMMPS_AUTODETECT): """Retrieve per-atom properties from LAMMPS - This is a wrapper around the :cpp:func:`lammps_extract_atom` - function of the C-library interface. Its documentation includes a - list of the supported keywords and their data types. - Since Python needs to know the data type to be able to interpret - the result, by default, this function will try to auto-detect the data type - by asking the library. You can also force a specific data type by setting ``dtype`` - to one of the :ref:`data type ` constants defined in the - :py:mod:`lammps` module. - This function returns ``None`` if either the keyword is not - recognized, or an invalid data type constant is used. + This is a wrapper around the :cpp:func:`lammps_extract_atom` function of the + C-library interface. Its documentation includes a list of the supported + keywords and their data types. Since Python needs to know the data type to + be able to interpret the result, by default, this function will try to + auto-detect the data type by asking the library. You can also force a + specific data type by setting ``dtype`` to one of the :ref:`data type + ` constants defined in the :py:mod:`lammps` module. + This function returns ``None`` if either the keyword is not recognized, or + an invalid data type constant is used. .. note:: - While the returned arrays of per-atom data are dimensioned - for the range [0:nmax] - as is the underlying storage - - the data is usually only valid for the range of [0:nlocal], - unless the property of interest is also updated for ghost - atoms. In some cases, this depends on a LAMMPS setting, see - for example :doc:`comm_modify vel yes `. + While the returned vectors or arrays of per-atom data are dimensioned for + the range [0:nmax] - as is the underlying storage - the data is usually + only valid for the range of [0:nlocal], unless the property of interest + is also updated for ghost atoms. In some cases, this depends on a LAMMPS + setting, see for example :doc:`comm_modify vel yes `. + The actual size can be determined by calling + py:meth:`extract_atom_size() `. :param name: name of the property :type name: string @@ -1105,6 +1144,7 @@ class lammps(object): ctypes.POINTER(ctypes.c_int64), ctypes.POINTER(ctypes.POINTER(ctypes.c_int64)), ctypes.POINTER(ctypes.c_double), ctypes.POINTER(ctypes.POINTER(ctypes.c_double)), or NoneType + """ if dtype == LAMMPS_AUTODETECT: dtype = self.extract_atom_datatype(name) @@ -2227,7 +2267,6 @@ class lammps(object): :param caller: reference to some object passed to the callback function :type: object, optional """ - import numpy as np def callback_wrapper(caller, ntimestep, nlocal, tag_ptr, x_ptr, fext_ptr): tag = self.numpy.iarray(self.c_tagint, tag_ptr, nlocal, 1) @@ -2522,3 +2561,7 @@ class lammps(object): newcomputeid = computeid.encode() idx = self.lib.lammps_find_compute_neighlist(self.lmp, newcomputeid, reqid) return idx + +# Local Variables: +# fill-column: 80 +# End: diff --git a/python/lammps/numpy_wrapper.py b/python/lammps/numpy_wrapper.py index 9ab7f538de..5b90cf03de 100644 --- a/python/lammps/numpy_wrapper.py +++ b/python/lammps/numpy_wrapper.py @@ -16,14 +16,15 @@ # Written by Richard Berger ################################################################################ -import warnings from ctypes import POINTER, c_void_p, c_char_p, c_double, c_int, c_int32, c_int64, cast +from .constants import LAMMPS_AUTODETECT, LAMMPS_INT, LAMMPS_INT_2D, LAMMPS_DOUBLE, \ + LAMMPS_DOUBLE_2D, LAMMPS_INT64, LAMMPS_INT64_2D, LMP_STYLE_GLOBAL, LMP_STYLE_ATOM, \ + LMP_STYLE_LOCAL, LMP_TYPE_VECTOR, LMP_TYPE_ARRAY, LMP_SIZE_VECTOR, LMP_SIZE_ROWS, \ + LMP_SIZE_COLS, LMP_VAR_EQUAL, LMP_VAR_ATOM -from .constants import * # lgtm [py/polluting-import] from .data import NeighList - class numpy_wrapper: """lammps API NumPy Wrapper @@ -54,7 +55,8 @@ class numpy_wrapper: # ------------------------------------------------------------------------- - def extract_atom(self, name, dtype=LAMMPS_AUTODETECT, nelem=LAMMPS_AUTODETECT, dim=LAMMPS_AUTODETECT): + def extract_atom(self, name, dtype=LAMMPS_AUTODETECT, nelem=LAMMPS_AUTODETECT, + dim=LAMMPS_AUTODETECT): """Retrieve per-atom properties from LAMMPS as NumPy arrays This is a wrapper around the :py:meth:`lammps.extract_atom()` method. @@ -63,16 +65,16 @@ class numpy_wrapper: .. note:: - The returned arrays of per-atom data are by default dimensioned - for the range [0:nlocal] since that data is *always* valid. The - underlying storage for the data, however, is typically allocated - for the range of [0:nmax]. Whether there is valid data in the range - [nlocal:nlocal+nghost] depends on whether the property of interest - is also updated for ghost atoms. This is not often the case. In - some cases, it depends on a LAMMPS setting, see for example - :doc:`comm_modify vel yes `. By using the optional - *nelem* parameter the size of the returned NumPy can be overridden. - There is no check whether the number of elements chosen is valid. + The returned vectors or arrays of per-atom data are dimensioned + according to the return value of :py:meth:`lammps.extract_atom_size()`. + Except for the "mass" property, the underlying storage will always be + dimensioned for the range [0:nmax]. The actual usable data may be + only in the range [0:nlocal] or [0:nlocal][0:dim]. Whether there is + valid data in the range [nlocal:nlocal+nghost] or [nlocal:local+nghost][0:dim] + depends on whether the property of interest is also updated for ghost atoms. + Also the value of *dim* depends on the value of *name*. By using the optional + *nelem* and *dim* parameters the dimensions of the returned NumPy array can + be overridden. There is no check whether the number of elements chosen is valid. :param name: name of the property :type name: string @@ -89,21 +91,10 @@ class numpy_wrapper: dtype = self.lmp.extract_atom_datatype(name) if nelem == LAMMPS_AUTODETECT: - if name == "mass": - nelem = self.lmp.extract_global("ntypes") + 1 - else: - nelem = self.lmp.extract_global("nlocal") + nelem = self.lmp.extract_atom_size(name, LMP_SIZE_ROWS) if dim == LAMMPS_AUTODETECT: if dtype in (LAMMPS_INT_2D, LAMMPS_DOUBLE_2D, LAMMPS_INT64_2D): - # TODO add other fields - if name in ("x", "v", "f", "x0","omega", "angmom", "torque", "csforce", "vforce", "vest"): - dim = 3 - elif name == "smd_data_9": - dim = 9 - elif name == "smd_stress": - dim = 6 - else: - dim = 2 + dim = self.lmp.extract_atom_size(name, LMP_SIZE_COLS) else: dim = 1 @@ -119,37 +110,6 @@ class numpy_wrapper: # ------------------------------------------------------------------------- - def extract_atom_iarray(self, name, nelem, dim=1): - warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) - - if name in ['id', 'molecule']: - c_int_type = self.lmp.c_tagint - elif name in ['image']: - c_int_type = self.lmp.c_imageint - else: - c_int_type = c_int - - if dim == 1: - raw_ptr = self.lmp.extract_atom(name, LAMMPS_INT) - else: - raw_ptr = self.lmp.extract_atom(name, LAMMPS_INT_2D) - - return self.iarray(c_int_type, raw_ptr, nelem, dim) - - # ------------------------------------------------------------------------- - - def extract_atom_darray(self, name, nelem, dim=1): - warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) - - if dim == 1: - raw_ptr = self.lmp.extract_atom(name, LAMMPS_DOUBLE) - else: - raw_ptr = self.lmp.extract_atom(name, LAMMPS_DOUBLE_2D) - - return self.darray(raw_ptr, nelem, dim) - - # ------------------------------------------------------------------------- - def extract_compute(self, cid, cstyle, ctype): """Retrieve data from a LAMMPS compute diff --git a/python/lammps/pylammps.py b/python/lammps/pylammps.py index 9087305ba3..1f5a1a0db9 100644 --- a/python/lammps/pylammps.py +++ b/python/lammps/pylammps.py @@ -27,8 +27,8 @@ import sys import tempfile from collections import namedtuple -from .core import lammps -from .constants import * # lgtm [py/polluting-import] +from lammps.core import lammps +from lammps.constants import LMP_VAR_EQUAL, LMP_VAR_ATOM, LMP_VAR_VECTOR, LMP_VAR_STRING # ------------------------------------------------------------------------- diff --git a/src/.gitignore b/src/.gitignore index c26eaaba30..e557a8cbb2 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -192,6 +192,8 @@ /colvarproxy_lammps_version.h /fix_colvars.cpp /fix_colvars.h +/inthash.cpp +/inthash.h /fix_plumed.cpp /fix_plumed.h /dump_molfile.cpp @@ -1078,12 +1080,12 @@ /geturl.cpp /geturl.h /gpu_extra.h -/group_ndx.cpp -/group_ndx.h +/group2ndx.cpp +/group2ndx.h /gz_file_writer.cpp /gz_file_writer.h -/ndx_group.cpp -/ndx_group.h +/ndx2group.cpp +/ndx2group.h /hyper.cpp /hyper.h /improper_class2.cpp diff --git a/src/CG-DNA/atom_vec_oxdna.cpp b/src/CG-DNA/atom_vec_oxdna.cpp index 38f78f94bf..0836e9b47c 100644 --- a/src/CG-DNA/atom_vec_oxdna.cpp +++ b/src/CG-DNA/atom_vec_oxdna.cpp @@ -37,6 +37,7 @@ AtomVecOxdna::AtomVecOxdna(LAMMPS *lmp) : AtomVec(lmp) fields_grow = {"id5p"}; fields_copy = {"id5p"}; fields_border = {"id5p"}; + fields_border_vel = {"id5p"}; fields_exchange = {"id5p"}; fields_restart = {"id5p"}; fields_data_atom = {"id", "type", "x"}; diff --git a/src/CLASS2/angle_class2.cpp b/src/CLASS2/angle_class2.cpp index 1dbaaf0568..118179ad91 100644 --- a/src/CLASS2/angle_class2.cpp +++ b/src/CLASS2/angle_class2.cpp @@ -18,17 +18,17 @@ #include "angle_class2.h" -#include -#include #include "atom.h" -#include "neighbor.h" -#include "domain.h" #include "comm.h" +#include "domain.h" +#include "error.h" #include "force.h" #include "math_const.h" #include "memory.h" -#include "error.h" +#include "neighbor.h" +#include +#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/DIFFRACTION/compute_saed.cpp b/src/DIFFRACTION/compute_saed.cpp index 1350257910..e2a7bb33d9 100644 --- a/src/DIFFRACTION/compute_saed.cpp +++ b/src/DIFFRACTION/compute_saed.cpp @@ -401,7 +401,7 @@ void ComputeSAED::compute_vector() // Setting up OMP #if defined(_OPENMP) - if (me == 0 && echo) utils::logmesg(lmp," using {}OMP threads\n",comm->nthreads); + if (me == 0 && echo) utils::logmesg(lmp," using {} OMP thread(s)\n",comm->nthreads); #endif if (me == 0 && echo) utils::logmesg(lmp,"\n"); @@ -478,7 +478,7 @@ void ComputeSAED::compute_vector() } } } // End of pragma omp for region - delete [] f; + delete[] f; } auto scratch = new double[2*nRows]; @@ -499,10 +499,10 @@ void ComputeSAED::compute_vector() utils::logmesg(lmp," 100% \nTime elapsed during compute_saed = {:.2f} sec " "using {:.2f} Mbytes/processor\n-----\n", t2-t0, bytes/1024.0/1024.0); - delete [] xlocal; - delete [] typelocal; - delete [] scratch; - delete [] Fvec; + delete[] xlocal; + delete[] typelocal; + delete[] scratch; + delete[] Fvec; } /* ---------------------------------------------------------------------- diff --git a/src/DIFFRACTION/compute_xrd.cpp b/src/DIFFRACTION/compute_xrd.cpp index 11e0bb9a9f..a769be7d4f 100644 --- a/src/DIFFRACTION/compute_xrd.cpp +++ b/src/DIFFRACTION/compute_xrd.cpp @@ -332,7 +332,7 @@ void ComputeXRD::compute_array() // Setting up OMP #if defined(_OPENMP) - if ((me == 0) && echo) utils::logmesg(lmp," using {} OMP threads\n",comm->nthreads); + if ((me == 0) && echo) utils::logmesg(lmp," using {} OMP thread(s)\n",comm->nthreads); #endif if ((me == 0) && echo) { @@ -482,7 +482,7 @@ void ComputeXRD::compute_array() } } // End of pragma omp for region } // End of if LP=1 check - delete [] f; + delete[] f; } // End of pragma omp parallel region auto scratch = new double[2*size_array_rows]; @@ -503,10 +503,10 @@ void ComputeXRD::compute_array() utils::logmesg(lmp," 100% \nTime elapsed during compute_xrd = {:.2f} sec " "using {:.2f} Mbytes/processor\n-----\n", t2-t0, bytes/1024.0/1024.0); - delete [] scratch; - delete [] Fvec; - delete [] xlocal; - delete [] typelocal; + delete[] scratch; + delete[] Fvec; + delete[] xlocal; + delete[] typelocal; } /* ---------------------------------------------------------------------- diff --git a/src/DIFFRACTION/fix_saed_vtk.cpp b/src/DIFFRACTION/fix_saed_vtk.cpp index b3f6693e9e..693bb925b6 100644 --- a/src/DIFFRACTION/fix_saed_vtk.cpp +++ b/src/DIFFRACTION/fix_saed_vtk.cpp @@ -114,6 +114,7 @@ FixSAEDVTK::FixSAEDVTK(LAMMPS *lmp, int narg, char **arg) : memory->create(vector_total,nrows,"saed/vtk:vector_total"); vector_flag = 1; + extvector = 0; size_vector = nrows; if (nOutput == 0) { @@ -248,8 +249,8 @@ FixSAEDVTK::FixSAEDVTK(LAMMPS *lmp, int narg, char **arg) : FixSAEDVTK::~FixSAEDVTK() { - delete [] filename; - delete [] ids; + delete[] filename; + delete[] ids; memory->destroy(vector); memory->destroy(vector_total); if (fp && comm->me == 0) fclose(fp); diff --git a/src/DIPOLE/pair_lj_sf_dipole_sf.h b/src/DIPOLE/pair_lj_sf_dipole_sf.h index 892c227a7a..df01e3dacd 100644 --- a/src/DIPOLE/pair_lj_sf_dipole_sf.h +++ b/src/DIPOLE/pair_lj_sf_dipole_sf.h @@ -26,7 +26,7 @@ namespace LAMMPS_NS { class PairLJSFDipoleSF : public Pair { public: - PairLJSFDipoleSF(class LAMMPS *_lmp) : Pair(_lmp){}; + PairLJSFDipoleSF(class LAMMPS *_lmp) : Pair(_lmp) {}; ~PairLJSFDipoleSF() override; void compute(int, int) override; void settings(int, char **) override; diff --git a/src/EXTRA-COMMAND/group_ndx.cpp b/src/EXTRA-COMMAND/group2ndx.cpp similarity index 97% rename from src/EXTRA-COMMAND/group_ndx.cpp rename to src/EXTRA-COMMAND/group2ndx.cpp index 1dc0d3af97..56bf848923 100644 --- a/src/EXTRA-COMMAND/group_ndx.cpp +++ b/src/EXTRA-COMMAND/group2ndx.cpp @@ -1,6 +1,4 @@ -// -*- c++ -*- - -/* ---------------------------------------------------------------------- +/* -*- c++ -*-------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories LAMMPS development team: developers@lammps.org @@ -16,7 +14,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ -#include "group_ndx.h" +#include "group2ndx.h" #include "atom.h" #include "comm.h" diff --git a/src/EXTRA-COMMAND/group_ndx.h b/src/EXTRA-COMMAND/group2ndx.h similarity index 83% rename from src/EXTRA-COMMAND/group_ndx.h rename to src/EXTRA-COMMAND/group2ndx.h index 685ad82d91..e4926e2d92 100644 --- a/src/EXTRA-COMMAND/group_ndx.h +++ b/src/EXTRA-COMMAND/group2ndx.h @@ -1,6 +1,4 @@ -// -*- c++ -*- - -/* ---------------------------------------------------------- +/* -*- c++ -*----------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories LAMMPS development team: developers@lammps.org @@ -19,8 +17,8 @@ CommandStyle(group2ndx,Group2Ndx); // clang-format on #else -#ifndef LMP_GROUP_NDX_H -#define LMP_GROUP_NDX_H +#ifndef LMP_GROUP2NDX_H +#define LMP_GROUP2NDX_H #include "command.h" @@ -28,7 +26,7 @@ namespace LAMMPS_NS { class Group2Ndx : public Command { public: - Group2Ndx(class LAMMPS *lmp) : Command(lmp){}; + Group2Ndx(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **) override; private: diff --git a/src/EXTRA-COMMAND/ndx_group.cpp b/src/EXTRA-COMMAND/ndx2group.cpp similarity index 97% rename from src/EXTRA-COMMAND/ndx_group.cpp rename to src/EXTRA-COMMAND/ndx2group.cpp index c5b0d3cf8a..ffe159b3b8 100644 --- a/src/EXTRA-COMMAND/ndx_group.cpp +++ b/src/EXTRA-COMMAND/ndx2group.cpp @@ -1,6 +1,4 @@ -// -*- c++ -*- - -/* ---------------------------------------------------------------------- +/* -*- c++ -*--------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories LAMMPS development team: developers@lammps.org @@ -16,7 +14,7 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ -#include "ndx_group.h" +#include "ndx2group.h" #include "atom.h" #include "comm.h" @@ -33,7 +31,7 @@ static std::string find_section(FILE *fp, const std::string &name) { char linebuf[BUFLEN]; - fgets(linebuf, BUFLEN, fp); + if (!fgets(linebuf, BUFLEN, fp)) throw TokenizerException("Read error", utils::getsyserror()); while (!feof(fp)) { if (utils::strmatch(linebuf, "^\\s*\\[.*\\]\\s*$")) { auto words = Tokenizer(linebuf).as_vector(); diff --git a/src/EXTRA-COMMAND/ndx_group.h b/src/EXTRA-COMMAND/ndx2group.h similarity index 84% rename from src/EXTRA-COMMAND/ndx_group.h rename to src/EXTRA-COMMAND/ndx2group.h index 0b35fb62a0..9a2f3c04b5 100644 --- a/src/EXTRA-COMMAND/ndx_group.h +++ b/src/EXTRA-COMMAND/ndx2group.h @@ -1,6 +1,4 @@ -// -*- c++ -*- - -/* ---------------------------------------------------------- +/* -*- c++ -*------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories LAMMPS development team: developers@lammps.org @@ -19,8 +17,8 @@ CommandStyle(ndx2group,Ndx2Group); // clang-format on #else -#ifndef LMP_NDX_GROUP_H -#define LMP_NDX_GROUP_H +#ifndef LMP_NDX2GROUP_H +#define LMP_NDX2GROUP_H #include "command.h" #include @@ -29,7 +27,7 @@ namespace LAMMPS_NS { class Ndx2Group : public Command { public: - Ndx2Group(class LAMMPS *lmp) : Command(lmp){}; + Ndx2Group(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **) override; private: diff --git a/src/EXTRA-FIX/fix_ave_correlate_long.cpp b/src/EXTRA-FIX/fix_ave_correlate_long.cpp index 738ae3ae4c..abb1ad87de 100644 --- a/src/EXTRA-FIX/fix_ave_correlate_long.cpp +++ b/src/EXTRA-FIX/fix_ave_correlate_long.cpp @@ -166,12 +166,12 @@ FixAveCorrelateLong::FixAveCorrelateLong(LAMMPS *lmp, int narg, char **arg) : overwrite = 1; iarg += 1; } else if (strcmp(arg[iarg], "title1") == 0) { - if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix ave/correlate/long title1", error); + if (iarg + 2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/correlate/long title1", error); delete[] title1; title1 = utils::strdup(arg[iarg + 1]); iarg += 2; } else if (strcmp(arg[iarg], "title2") == 0) { - if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix ave/correlate/long title2", error); + if (iarg + 2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/correlate/long title2", error); delete[] title2; title2 = utils::strdup(arg[iarg + 1]); iarg += 2; diff --git a/src/EXTRA-MOLECULE/bond_harmonic_shift.cpp b/src/EXTRA-MOLECULE/bond_harmonic_shift.cpp index bd106c8567..6c87d47f5e 100644 --- a/src/EXTRA-MOLECULE/bond_harmonic_shift.cpp +++ b/src/EXTRA-MOLECULE/bond_harmonic_shift.cpp @@ -228,3 +228,16 @@ void BondHarmonicShift::born_matrix(int type, double rsq, int /*i*/, int /*j*/, du2 = 2 * k[type]; if (r > 0.0) du = du2 * dr; } + +/* ---------------------------------------------------------------------- + return ptr to internal members upon request +------------------------------------------------------------------------ */ + +void *BondHarmonicShift::extract(const char *str, int &dim) +{ + dim = 1; + if (strcmp(str, "k") == 0) return (void *) k; + if (strcmp(str, "r0") == 0) return (void *) r0; + if (strcmp(str, "r1") == 0) return (void *) r1; + return nullptr; +} diff --git a/src/EXTRA-MOLECULE/bond_harmonic_shift.h b/src/EXTRA-MOLECULE/bond_harmonic_shift.h index 922f1ba00d..68afc57bf7 100644 --- a/src/EXTRA-MOLECULE/bond_harmonic_shift.h +++ b/src/EXTRA-MOLECULE/bond_harmonic_shift.h @@ -36,6 +36,7 @@ class BondHarmonicShift : public Bond { void write_data(FILE *) override; double single(int, double, int, int, double &) override; void born_matrix(int, double, int, int, double &, double &) override; + void *extract(const char *, int &); protected: double *k, *r0, *r1; diff --git a/src/GPU/pair_amoeba_gpu.h b/src/GPU/pair_amoeba_gpu.h index c90339585b..3f5f89424c 100644 --- a/src/GPU/pair_amoeba_gpu.h +++ b/src/GPU/pair_amoeba_gpu.h @@ -64,8 +64,7 @@ class PairAmoebaGPU : public PairAmoeba { void udirect2b_cpu(); - template - void compute_force_from_torque(const numtyp*, double**, double*); + template void compute_force_from_torque(const numtyp *, double **, double *); }; } // namespace LAMMPS_NS diff --git a/src/GPU/pair_hippo_gpu.h b/src/GPU/pair_hippo_gpu.h index 5f36d6e71f..d00c490243 100644 --- a/src/GPU/pair_hippo_gpu.h +++ b/src/GPU/pair_hippo_gpu.h @@ -65,8 +65,7 @@ class PairHippoGPU : public PairAmoeba { void udirect2b_cpu(); - template - void compute_force_from_torque(const numtyp*, double**, double*); + template void compute_force_from_torque(const numtyp *, double **, double *); }; } // namespace LAMMPS_NS diff --git a/src/GRANULAR/pair_granular.h b/src/GRANULAR/pair_granular.h index 46c5570543..f94f4f5dff 100644 --- a/src/GRANULAR/pair_granular.h +++ b/src/GRANULAR/pair_granular.h @@ -75,7 +75,7 @@ class PairGranular : public Pair { // granular models int nmodels, maxmodels; - class Granular_NS::GranularModel** models_list; + class Granular_NS::GranularModel **models_list; int **types_indices; // optional user-specified global cutoff, per-type user-specified cutoffs diff --git a/src/INTEL/intel_intrinsics.h b/src/INTEL/intel_intrinsics.h index c106dfd411..a2b5a25a6a 100644 --- a/src/INTEL/intel_intrinsics.h +++ b/src/INTEL/intel_intrinsics.h @@ -123,7 +123,9 @@ struct vector_ops { static fvec recip(const fvec &a) { return _mm512_recip_pd(a); } template static void gather_prefetch_t0(const ivec &idx, bvec mask, const void *base) { +#ifdef __AVX512PF__ _mm512_mask_prefetch_i32gather_ps(idx, mask, base, scale, _MM_HINT_T0); +#endif } template static fvec gather(const fvec &from, bvec mask, const ivec &idx, const void *base) { @@ -262,7 +264,9 @@ struct vector_ops { static fvec recip(const fvec &a) { return _mm512_recip_ps(a); } template static void gather_prefetch_t0(const ivec &idx, bvec mask, const void *base) { +#ifdef __AVX512PF__ _mm512_mask_prefetch_i32gather_ps(idx, mask, base, scale, _MM_HINT_T0); +#endif } template static fvec gather(const fvec &from, bvec mask, const ivec &idx, const void *base) { diff --git a/src/INTEL/intel_intrinsics_airebo.h b/src/INTEL/intel_intrinsics_airebo.h index 04cc78f3d2..41b147ae3c 100644 --- a/src/INTEL/intel_intrinsics_airebo.h +++ b/src/INTEL/intel_intrinsics_airebo.h @@ -639,8 +639,10 @@ public: AVEC_BINOP(-, sub) VEC_INLINE static void gather_prefetch0(const IVEC_NAME &a, void * mem) { +#ifdef __AVX512PF__ _mm512_mask_prefetch_i32gather_ps(a.val_, BVEC_NAME::full().val_, mem, sizeof(FVEC_SCAL_T), _MM_HINT_T0); +#endif } }; @@ -697,8 +699,10 @@ public: AVEC2_BINOP(-, sub) VEC_INLINE static void gather_prefetch0(const IVEC_NAME &a, void * mem) { +#ifdef __AVX512PF__ _mm512_mask_prefetch_i32gather_ps(a.val_, BVEC_NAME::full().val_, mem, sizeof(double), _MM_HINT_T0); +#endif } }; #endif diff --git a/src/INTERLAYER/pair_aip_water_2dm.h b/src/INTERLAYER/pair_aip_water_2dm.h index 295cdfffb9..91f9395214 100644 --- a/src/INTERLAYER/pair_aip_water_2dm.h +++ b/src/INTERLAYER/pair_aip_water_2dm.h @@ -30,7 +30,6 @@ class PairAIPWATER2DM : virtual public PairILPTMD { protected: void settings(int, char **) override; - }; } // namespace LAMMPS_NS diff --git a/src/INTERLAYER/pair_ilp_graphene_hbn.h b/src/INTERLAYER/pair_ilp_graphene_hbn.h index e151ecc801..5d5c1cce54 100644 --- a/src/INTERLAYER/pair_ilp_graphene_hbn.h +++ b/src/INTERLAYER/pair_ilp_graphene_hbn.h @@ -39,7 +39,12 @@ class PairILPGrapheneHBN : public Pair { static constexpr int NPARAMS_PER_LINE = 13; - enum { ILP_GrhBN, ILP_TMD, SAIP_METAL, AIP_WATER_2DM }; // for telling class variants apart in shared code + enum { + ILP_GrhBN, + ILP_TMD, + SAIP_METAL, + AIP_WATER_2DM + }; // for telling class variants apart in shared code protected: int me; diff --git a/src/KOKKOS/fft3d_kokkos.cpp b/src/KOKKOS/fft3d_kokkos.cpp index 202d46e788..f4c5fa5028 100644 --- a/src/KOKKOS/fft3d_kokkos.cpp +++ b/src/KOKKOS/fft3d_kokkos.cpp @@ -43,14 +43,19 @@ FFT3dKokkos::FFT3dKokkos(LAMMPS *lmp, MPI_Comm comm, int nfast, int #if defined(LMP_KOKKOS_GPU) int ngpus = lmp->kokkos->ngpus; ExecutionSpace execution_space = ExecutionSpaceFromDevice::space; -#endif -#if defined(FFT_KOKKOS_MKL) +#if defined(FFT_KOKKOS_MKL_GPU) + if (ngpus > 0 && execution_space == Host) + lmp->error->all(FLERR,"Cannot use the MKL library with Kokkos on the host CPUs in a GPU build"); +#elif defined(FFT_KOKKOS_MKL) if (ngpus > 0 && execution_space == Device) lmp->error->all(FLERR,"Cannot use the MKL library with Kokkos on GPUs"); #elif defined(FFT_KOKKOS_FFTW3) if (ngpus > 0 && execution_space == Device) lmp->error->all(FLERR,"Cannot use the FFTW library with Kokkos on GPUs"); +#elif defined(FFT_KOKKOS_NVPL) + if (ngpus > 0 && execution_space == Device) + lmp->error->all(FLERR,"Cannot use the NVPL FFT library with Kokkos on GPUs"); #elif defined(FFT_KOKKOS_CUFFT) if (ngpus > 0 && execution_space == Host) lmp->error->all(FLERR,"Cannot use the cuFFT library with Kokkos on the host CPUs"); @@ -69,6 +74,8 @@ FFT3dKokkos::FFT3dKokkos(LAMMPS *lmp, MPI_Comm comm, int nfast, int if (stack_size < 2048) cudaDeviceSetLimit(cudaLimitStackSize,2048); #endif +#endif + #endif plan = fft_3d_create_plan_kokkos(comm,nfast,nmid,nslow, @@ -150,7 +157,7 @@ public: KOKKOS_INLINE_FUNCTION void operator() (const int &i) const { -#if defined(FFT_KOKKOS_FFTW3) || defined(FFT_KOKKOS_CUFFT) || defined(FFT_KOKKOS_HIPFFT) +#if defined(FFT_KOKKOS_FFTW3) || defined(FFT_KOKKOS_CUFFT) || defined(FFT_KOKKOS_HIPFFT) || defined(FFT_KOKKOS_MKL_GPU) || defined(FFT_KOKKOS_NVPL) FFT_SCALAR* out_ptr = (FFT_SCALAR *)(d_out.data()+i); *(out_ptr++) *= norm; *(out_ptr++) *= norm; @@ -220,12 +227,17 @@ void FFT3dKokkos::fft_3d_kokkos(typename FFT_AT::t_FFT_DATA_1d d_in, total = plan->total1; length = plan->length1; - #if defined(FFT_KOKKOS_MKL) + #if defined(FFT_KOKKOS_MKL_GPU) + if (flag == 1) + oneapi::mkl::dft::compute_forward(*(plan->desc_fast), (FFT_SCALAR*)d_data.data()); + else + oneapi::mkl::dft::compute_backward(*(plan->desc_fast), (FFT_SCALAR*)d_data.data()); + #elif defined(FFT_KOKKOS_MKL) if (flag == 1) DftiComputeForward(plan->handle_fast,d_data.data()); else DftiComputeBackward(plan->handle_fast,d_data.data()); - #elif defined(FFT_KOKKOS_FFTW3) + #elif defined(FFT_KOKKOS_FFTW3) || defined(FFT_KOKKOS_NVPL) if (flag == 1) FFTW_API(execute_dft)(plan->plan_fast_forward,(FFT_KOKKOS_DATA*)d_data.data(),(FFT_KOKKOS_DATA*)d_data.data()); else @@ -266,12 +278,17 @@ void FFT3dKokkos::fft_3d_kokkos(typename FFT_AT::t_FFT_DATA_1d d_in, total = plan->total2; length = plan->length2; - #if defined(FFT_KOKKOS_MKL) + #if defined(FFT_KOKKOS_MKL_GPU) + if (flag == 1) + oneapi::mkl::dft::compute_forward(*(plan->desc_mid), (FFT_SCALAR*)d_data.data()); + else + oneapi::mkl::dft::compute_backward(*(plan->desc_mid), (FFT_SCALAR*)d_data.data()); + #elif defined(FFT_KOKKOS_MKL) if (flag == 1) DftiComputeForward(plan->handle_mid,d_data.data()); else DftiComputeBackward(plan->handle_mid,d_data.data()); - #elif defined(FFT_KOKKOS_FFTW3) + #elif defined(FFT_KOKKOS_FFTW3) || defined(FFT_KOKKOS_NVPL) if (flag == 1) FFTW_API(execute_dft)(plan->plan_mid_forward,(FFT_KOKKOS_DATA*)d_data.data(),(FFT_KOKKOS_DATA*)d_data.data()); else @@ -310,12 +327,17 @@ void FFT3dKokkos::fft_3d_kokkos(typename FFT_AT::t_FFT_DATA_1d d_in, total = plan->total3; length = plan->length3; - #if defined(FFT_KOKKOS_MKL) + #if defined(FFT_KOKKOS_MKL_GPU) + if (flag == 1) + oneapi::mkl::dft::compute_forward(*(plan->desc_slow), (FFT_SCALAR*)d_data.data()); + else + oneapi::mkl::dft::compute_backward(*(plan->desc_slow), (FFT_SCALAR*)d_data.data()); + #elif defined(FFT_KOKKOS_MKL) if (flag == 1) DftiComputeForward(plan->handle_slow,d_data.data()); else DftiComputeBackward(plan->handle_slow,d_data.data()); - #elif defined(FFT_KOKKOS_FFTW3) + #elif defined(FFT_KOKKOS_FFTW3) || defined(FFT_KOKKOS_NVPL) if (flag == 1) FFTW_API(execute_dft)(plan->plan_slow_forward,(FFT_KOKKOS_DATA*)d_data.data(),(FFT_KOKKOS_DATA*)d_data.data()); else @@ -609,7 +631,28 @@ struct fft_plan_3d_kokkos* FFT3dKokkos::fft_3d_create_pl // system specific pre-computation of 1d FFT coeffs // and scaling normalization -#if defined(FFT_KOKKOS_MKL) +#if defined(FFT_KOKKOS_MKL_GPU) + sycl::queue queue = LMPDeviceType().sycl_queue(); + + plan->desc_fast = new descriptor_t (nfast); + plan->desc_fast->set_value(oneapi::mkl::dft::config_param::NUMBER_OF_TRANSFORMS, plan->total1/nfast); + plan->desc_fast->set_value(oneapi::mkl::dft::config_param::FWD_DISTANCE, plan->length1); + plan->desc_fast->set_value(oneapi::mkl::dft::config_param::BWD_DISTANCE, plan->length1); + plan->desc_fast->commit(queue); + + plan->desc_mid = new descriptor_t (nmid); + plan->desc_mid->set_value(oneapi::mkl::dft::config_param::NUMBER_OF_TRANSFORMS, plan->total2/nmid); + plan->desc_mid->set_value(oneapi::mkl::dft::config_param::FWD_DISTANCE, plan->length2); + plan->desc_mid->set_value(oneapi::mkl::dft::config_param::BWD_DISTANCE, plan->length2); + plan->desc_mid->commit(queue); + + plan->desc_slow = new descriptor_t (nslow); + plan->desc_slow->set_value(oneapi::mkl::dft::config_param::NUMBER_OF_TRANSFORMS, plan->total3/nslow); + plan->desc_slow->set_value(oneapi::mkl::dft::config_param::FWD_DISTANCE, plan->length3); + plan->desc_slow->set_value(oneapi::mkl::dft::config_param::BWD_DISTANCE, plan->length3); + plan->desc_slow->commit(queue); + +#elif defined(FFT_KOKKOS_MKL) DftiCreateDescriptor( &(plan->handle_fast), FFT_KOKKOS_MKL_PREC, DFTI_COMPLEX, 1, (MKL_LONG)nfast); DftiSetValue(plan->handle_fast, DFTI_NUMBER_OF_TRANSFORMS, @@ -646,7 +689,7 @@ struct fft_plan_3d_kokkos* FFT3dKokkos::fft_3d_create_pl #endif DftiCommitDescriptor(plan->handle_slow); -#elif defined(FFT_KOKKOS_FFTW3) +#elif defined(FFT_KOKKOS_FFTW3) || defined(FFT_KOKKOS_NVPL) #if defined (FFT_KOKKOS_FFTW_THREADS) if (nthreads > 1) { @@ -781,11 +824,15 @@ void FFT3dKokkos::fft_3d_destroy_plan_kokkos(struct fft_plan_3d_kokk if (plan->mid2_plan) remapKK->remap_3d_destroy_plan_kokkos(plan->mid2_plan); if (plan->post_plan) remapKK->remap_3d_destroy_plan_kokkos(plan->post_plan); -#if defined(FFT_KOKKOS_MKL) +#if defined(FFT_KOKKOS_MKL_GPU) + delete plan->desc_fast; + delete plan->desc_mid; + delete plan->desc_slow; +#elif defined(FFT_KOKKOS_MKL) DftiFreeDescriptor(&(plan->handle_fast)); DftiFreeDescriptor(&(plan->handle_mid)); DftiFreeDescriptor(&(plan->handle_slow)); -#elif defined(FFT_KOKKOS_FFTW3) +#elif defined(FFT_KOKKOS_FFTW3) || defined(FFT_KOKKOS_NVPL) FFTW_API(destroy_plan)(plan->plan_slow_forward); FFTW_API(destroy_plan)(plan->plan_slow_backward); FFTW_API(destroy_plan)(plan->plan_mid_forward); @@ -856,7 +903,7 @@ void FFT3dKokkos::fft_3d_1d_only_kokkos(typename FFT_AT::t_FFT_DATA_ // fftw3 and Dfti in MKL encode the number of transforms // into the plan, so we cannot operate on a smaller data set -#if defined(FFT_KOKKOS_MKL) || defined(FFT_KOKKOS_FFTW3) +#if defined(FFT_KOKKOS_MKL_GPU) || defined(FFT_KOKKOS_MKL) || defined(FFT_KOKKOS_FFTW3) || defined(FFT_KOKKOS_NVPL) if ((total1 > nsize) || (total2 > nsize) || (total3 > nsize)) return; #endif @@ -867,7 +914,17 @@ void FFT3dKokkos::fft_3d_1d_only_kokkos(typename FFT_AT::t_FFT_DATA_ // perform 1d FFTs in each of 3 dimensions // data is just an array of 0.0 -#if defined(FFT_KOKKOS_MKL) +#if defined(FFT_KOKKOS_MKL_GPU) + if (flag == -1) { + oneapi::mkl::dft::compute_forward(*(plan->desc_fast), (FFT_SCALAR*)d_data.data()); + oneapi::mkl::dft::compute_forward(*(plan->desc_mid), (FFT_SCALAR*)d_data.data()); + oneapi::mkl::dft::compute_forward(*(plan->desc_slow), (FFT_SCALAR*)d_data.data()); + } else { + oneapi::mkl::dft::compute_backward(*(plan->desc_fast), (FFT_SCALAR*)d_data.data()); + oneapi::mkl::dft::compute_backward(*(plan->desc_mid), (FFT_SCALAR*)d_data.data()); + oneapi::mkl::dft::compute_backward(*(plan->desc_slow), (FFT_SCALAR*)d_data.data()); + } +#elif defined(FFT_KOKKOS_MKL) if (flag == -1) { DftiComputeForward(plan->handle_fast,d_data.data()); DftiComputeForward(plan->handle_mid,d_data.data()); @@ -877,7 +934,7 @@ void FFT3dKokkos::fft_3d_1d_only_kokkos(typename FFT_AT::t_FFT_DATA_ DftiComputeBackward(plan->handle_mid,d_data.data()); DftiComputeBackward(plan->handle_slow,d_data.data()); } -#elif defined(FFT_KOKKOS_FFTW3) +#elif defined(FFT_KOKKOS_FFTW3) || defined(FFT_KOKKOS_NVPL) if (flag == -1) { FFTW_API(execute_dft)(plan->plan_fast_forward,(FFT_KOKKOS_DATA*)d_data.data(),(FFT_KOKKOS_DATA*)d_data.data()); FFTW_API(execute_dft)(plan->plan_mid_forward,(FFT_KOKKOS_DATA*)d_data.data(),(FFT_KOKKOS_DATA*)d_data.data()); diff --git a/src/KOKKOS/fft3d_kokkos.h b/src/KOKKOS/fft3d_kokkos.h index 48b0fd76de..ae7ef3a6d2 100644 --- a/src/KOKKOS/fft3d_kokkos.h +++ b/src/KOKKOS/fft3d_kokkos.h @@ -21,6 +21,14 @@ namespace LAMMPS_NS { +#if defined(FFT_KOKKOS_MKL_GPU) +#ifdef FFT_SINGLE + typedef oneapi::mkl::dft::descriptor descriptor_t; +#else + typedef oneapi::mkl::dft::descriptor descriptor_t; +#endif +#endif + // ------------------------------------------------------------------------- // plan for how to perform a 3d FFT @@ -45,11 +53,15 @@ struct fft_plan_3d_kokkos { double norm; // normalization factor for rescaling // system specific 1d FFT info -#if defined(FFT_KOKKOS_MKL) +#if defined(FFT_KOKKOS_MKL_GPU) + descriptor_t *desc_fast; + descriptor_t *desc_mid; + descriptor_t *desc_slow; +#elif defined(FFT_KOKKOS_MKL) DFTI_DESCRIPTOR *handle_fast; DFTI_DESCRIPTOR *handle_mid; DFTI_DESCRIPTOR *handle_slow; -#elif defined(FFT_KOKKOS_FFTW3) +#elif defined(FFT_KOKKOS_FFTW3) || defined(FFT_KOKKOS_NVPL) FFTW_API(plan) plan_fast_forward; FFTW_API(plan) plan_fast_backward; FFTW_API(plan) plan_mid_forward; diff --git a/src/KOKKOS/fftdata_kokkos.h b/src/KOKKOS/fftdata_kokkos.h index 0cb59f49cb..be6c8c199d 100644 --- a/src/KOKKOS/fftdata_kokkos.h +++ b/src/KOKKOS/fftdata_kokkos.h @@ -36,8 +36,8 @@ # endif #endif -// with KOKKOS in CUDA or HIP mode we can only have -// CUFFT/HIPFFT or KISS, thus undefine all other +// with KOKKOS in CUDA, HIP, or SYCL mode we can only have +// CUFFT/HIPFFT/MKL_GPU or KISS, thus undefine all other // FFTs here #ifdef KOKKOS_ENABLE_CUDA @@ -60,12 +60,28 @@ # if defined(FFT_KOKKOS_FFTW3) # undef FFT_KOKKOS_FFTW3 # endif +# if defined(FFT_KOKKOS_NVPL) +# undef FFT_KOKKOS_NVPL +# endif # if defined(FFT_KOKKOS_MKL) # undef FFT_KOKKOS_MKL # endif # if !defined(FFT_KOKKOS_HIPFFT) && !defined(FFT_KOKKOS_KISS) # define FFT_KOKKOS_KISS # endif +#elif defined(KOKKOS_ENABLE_SYCL) +# if defined(FFT_KOKKOS_FFTW) +# undef FFT_KOKKOS_FFTW +# endif +# if defined(FFT_KOKKOS_FFTW3) +# undef FFT_KOKKOS_FFTW3 +# endif +# if defined(FFT_KOKKOS_MKL) +# undef FFT_KOKKOS_MKL +# endif +# if !defined(FFT_KOKKOS_MKL_GPU) && !defined(FFT_KOKKOS_KISS) +# define FFT_KOKKOS_KISS +# endif #else # if defined(FFT_KOKKOS_CUFFT) # error "Must enable CUDA with KOKKOS to use -DFFT_KOKKOS_CUFFT" @@ -73,6 +89,9 @@ # if defined(FFT_KOKKOS_HIPFFT) # error "Must enable HIP with KOKKOS to use -DFFT_KOKKOS_HIPFFT" # endif +# if defined(FFT_KOKKOS_MKL_GPU) +# error "Must enable SYCL with KOKKOS to use -DFFT_KOKKOS_MKL_GPU" +# endif #endif // set strings for library info output @@ -85,12 +104,27 @@ #define LMP_FFT_KOKKOS_LIB "FFTW3" #elif defined(FFT_KOKKOS_MKL) #define LMP_FFT_KOKKOS_LIB "MKL FFT" +#elif defined(FFT_KOKKOS_MKL_GPU) +#define LMP_FFT_KOKKOS_LIB "MKL_GPU FFT" +#elif defined(FFT_KOKKOS_NVPL) +#define LMP_FFT_KOKKOS_LIB "NVPL FFT" #else #define LMP_FFT_KOKKOS_LIB "KISS FFT" #endif -#if defined(FFT_KOKKOS_MKL) +#if defined(FFT_KOKKOS_MKL_GPU) + #include "CL/sycl.hpp" + #include "oneapi/mkl/dfti.hpp" + #include "mkl.h" + #if defined(FFT_SINGLE) + typedef std::complex FFT_KOKKOS_DATA; + #define FFT_KOKKOS_MKL_PREC DFTI_SINGLE + #else + typedef std::complex FFT_KOKKOS_DATA; + #define FFT_KOKKOS_MKL_PREC DFTI_DOUBLE + #endif +#elif defined(FFT_KOKKOS_MKL) #include "mkl_dfti.h" #if defined(FFT_SINGLE) typedef float _Complex FFT_KOKKOS_DATA; @@ -108,6 +142,15 @@ typedef fftw_complex FFT_KOKKOS_DATA; #define FFTW_API(function) fftw_ ## function #endif +#elif defined(FFT_KOKKOS_NVPL) + #include "nvpl_fftw.h" + #if defined(FFT_SINGLE) + typedef fftwf_complex FFT_KOKKOS_DATA; + #define FFTW_API(function) fftwf_ ## function + #else + typedef fftw_complex FFT_KOKKOS_DATA; + #define FFTW_API(function) fftw_ ## function + #endif #elif defined(FFT_KOKKOS_CUFFT) #include "cufft.h" #if defined(FFT_SINGLE) @@ -146,7 +189,7 @@ #endif // (double[2]*) is not a 1D pointer -#if defined(FFT_KOKKOS_FFTW3) +#if defined(FFT_KOKKOS_FFTW3) || defined(FFT_KOKKOS_NVPL) typedef FFT_SCALAR* FFT_KOKKOS_DATA_POINTER; #else typedef FFT_KOKKOS_DATA* FFT_KOKKOS_DATA_POINTER; diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp index 308df20c0e..c0b263d736 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.cpp @@ -53,7 +53,8 @@ FixACKS2ReaxFFKokkos(LAMMPS *lmp, int narg, char **arg) : datamask_read = X_MASK | V_MASK | F_MASK | MASK_MASK | Q_MASK | TYPE_MASK | TAG_MASK; datamask_modify = Q_MASK | X_MASK; - nmax = m_cap = 0; + nmax = 0; + m_cap_big = 0; allocated_flag = 0; nprev = 4; @@ -66,7 +67,7 @@ FixACKS2ReaxFFKokkos(LAMMPS *lmp, int narg, char **arg) : buf = new double[2*nprev]; prev_last_rows_rank = 0; - d_mfill_offset = typename AT::t_int_scalar("acks2/kk:mfill_offset"); + d_mfill_offset = typename AT::t_bigint_scalar("acks2/kk:mfill_offset"); } /* ---------------------------------------------------------------------- */ @@ -418,10 +419,10 @@ void FixACKS2ReaxFFKokkos::pre_force(int /*vflag*/) template KOKKOS_INLINE_FUNCTION -void FixACKS2ReaxFFKokkos::num_neigh_item(int ii, int &maxneigh) const +void FixACKS2ReaxFFKokkos::num_neigh_item(int ii, bigint &totneigh) const { const int i = d_ilist[ii]; - maxneigh += d_numneigh[i]; + totneigh += d_numneigh[i]; } /* ---------------------------------------------------------------------- */ @@ -433,39 +434,39 @@ void FixACKS2ReaxFFKokkos::allocate_matrix() // determine the total space for the H matrix - m_cap = 0; + m_cap_big = 0; // limit scope of functor to allow deallocation of views { FixACKS2ReaxFFKokkosNumNeighFunctor neigh_functor(this); - Kokkos::parallel_reduce(nn,neigh_functor,m_cap); + Kokkos::parallel_reduce(nn,neigh_functor,m_cap_big); } // deallocate first to reduce memory overhead - d_firstnbr = typename AT::t_int_1d(); + d_firstnbr = typename AT::t_bigint_1d(); d_numnbrs = typename AT::t_int_1d(); d_jlist = typename AT::t_int_1d(); d_val = typename AT::t_ffloat_1d(); - d_firstnbr_X = typename AT::t_int_1d(); + d_firstnbr_X = typename AT::t_bigint_1d(); d_numnbrs_X = typename AT::t_int_1d(); d_jlist_X = typename AT::t_int_1d(); d_val_X = typename AT::t_ffloat_1d(); // H matrix - d_firstnbr = typename AT::t_int_1d("acks2/kk:firstnbr",nmax); + d_firstnbr = typename AT::t_bigint_1d("acks2/kk:firstnbr",nmax); d_numnbrs = typename AT::t_int_1d("acks2/kk:numnbrs",nmax); - d_jlist = typename AT::t_int_1d("acks2/kk:jlist",m_cap); - d_val = typename AT::t_ffloat_1d("acks2/kk:val",m_cap); + d_jlist = typename AT::t_int_1d("acks2/kk:jlist",m_cap_big); + d_val = typename AT::t_ffloat_1d("acks2/kk:val",m_cap_big); // X matrix - d_firstnbr_X = typename AT::t_int_1d("acks2/kk:firstnbr_X",nmax); + d_firstnbr_X = typename AT::t_bigint_1d("acks2/kk:firstnbr_X",nmax); d_numnbrs_X = typename AT::t_int_1d("acks2/kk:numnbrs_X",nmax); - d_jlist_X = typename AT::t_int_1d("acks2/kk:jlist_X",m_cap); - d_val_X = typename AT::t_ffloat_1d("acks2/kk:val_X",m_cap); + d_jlist_X = typename AT::t_int_1d("acks2/kk:jlist_X",m_cap_big); + d_val_X = typename AT::t_ffloat_1d("acks2/kk:val_X",m_cap_big); } /* ---------------------------------------------------------------------- */ @@ -566,7 +567,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2Zero, const int &ii) template template KOKKOS_INLINE_FUNCTION -void FixACKS2ReaxFFKokkos::compute_h_item(int ii, int &m_fill, const bool &final) const +void FixACKS2ReaxFFKokkos::compute_h_item(int ii, bigint &m_fill, const bool &final) const { const int i = d_ilist[ii]; int j,jj,jtype; @@ -619,7 +620,7 @@ void FixACKS2ReaxFFKokkos::compute_h_item(int ii, int &m_fill, const m_fill++; } if (final) - d_numnbrs[i] = m_fill - d_firstnbr[i]; + d_numnbrs[i] = int(m_fill - d_firstnbr[i]); } } @@ -698,9 +699,9 @@ void FixACKS2ReaxFFKokkos::compute_h_team( // calculate the global memory offset from where the H matrix values to be // calculated by the current team will be stored in d_val - int team_firstnbr_idx = 0; + bigint team_firstnbr_idx = 0; Kokkos::single(Kokkos::PerTeam(team), - [=](int &val) { + [=](bigint &val) { int totalnbrs = s_firstnbr[lastatom - firstatom - 1] + s_numnbrs[lastatom - firstatom - 1]; val = Kokkos::atomic_fetch_add(&d_mfill_offset(), totalnbrs); @@ -726,7 +727,7 @@ void FixACKS2ReaxFFKokkos::compute_h_team( int jnum = s_numnbrs[idx]; // calculate the write-offset for atom-i's first neighbor - int atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; + bigint atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; Kokkos::single(Kokkos::PerThread(team), [&]() { d_firstnbr[i] = atomi_firstnbr_idx; }); @@ -739,7 +740,7 @@ void FixACKS2ReaxFFKokkos::compute_h_team( // are processed in batches and the batch size is vector_length for (int jj_start = 0; jj_start < jnum; jj_start += vector_length) { - int atomi_nbr_writeIdx = atomi_firstnbr_idx + atomi_nbrs_inH; + bigint atomi_nbr_writeIdx = atomi_firstnbr_idx + atomi_nbrs_inH; // count the # of neighbor atoms with non-zero electrostatic // interaction coefficients with atom-i in the current batch @@ -782,7 +783,8 @@ void FixACKS2ReaxFFKokkos::compute_h_team( valid = false; if (x(j, 2) == ztmp && x(j, 1) < ytmp) valid = false; - if (x(j, 2) == ztmp && x(j, 1) == ytmp && x(j, 0) < xtmp) + if (x(j, 2) == ztmp && x(j, 1) == ytmp && + x(j, 0) < xtmp) valid = false; } } @@ -851,7 +853,7 @@ double FixACKS2ReaxFFKokkos::calculate_H_k(const F_FLOAT &r, const F taper = taper * r + d_tap[0]; denom = r * r * r + shld; - denom = pow(denom,1.0/3.0); + denom = cbrt(denom); return taper * EV_TO_KCAL_PER_MOL / denom; } @@ -861,7 +863,7 @@ double FixACKS2ReaxFFKokkos::calculate_H_k(const F_FLOAT &r, const F template template KOKKOS_INLINE_FUNCTION -void FixACKS2ReaxFFKokkos::compute_x_item(int ii, int &m_fill, const bool &final) const +void FixACKS2ReaxFFKokkos::compute_x_item(int ii, bigint &m_fill, const bool &final) const { // The X_diag array is duplicated for OpenMP, atomic for GPU, and neither for Serial auto v_X_diag = ScatterViewHelper,decltype(dup_X_diag),decltype(ndup_X_diag)>::get(dup_X_diag,ndup_X_diag); @@ -927,7 +929,7 @@ void FixACKS2ReaxFFKokkos::compute_x_item(int ii, int &m_fill, const } if (final) { a_X_diag[i] += tmp; - d_numnbrs_X[i] = m_fill - d_firstnbr_X[i]; + d_numnbrs_X[i] = int(m_fill - d_firstnbr_X[i]); } } } @@ -1005,9 +1007,9 @@ void FixACKS2ReaxFFKokkos::compute_x_team( // calculate the global memory offset from where the H matrix values to be // calculated by the current team will be stored in d_val_X - int team_firstnbr_idx = 0; + bigint team_firstnbr_idx = 0; Kokkos::single(Kokkos::PerTeam(team), - [=](int &val) { + [=](bigint &val) { int totalnbrs = s_firstnbr[lastatom - firstatom - 1] + s_numnbrs[lastatom - firstatom - 1]; val = Kokkos::atomic_fetch_add(&d_mfill_offset(), totalnbrs); @@ -1033,7 +1035,7 @@ void FixACKS2ReaxFFKokkos::compute_x_team( int jnum = s_numnbrs[idx]; // calculate the write-offset for atom-i's first neighbor - int atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; + bigint atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; Kokkos::single(Kokkos::PerThread(team), [&]() { d_firstnbr_X[i] = atomi_firstnbr_idx; }); @@ -1046,7 +1048,7 @@ void FixACKS2ReaxFFKokkos::compute_x_team( // are processed in batches and the batch size is vector_length for (int jj_start = 0; jj_start < jnum; jj_start += vector_length) { - int atomi_nbr_writeIdx = atomi_firstnbr_idx + atomi_nbrs_inH; + bigint atomi_nbr_writeIdx = atomi_firstnbr_idx + atomi_nbrs_inH; // count the # of neighbor atoms with non-zero electrostatic // interaction coefficients with atom-i in the current batch @@ -1464,7 +1466,7 @@ void FixACKS2ReaxFFKokkos::operator() (TagACKS2SparseMatvec3_Half::operator() (TagACKS2SparseMatvec3_Half::operator() (TagACKS2SparseMatvec3_Full, c F_FLOAT sum; F_FLOAT sum2; - Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team, d_firstnbr[i], d_firstnbr[i] + d_numnbrs[i]), [&] (const int &jj, F_FLOAT &sum) { + Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team, d_firstnbr[i], d_firstnbr[i] + d_numnbrs[i]), [&] (const bigint &jj, F_FLOAT &sum) { const int j = d_jlist(jj); sum += d_val(jj) * d_xx[j]; }, sum); team.team_barrier(); - Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team, d_firstnbr_X[i], d_firstnbr_X[i] + d_numnbrs_X[i]), [&] (const int &jj, F_FLOAT &sum2) { + Kokkos::parallel_reduce(Kokkos::TeamThreadRange(team, d_firstnbr_X[i], d_firstnbr_X[i] + d_numnbrs_X[i]), [&] (const bigint &jj, F_FLOAT &sum2) { const int j = d_jlist_X(jj); sum2 += d_val_X(jj) * d_xx[NN + j]; }, sum2); @@ -1865,8 +1867,8 @@ double FixACKS2ReaxFFKokkos::memory_usage() bytes += nmax*4 * sizeof(double); // storage bytes += size*11 * sizeof(double); // storage bytes += n_cap*4 * sizeof(int); // matrix... - bytes += m_cap*2 * sizeof(int); - bytes += m_cap*2 * sizeof(double); + bytes += m_cap_big*2 * sizeof(int); + bytes += m_cap_big*2 * sizeof(double); return bytes; } diff --git a/src/KOKKOS/fix_acks2_reaxff_kokkos.h b/src/KOKKOS/fix_acks2_reaxff_kokkos.h index cb16b4cd24..6adca39d17 100644 --- a/src/KOKKOS/fix_acks2_reaxff_kokkos.h +++ b/src/KOKKOS/fix_acks2_reaxff_kokkos.h @@ -74,7 +74,7 @@ class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF, public KokkosBase { DAT::tdual_ffloat_1d get_s() {return k_s;} KOKKOS_INLINE_FUNCTION - void num_neigh_item(int, int&) const; + void num_neigh_item(int, bigint&) const; KOKKOS_INLINE_FUNCTION void operator()(TagACKS2Zero, const int&) const; @@ -84,7 +84,7 @@ class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF, public KokkosBase { template KOKKOS_INLINE_FUNCTION - void compute_h_item(int, int &, const bool &) const; + void compute_h_item(int, bigint &, const bool &) const; template KOKKOS_INLINE_FUNCTION @@ -92,7 +92,7 @@ class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF, public KokkosBase { template KOKKOS_INLINE_FUNCTION - void compute_x_item(int, int &, const bool &) const; + void compute_x_item(int, bigint &, const bool &) const; template KOKKOS_INLINE_FUNCTION @@ -173,8 +173,9 @@ class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF, public KokkosBase { int allocated_flag, last_allocate; int need_dup,prev_last_rows_rank; double* buf; + bigint m_cap_big; - typename AT::t_int_scalar d_mfill_offset; + typename AT::t_bigint_scalar d_mfill_offset; typedef Kokkos::DualView tdual_int_1d; Kokkos::DualView k_params; @@ -197,12 +198,12 @@ class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF, public KokkosBase { DAT::tdual_ffloat_2d k_bcut; typename AT::t_ffloat_2d d_bcut; - typename AT::t_int_1d d_firstnbr; + typename AT::t_bigint_1d d_firstnbr; typename AT::t_int_1d d_numnbrs; typename AT::t_int_1d d_jlist; typename AT::t_ffloat_1d d_val; - typename AT::t_int_1d d_firstnbr_X; + typename AT::t_bigint_1d d_firstnbr_X; typename AT::t_int_1d d_numnbrs_X; typename AT::t_int_1d d_jlist_X; typename AT::t_ffloat_1d d_val_X; @@ -264,21 +265,21 @@ class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF, public KokkosBase { template struct FixACKS2ReaxFFKokkosNumNeighFunctor { typedef DeviceType device_type; - typedef int value_type; + typedef bigint value_type; FixACKS2ReaxFFKokkos c; FixACKS2ReaxFFKokkosNumNeighFunctor(FixACKS2ReaxFFKokkos* c_ptr):c(*c_ptr) { c.cleanup_copy(); }; KOKKOS_INLINE_FUNCTION - void operator()(const int ii, int &maxneigh) const { - c.num_neigh_item(ii, maxneigh); + void operator()(const int ii, bigint &totneigh) const { + c.num_neigh_item(ii, totneigh); } }; template struct FixACKS2ReaxFFKokkosComputeHFunctor { int atoms_per_team, vector_length; - typedef int value_type; + typedef bigint value_type; typedef Kokkos::ScratchMemorySpace scratch_space; FixACKS2ReaxFFKokkos c; @@ -293,7 +294,7 @@ struct FixACKS2ReaxFFKokkosComputeHFunctor { }; KOKKOS_INLINE_FUNCTION - void operator()(const int ii, int &m_fill, const bool &final) const { + void operator()(const int ii, bigint &m_fill, const bool &final) const { c.template compute_h_item(ii,m_fill,final); } @@ -325,7 +326,7 @@ struct FixACKS2ReaxFFKokkosComputeHFunctor { template struct FixACKS2ReaxFFKokkosComputeXFunctor { int atoms_per_team, vector_length; - typedef int value_type; + typedef bigint value_type; typedef Kokkos::ScratchMemorySpace scratch_space; FixACKS2ReaxFFKokkos c; @@ -340,7 +341,7 @@ struct FixACKS2ReaxFFKokkosComputeXFunctor { }; KOKKOS_INLINE_FUNCTION - void operator()(const int ii, int &m_fill, const bool &final) const { + void operator()(const int ii, bigint &m_fill, const bool &final) const { c.template compute_x_item(ii,m_fill,final); } diff --git a/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp b/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp index deb41944bc..f93f6cb70e 100644 --- a/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reaxff_kokkos.cpp @@ -62,7 +62,8 @@ FixQEqReaxFFKokkos(LAMMPS *lmp, int narg, char **arg) : datamask_read = X_MASK | V_MASK | F_MASK | Q_MASK | MASK_MASK | TYPE_MASK | TAG_MASK; datamask_modify = X_MASK; - nmax = m_cap = 0; + nmax = 0; + m_cap_big = 0; allocated_flag = 0; nprev = 4; maxexchange = nprev*2; @@ -71,7 +72,7 @@ FixQEqReaxFFKokkos(LAMMPS *lmp, int narg, char **arg) : memory->destroy(t_hist); grow_arrays(atom->nmax); - d_mfill_offset = typename AT::t_int_scalar("qeq/kk:mfill_offset"); + d_mfill_offset = typename AT::t_bigint_scalar("qeq/kk:mfill_offset"); converged = 0; } @@ -301,10 +302,10 @@ void FixQEqReaxFFKokkos::pre_force(int /*vflag*/) template KOKKOS_INLINE_FUNCTION -void FixQEqReaxFFKokkos::num_neigh_item(int ii, int &maxneigh) const +void FixQEqReaxFFKokkos::num_neigh_item(int ii, bigint &totneigh) const { const int i = d_ilist[ii]; - maxneigh += d_numneigh[i]; + totneigh += d_numneigh[i]; } /* ---------------------------------------------------------------------- */ @@ -316,25 +317,25 @@ void FixQEqReaxFFKokkos::allocate_matrix() // determine the total space for the H matrix - m_cap = 0; + m_cap_big = 0; // limit scope of functor to allow deallocation of views { FixQEqReaxFFKokkosNumNeighFunctor neigh_functor(this); - Kokkos::parallel_reduce(nn,neigh_functor,m_cap); + Kokkos::parallel_reduce(nn,neigh_functor,m_cap_big); } // deallocate first to reduce memory overhead - d_firstnbr = typename AT::t_int_1d(); + d_firstnbr = typename AT::t_bigint_1d(); d_numnbrs = typename AT::t_int_1d(); d_jlist = typename AT::t_int_1d(); d_val = typename AT::t_ffloat_1d(); - d_firstnbr = typename AT::t_int_1d("qeq/kk:firstnbr",nmax); + d_firstnbr = typename AT::t_bigint_1d("qeq/kk:firstnbr",nmax); d_numnbrs = typename AT::t_int_1d("qeq/kk:numnbrs",nmax); - d_jlist = typename AT::t_int_1d("qeq/kk:jlist",m_cap); - d_val = typename AT::t_ffloat_1d("qeq/kk:val",m_cap); + d_jlist = typename AT::t_int_1d("qeq/kk:jlist",m_cap_big); + d_val = typename AT::t_ffloat_1d("qeq/kk:val",m_cap_big); } /* ---------------------------------------------------------------------- */ @@ -405,7 +406,7 @@ void FixQEqReaxFFKokkos::operator()(TagQEqZero, const int &ii) const template template KOKKOS_INLINE_FUNCTION -void FixQEqReaxFFKokkos::compute_h_item(int ii, int &m_fill, const bool &final) const +void FixQEqReaxFFKokkos::compute_h_item(int ii, bigint &m_fill, const bool &final) const { const int i = d_ilist[ii]; int j,jj,jtype; @@ -458,7 +459,7 @@ void FixQEqReaxFFKokkos::compute_h_item(int ii, int &m_fill, const b m_fill++; } if (final) - d_numnbrs[i] = m_fill - d_firstnbr[i]; + d_numnbrs[i] = int(m_fill - d_firstnbr[i]); } } @@ -537,9 +538,9 @@ void FixQEqReaxFFKokkos::compute_h_team( // calculate the global memory offset from where the H matrix values to be // calculated by the current team will be stored in d_val - int team_firstnbr_idx = 0; + bigint team_firstnbr_idx = 0; Kokkos::single(Kokkos::PerTeam(team), - [=](int &val) { + [=](bigint &val) { int totalnbrs = s_firstnbr[lastatom - firstatom - 1] + s_numnbrs[lastatom - firstatom - 1]; val = Kokkos::atomic_fetch_add(&d_mfill_offset(), totalnbrs); @@ -565,7 +566,7 @@ void FixQEqReaxFFKokkos::compute_h_team( int jnum = s_numnbrs[idx]; // removed "const" to work around GCC 7 bug // calculate the write-offset for atom-i's first neighbor - int atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; + bigint atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; Kokkos::single(Kokkos::PerThread(team), [&]() { d_firstnbr[i] = atomi_firstnbr_idx; }); @@ -578,7 +579,7 @@ void FixQEqReaxFFKokkos::compute_h_team( // are processed in batches and the batch size is vector_length for (int jj_start = 0; jj_start < jnum; jj_start += vector_length) { - int atomi_nbr_writeIdx = atomi_firstnbr_idx + atomi_nbrs_inH; + bigint atomi_nbr_writeIdx = atomi_firstnbr_idx + atomi_nbrs_inH; // count the # of neighbor atoms with non-zero electrostatic // interaction coefficients with atom-i in the current batch @@ -935,7 +936,7 @@ void FixQEqReaxFFKokkos::operator()(TagQEqSparseMatvec2_Half::operator()(TagQEqSparseMatvec2_Full, const const int i = d_ilist[k]; if (mask[i] & groupbit) { F_FLOAT2 doitmp; - Kokkos::parallel_reduce(Kokkos::ThreadVectorRange(team, d_firstnbr[i], d_firstnbr[i] + d_numnbrs[i]), [&] (const int &jj, F_FLOAT2& doi) { + Kokkos::parallel_reduce(Kokkos::ThreadVectorRange(team, d_firstnbr[i], d_firstnbr[i] + d_numnbrs[i]), [&] (const bigint &jj, F_FLOAT2& doi) { const int j = d_jlist(jj); const auto d_val_jj = d_val(jj); if (!(converged & 1)) @@ -1286,8 +1287,8 @@ double FixQEqReaxFFKokkos::memory_usage() bytes = atom->nmax*nprev*2 * sizeof(F_FLOAT); // s_hist & t_hist bytes += (double)atom->nmax*8 * sizeof(F_FLOAT); // storage bytes += (double)n_cap*2 * sizeof(int); // matrix... - bytes += (double)m_cap * sizeof(int); - bytes += (double)m_cap * sizeof(F_FLOAT); + bytes += (double)m_cap_big * sizeof(int); + bytes += (double)m_cap_big * sizeof(F_FLOAT); return bytes; } diff --git a/src/KOKKOS/fix_qeq_reaxff_kokkos.h b/src/KOKKOS/fix_qeq_reaxff_kokkos.h index 92026b209d..0733a518a2 100644 --- a/src/KOKKOS/fix_qeq_reaxff_kokkos.h +++ b/src/KOKKOS/fix_qeq_reaxff_kokkos.h @@ -70,7 +70,7 @@ class FixQEqReaxFFKokkos : public FixQEqReaxFF, public KokkosBase { void pre_force(int) override; KOKKOS_INLINE_FUNCTION - void num_neigh_item(int, int&) const; + void num_neigh_item(int, bigint&) const; KOKKOS_INLINE_FUNCTION void operator()(TagQEqZero, const int&) const; @@ -80,7 +80,7 @@ class FixQEqReaxFFKokkos : public FixQEqReaxFF, public KokkosBase { template KOKKOS_INLINE_FUNCTION - void compute_h_item(int, int &, const bool &) const; + void compute_h_item(int, bigint &, const bool &) const; template KOKKOS_INLINE_FUNCTION @@ -201,8 +201,9 @@ class FixQEqReaxFFKokkos : public FixQEqReaxFF, public KokkosBase { int allocated_flag, last_allocate; int need_dup; int converged; + bigint m_cap_big; - typename AT::t_int_scalar d_mfill_offset; + typename AT::t_bigint_scalar d_mfill_offset; typedef Kokkos::DualView tdual_int_1d; Kokkos::DualView k_params; @@ -227,7 +228,7 @@ class FixQEqReaxFFKokkos : public FixQEqReaxFF, public KokkosBase { DAT::tdual_ffloat_1d k_tap; typename AT::t_ffloat_1d d_tap; - typename AT::t_int_1d d_firstnbr; + typename AT::t_bigint_1d d_firstnbr; typename AT::t_int_1d d_numnbrs; typename AT::t_int_1d d_jlist; typename AT::t_ffloat_1d d_val; @@ -290,21 +291,21 @@ class FixQEqReaxFFKokkos : public FixQEqReaxFF, public KokkosBase { template struct FixQEqReaxFFKokkosNumNeighFunctor { typedef DeviceType device_type; - typedef int value_type; + typedef bigint value_type; FixQEqReaxFFKokkos c; FixQEqReaxFFKokkosNumNeighFunctor(FixQEqReaxFFKokkos* c_ptr):c(*c_ptr) { c.cleanup_copy(); }; KOKKOS_INLINE_FUNCTION - void operator()(const int ii, int &maxneigh) const { - c.num_neigh_item(ii, maxneigh); + void operator()(const int ii, bigint &totneigh) const { + c.num_neigh_item(ii, totneigh); } }; template struct FixQEqReaxFFKokkosComputeHFunctor { int atoms_per_team, vector_length; - typedef int value_type; + typedef bigint value_type; typedef Kokkos::ScratchMemorySpace scratch_space; FixQEqReaxFFKokkos c; @@ -319,7 +320,7 @@ struct FixQEqReaxFFKokkosComputeHFunctor { }; KOKKOS_INLINE_FUNCTION - void operator()(const int ii, int &m_fill, const bool &final) const { + void operator()(const int ii, bigint &m_fill, const bool &final) const { c.template compute_h_item(ii,m_fill,final); } diff --git a/src/KOKKOS/fix_shake_kokkos.cpp b/src/KOKKOS/fix_shake_kokkos.cpp index b25e2dad59..47f932d8f2 100644 --- a/src/KOKKOS/fix_shake_kokkos.cpp +++ b/src/KOKKOS/fix_shake_kokkos.cpp @@ -172,7 +172,6 @@ void FixShakeKokkos::init() k_angle_distance.sync(); } - /* ---------------------------------------------------------------------- run setup for minimization. ------------------------------------------------------------------------- */ diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index f4ba967c9a..b3edb0e6a0 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -149,6 +149,14 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) set_flag = 1; } } + if ((str = getenv("PALS_LOCAL_RANKID"))) { + if (ngpus > 0) { + int local_rank = atoi(str); + device = local_rank % ngpus; + if (device >= skip_gpu) device++; + set_flag = 1; + } + } if (ngpus > 1 && !set_flag) error->all(FLERR,"Could not determine local MPI rank for multiple " @@ -638,10 +646,10 @@ void KokkosLMP::accelerator(int narg, char **arg) called by Finish ------------------------------------------------------------------------- */ -int KokkosLMP::neigh_count(int m) +bigint KokkosLMP::neigh_count(int m) { int inum = 0; - int nneigh = 0; + bigint nneigh = 0; ArrayTypes::t_int_1d h_ilist; ArrayTypes::t_int_1d h_numneigh; diff --git a/src/KOKKOS/kokkos.h b/src/KOKKOS/kokkos.h index 748aff7f83..419de62dec 100644 --- a/src/KOKKOS/kokkos.h +++ b/src/KOKKOS/kokkos.h @@ -64,7 +64,7 @@ class KokkosLMP : protected Pointers { static void initialize(const Kokkos::InitializationSettings&, Error *); static void finalize(); void accelerator(int, char **); - int neigh_count(int); + bigint neigh_count(int); template int need_dup(int qeq_flag = 0) diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index 7f0eb5c105..9d3e3fca0f 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -341,17 +341,17 @@ public: // define precision // handle global precision, force, energy, positions, kspace separately -#ifndef PRECISION -#define PRECISION 2 +#ifndef LMP_PRECISION +#define LMP_PRECISION 2 #endif -#if PRECISION==1 +#if LMP_PRECISION==1 typedef float LMP_FLOAT; #else typedef double LMP_FLOAT; #endif #ifndef PREC_FORCE -#define PREC_FORCE PRECISION +#define PREC_FORCE LMP_PRECISION #endif #if PREC_FORCE==1 @@ -361,7 +361,7 @@ typedef double F_FLOAT; #endif #ifndef PREC_ENERGY -#define PREC_ENERGY PRECISION +#define PREC_ENERGY LMP_PRECISION #endif #if PREC_ENERGY==1 @@ -521,7 +521,7 @@ struct BinOp3DLAMMPS { }; #ifndef PREC_POS -#define PREC_POS PRECISION +#define PREC_POS LMP_PRECISION #endif #if PREC_POS==1 @@ -531,7 +531,7 @@ typedef double X_FLOAT; #endif #ifndef PREC_VELOCITIES -#define PREC_VELOCITIES PRECISION +#define PREC_VELOCITIES LMP_PRECISION #endif #if PREC_VELOCITIES==1 @@ -641,6 +641,14 @@ typedef tdual_int_scalar::t_dev_const t_int_scalar_const; typedef tdual_int_scalar::t_dev_um t_int_scalar_um; typedef tdual_int_scalar::t_dev_const_um t_int_scalar_const_um; +typedef Kokkos:: + DualView tdual_bigint_scalar; +typedef tdual_bigint_scalar::t_dev t_bigint_scalar; +typedef tdual_bigint_scalar::t_dev_const t_bigint_scalar_const; +typedef tdual_bigint_scalar::t_dev_um t_bigint_scalar_um; +typedef tdual_bigint_scalar::t_dev_const_um t_bigint_scalar_const_um; +typedef tdual_bigint_scalar::t_dev_const_randomread t_bigint_scalar_randomread; + typedef Kokkos:: DualView tdual_tagint_scalar; typedef tdual_tagint_scalar::t_dev t_tagint_scalar; @@ -666,6 +674,14 @@ typedef tdual_int_1d::t_dev_um t_int_1d_um; typedef tdual_int_1d::t_dev_const_um t_int_1d_const_um; typedef tdual_int_1d::t_dev_const_randomread t_int_1d_randomread; +typedef Kokkos:: + DualView tdual_bigint_1d; +typedef tdual_bigint_1d::t_dev t_bigint_1d; +typedef tdual_bigint_1d::t_dev_const t_bigint_1d_const; +typedef tdual_bigint_1d::t_dev_um t_bigint_1d_um; +typedef tdual_bigint_1d::t_dev_const_um t_bigint_1d_const_um; +typedef tdual_bigint_1d::t_dev_const_randomread t_bigint_1d_randomread; + typedef Kokkos:: DualView tdual_int_1d_3; typedef tdual_int_1d_3::t_dev t_int_1d_3; @@ -974,6 +990,12 @@ typedef tdual_int_scalar::t_host_const t_int_scalar_const; typedef tdual_int_scalar::t_host_um t_int_scalar_um; typedef tdual_int_scalar::t_host_const_um t_int_scalar_const_um; +typedef Kokkos::DualView tdual_bigint_scalar; +typedef tdual_bigint_scalar::t_host t_bigint_scalar; +typedef tdual_bigint_scalar::t_host_const t_bigint_scalar_const; +typedef tdual_bigint_scalar::t_host_um t_bigint_scalar_um; +typedef tdual_bigint_scalar::t_host_const_um t_bigint_scalar_const_um; + typedef Kokkos::DualView tdual_tagint_scalar; typedef tdual_tagint_scalar::t_host t_tagint_scalar; typedef tdual_tagint_scalar::t_host_const t_tagint_scalar_const; @@ -994,6 +1016,13 @@ typedef tdual_int_1d::t_host_um t_int_1d_um; typedef tdual_int_1d::t_host_const_um t_int_1d_const_um; typedef tdual_int_1d::t_host_const_randomread t_int_1d_randomread; +typedef Kokkos::DualView tdual_bigint_1d; +typedef tdual_bigint_1d::t_host t_bigint_1d; +typedef tdual_bigint_1d::t_host_const t_bigint_1d_const; +typedef tdual_bigint_1d::t_host_um t_bigint_1d_um; +typedef tdual_bigint_1d::t_host_const_um t_bigint_1d_const_um; +typedef tdual_bigint_1d::t_host_const_randomread t_bigint_1d_randomread; + typedef Kokkos::DualView tdual_int_1d_3; typedef tdual_int_1d_3::t_host t_int_1d_3; typedef tdual_int_1d_3::t_host_const t_int_1d_3_const; diff --git a/src/KOKKOS/pair_reaxff_kokkos.cpp b/src/KOKKOS/pair_reaxff_kokkos.cpp index 7dd86e07a9..7af5889e62 100644 --- a/src/KOKKOS/pair_reaxff_kokkos.cpp +++ b/src/KOKKOS/pair_reaxff_kokkos.cpp @@ -1502,13 +1502,11 @@ void PairReaxFFKokkos::allocate_array() } if (cut_hbsq > 0.0) { - MemKK::realloc_kokkos(d_hb_first,"reaxff/kk:hb_first",nmax); MemKK::realloc_kokkos(d_hb_num,"reaxff/kk:hb_num",nmax); - MemKK::realloc_kokkos(d_hb_list,"reaxff/kk:hb_list",nmax*maxhb); + MemKK::realloc_kokkos(d_hb_list,"reaxff/kk:hb_list", nmax, maxhb); } - MemKK::realloc_kokkos(d_bo_first,"reaxff/kk:bo_first",nmax); MemKK::realloc_kokkos(d_bo_num,"reaxff/kk:bo_num",nmax); - MemKK::realloc_kokkos(d_bo_list,"reaxff/kk:bo_list",nmax*maxbo); + MemKK::realloc_kokkos(d_bo_list,"reaxff/kk:bo_list", nmax, maxbo); MemKK::realloc_kokkos(d_BO,"reaxff/kk:BO",nmax,maxbo); MemKK::realloc_kokkos(d_BO_s,"reaxff/kk:BO",nmax,maxbo); @@ -1539,9 +1537,9 @@ void PairReaxFFKokkos::allocate_array() MemKK::realloc_kokkos(d_Deltap,"reaxff/kk:Deltap",nmax); MemKK::realloc_kokkos(d_total_bo,"reaxff/kk:total_bo",nmax); - MemKK::realloc_kokkos(d_Cdbo,"reaxff/kk:Cdbo",nmax,3*maxbo); - MemKK::realloc_kokkos(d_Cdbopi,"reaxff/kk:Cdbopi",nmax,3*maxbo); - MemKK::realloc_kokkos(d_Cdbopi2,"reaxff/kk:Cdbopi2",nmax,3*maxbo); + MemKK::realloc_kokkos(d_Cdbo,"reaxff/kk:Cdbo",nmax,maxbo); + MemKK::realloc_kokkos(d_Cdbopi,"reaxff/kk:Cdbopi",nmax,maxbo); + MemKK::realloc_kokkos(d_Cdbopi2,"reaxff/kk:Cdbopi2",nmax,maxbo); MemKK::realloc_kokkos(d_Delta,"reaxff/kk:Delta",nmax); MemKK::realloc_kokkos(d_Delta_boc,"reaxff/kk:Delta_boc",nmax); @@ -1598,19 +1596,10 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfBlocking< F_FLOAT dDeltap_self_i[3] = {0.0,0.0,0.0}; F_FLOAT total_bo_i = 0.0; - d_bo_first[i] = i*maxbo; - const int bo_first_i = d_bo_first[i]; - int ihb = -1; - int hb_first_i; - if (cut_hbsq > 0.0) { + if (cut_hbsq > 0.0) ihb = paramssing(itype).p_hbond; - if (ihb == 1) { - d_hb_first[i] = i*maxhb; - hb_first_i = d_hb_first[i]; - } - } int nnz; blocking_t selected_jj[blocksize]; @@ -1624,9 +1613,6 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfBlocking< int j = d_neighbors(i,jj); j &= NEIGHMASK; - d_bo_first[j] = j*maxbo; - d_hb_first[j] = j*maxhb; - delij[0] = x(j,0) - xtmp; delij[1] = x(j,1) - ytmp; delij[2] = x(j,2) - ztmp; @@ -1655,7 +1641,7 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfBlocking< const F_FLOAT rsq = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2]; // hbond list - build_hb_list(rsq, i, hb_first_i, ihb, j, jtype); + build_hb_list(rsq, i, ihb, j, jtype); if (rsq > cut_bosq) continue; @@ -1672,23 +1658,23 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfBlocking< BO = BO_s + BO_pi + BO_pi2; if (BO < bo_cut) continue; - int ii_index = -1; - int jj_index = -1; - if (build_bo_list(bo_first_i, i, j, ii_index, jj_index)) { + int i_index = -1; + int j_index = -1; + if (build_bo_list(i, j, i_index, j_index)) { // from BondOrder1 - d_BO(i,jj_index) = BO; - d_BO_s(i,jj_index) = BO_s; + d_BO(i,j_index) = BO; + d_BO_s(i,j_index) = BO_s; - d_BO(j,ii_index) = BO; - d_BO_s(j,ii_index) = BO_s; + d_BO(j,i_index) = BO; + d_BO_s(j,i_index) = BO_s; - d_BO_pi(j,ii_index) = BO_pi; - d_BO_pi2(j,ii_index) = BO_pi2; + d_BO_pi(j,i_index) = BO_pi; + d_BO_pi2(j,i_index) = BO_pi2; - d_BO_pi(i,jj_index) = BO_pi; - d_BO_pi2(i,jj_index) = BO_pi2; + d_BO_pi(i,j_index) = BO_pi; + d_BO_pi2(i,j_index) = BO_pi2; F_FLOAT Cln_BOp_s = p_bo2 * C12 / rij / rij; F_FLOAT Cln_BOp_pi = p_bo4 * C34 / rij / rij; @@ -1701,18 +1687,18 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfBlocking< for (int d = 0; d < 3; d++) dDeltap_self_i[d] += dBOp_i[d]; for (int d = 0; d < 3; d++) a_dDeltap_self(j,d) += -dBOp_i[d]; - d_dln_BOp_pi(i,jj_index) = -(BO_pi*Cln_BOp_pi); - d_dln_BOp_pi(j,ii_index) = -(BO_pi*Cln_BOp_pi); + d_dln_BOp_pi(i,j_index) = -(BO_pi*Cln_BOp_pi); + d_dln_BOp_pi(j,i_index) = -(BO_pi*Cln_BOp_pi); - d_dln_BOp_pi2(i,jj_index) = -(BO_pi2*Cln_BOp_pi2); - d_dln_BOp_pi2(j,ii_index) = -(BO_pi2*Cln_BOp_pi2); + d_dln_BOp_pi2(i,j_index) = -(BO_pi2*Cln_BOp_pi2); + d_dln_BOp_pi2(j,i_index) = -(BO_pi2*Cln_BOp_pi2); - d_dBOp(i,jj_index) = -(BO_s*Cln_BOp_s+BO_pi*Cln_BOp_pi+BO_pi2*Cln_BOp_pi2); - d_dBOp(j,ii_index) = -(BO_s*Cln_BOp_s+BO_pi*Cln_BOp_pi+BO_pi2*Cln_BOp_pi2); - d_BO(i,jj_index) = BO - bo_cut; - d_BO(j,ii_index) = BO - bo_cut; - d_BO_s(i,jj_index) = BO_s - bo_cut; - d_BO_s(j,ii_index) = BO_s - bo_cut; + d_dBOp(i,j_index) = -(BO_s*Cln_BOp_s+BO_pi*Cln_BOp_pi+BO_pi2*Cln_BOp_pi2); + d_dBOp(j,i_index) = -(BO_s*Cln_BOp_s+BO_pi*Cln_BOp_pi+BO_pi2*Cln_BOp_pi2); + d_BO(i,j_index) = BO - bo_cut; + d_BO(j,i_index) = BO - bo_cut; + d_BO_s(i,j_index) = BO_s - bo_cut; + d_BO_s(j,i_index) = BO_s - bo_cut; total_bo_i += (BO - bo_cut); a_total_bo[j] += (BO - bo_cut); } @@ -1742,19 +1728,10 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfBlockingP F_FLOAT C12, C34, C56, BO_s, BO_pi, BO_pi2, BO, delij[3]; - d_bo_first[i] = i*maxbo; - const int bo_first_i = d_bo_first[i]; - int ihb = -1; - int hb_first_i; - if (cut_hbsq > 0.0) { + if (cut_hbsq > 0.0) ihb = paramssing(itype).p_hbond; - if (ihb == 1) { - d_hb_first[i] = i*maxhb; - hb_first_i = d_hb_first[i]; - } - } int nnz; blocking_t selected_jj[blocksize]; @@ -1772,9 +1749,6 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfBlockingP int j = d_neighbors(i,jj); j &= NEIGHMASK; - d_bo_first[j] = j*maxbo; - d_hb_first[j] = j*maxhb; - delij[0] = x(j,0) - xtmp; delij[1] = x(j,1) - ytmp; delij[2] = x(j,2) - ztmp; @@ -1800,7 +1774,7 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfBlockingP const F_FLOAT rsq = delij[0]*delij[0] + delij[1]*delij[1] + delij[2]*delij[2]; // hbond list - build_hb_list(rsq, i, hb_first_i, ihb, j, jtype); + build_hb_list(rsq, i, ihb, j, jtype); if (rsq > cut_bosq) continue; @@ -1817,9 +1791,9 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfBlockingP BO = BO_s + BO_pi + BO_pi2; if (BO < bo_cut) continue; - int ii_index = -1; - int jj_index = -1; - build_bo_list(bo_first_i, i, j, ii_index, jj_index); + int i_index = -1; + int j_index = -1; + build_bo_list(i, j, i_index, j_index); } } } @@ -1840,26 +1814,15 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfPreview 0.0) { + if (cut_hbsq > 0.0) ihb = paramssing(itype).p_hbond; - if (ihb == 1) { - d_hb_first[i] = i*maxhb; - hb_first_i = d_hb_first[i]; - } - } for (int jj = 0; jj < jnum; jj++) { int j = d_neighbors(i,jj); j &= NEIGHMASK; - d_bo_first[j] = j*maxbo; - d_hb_first[j] = j*maxhb; const int jtype = type(j); delij[0] = x(j,0) - xtmp; @@ -1868,7 +1831,7 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfPreview(rsq, i, hb_first_i, ihb, j, jtype); + build_hb_list(rsq, i, ihb, j, jtype); if (rsq > cut_bosq) continue; @@ -1885,10 +1848,10 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfPreview(bo_first_i, i, j, ii_index, jj_index); + build_bo_list(i, j, i_index, j_index); } } @@ -1897,7 +1860,7 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsHalfPreview template KOKKOS_INLINE_FUNCTION -void PairReaxFFKokkos::build_hb_list(F_FLOAT rsq, int i, int hb_first_i, int ihb, int j, int jtype) const { +void PairReaxFFKokkos::build_hb_list(F_FLOAT rsq, int i, int ihb, int j, int jtype) const { int i_index, j_index; int jhb = -1; @@ -1905,30 +1868,26 @@ void PairReaxFFKokkos::build_hb_list(F_FLOAT rsq, int i, int hb_firs jhb = paramssing(jtype).p_hbond; if (ihb == 1 && jhb == 2) { if (NEIGHFLAG == HALF) { - j_index = hb_first_i + d_hb_num[i]; + j_index = d_hb_num[i]; d_hb_num[i]++; } else - j_index = hb_first_i + Kokkos::atomic_fetch_add(&d_hb_num[i],1); + j_index = Kokkos::atomic_fetch_add(&d_hb_num[i],1); - const int jj_index = j_index - hb_first_i; - - if (jj_index >= maxhb) - d_resize_hb() = MAX(d_resize_hb(),jj_index+1); + if (j_index >= maxhb) + d_resize_hb() = MAX(d_resize_hb(), j_index+1); else - d_hb_list[j_index] = j; + d_hb_list(i, j_index) = j; } else if (j < nlocal && ihb == 2 && jhb == 1) { if (NEIGHFLAG == HALF) { - i_index = d_hb_first[j] + d_hb_num[j]; + i_index = d_hb_num[j]; d_hb_num[j]++; } else - i_index = d_hb_first[j] + Kokkos::atomic_fetch_add(&d_hb_num[j],1); + i_index = Kokkos::atomic_fetch_add(&d_hb_num[j],1); - const int ii_index = i_index - d_hb_first[j]; - - if (ii_index >= maxhb) - d_resize_hb() = MAX(d_resize_hb(),ii_index+1); + if (i_index >= maxhb) + d_resize_hb() = MAX(d_resize_hb(), i_index+1); else - d_hb_list[i_index] = i; + d_hb_list(j, i_index) = i; } } @@ -1939,31 +1898,27 @@ void PairReaxFFKokkos::build_hb_list(F_FLOAT rsq, int i, int hb_firs template template KOKKOS_INLINE_FUNCTION -bool PairReaxFFKokkos::build_bo_list(int bo_first_i, int i, int j, int& ii_index, int& jj_index) const { - int i_index, j_index; +bool PairReaxFFKokkos::build_bo_list(int i, int j, int& i_index, int& j_index) const { if (NEIGHFLAG == HALF) { - j_index = bo_first_i + d_bo_num[i]; - i_index = d_bo_first[j] + d_bo_num[j]; + j_index = d_bo_num[i]; + i_index = d_bo_num[j]; d_bo_num[i]++; d_bo_num[j]++; } else { - j_index = bo_first_i + Kokkos::atomic_fetch_add(&d_bo_num[i],1); - i_index = d_bo_first[j] + Kokkos::atomic_fetch_add(&d_bo_num[j],1); + j_index = Kokkos::atomic_fetch_add(&d_bo_num[i],1); + i_index = Kokkos::atomic_fetch_add(&d_bo_num[j],1); } - jj_index = j_index - bo_first_i; - ii_index = i_index - d_bo_first[j]; - bool set_dB_flag = true; - if (jj_index >= maxbo || ii_index >= maxbo) { - const int max_val = MAX(ii_index+1,jj_index+1); + if (j_index >= maxbo || i_index >= maxbo) { + const int max_val = MAX(i_index + 1, j_index + 1); d_resize_bo() = MAX(d_resize_bo(),max_val); set_dB_flag = false; } else { - d_bo_list[j_index] = j; - d_bo_list[i_index] = i; + d_bo_list(i, j_index) = j; + d_bo_list(j, i_index) = i; set_dB_flag = true; } @@ -1987,13 +1942,11 @@ void PairReaxFFKokkos::operator()(TagPairReaxBuildListsFull, const i F_FLOAT dDeltap_self_i[3] = {0.0,0.0,0.0}; F_FLOAT total_bo_i = 0.0; - const int j_start = d_bo_first[i]; - const int j_end = j_start + d_bo_num[i]; - for (int jj = j_start; jj < j_end; jj++) { - int j = d_bo_list[jj]; + const int jnum = d_bo_num[i]; + for (int j_index = 0; j_index < jnum; j_index++) { + int j = d_bo_list(i, j_index); j &= NEIGHMASK; const int jtype = type(j); - const int j_index = jj - j_start; delij[0] = x(j,0) - xtmp; delij[1] = x(j,1) - ytmp; delij[2] = x(j,2) - ztmp; @@ -2102,23 +2055,19 @@ void PairReaxFFKokkos::operator()(TagPairReaxBondOrder2, const int & const int i = d_ilist[ii]; const int itype = type(i); - const int j_start = d_bo_first[i]; - const int j_end = j_start + d_bo_num[i]; + const int jnum = d_bo_num[i]; const F_FLOAT val_i = paramssing(itype).valency; d_total_bo[i] = 0.0; F_FLOAT total_bo = 0.0; - for (int jj = j_start; jj < j_end; jj++) { - int j = d_bo_list[jj]; + for (int j_index = 0; j_index < jnum; j_index++) { + int j = d_bo_list(i, j_index); j &= NEIGHMASK; const int jtype = type(j); - const int j_index = jj - j_start; - const int i_index = maxbo+j_index; // calculate corrected BO and total bond order - const F_FLOAT val_j = paramssing(jtype).valency; const F_FLOAT ovc = paramstwbp(itype,jtype).ovc; const F_FLOAT v13cor = paramstwbp(itype,jtype).v13cor; @@ -2213,10 +2162,6 @@ void PairReaxFFKokkos::operator()(TagPairReaxBondOrder2, const int & d_Cdbo(i,j_index) = 0.0; d_Cdbopi(i,j_index) = 0.0; d_Cdbopi2(i,j_index) = 0.0; - d_Cdbo(j,i_index) = 0.0; - d_Cdbopi(j,i_index) = 0.0; - d_Cdbopi2(j,i_index) = 0.0; - d_CdDelta[j] = 0.0; } d_CdDelta[i] = 0.0; @@ -2271,20 +2216,18 @@ void PairReaxFFKokkos::operator()(TagPairReaxComputeMulti1, const in if (imass > 21.0) dfvl = 0.0; else dfvl = 1.0; - const int j_start = d_bo_first[i]; - const int j_end = j_start + d_bo_num[i]; + const int jnum = d_bo_num[i]; F_FLOAT sum_ovun1 = 0.0; F_FLOAT sum_ovun2 = 0.0; - for (int jj = j_start; jj < j_end; jj++) { - int j = d_bo_list[jj]; + for (int j_index = 0; j_index < jnum; j_index++) { + int j = d_bo_list(i, j_index); j &= NEIGHMASK; const int jtype = type(j); - const int j_index = jj - j_start; sum_ovun1 += paramstwbp(itype,jtype).p_ovun1 * paramstwbp(itype,jtype).De_s * d_BO(i,j_index); - sum_ovun2 += (d_Delta[j] - dfvl * d_Delta_lp_temp[j]) * (d_BO_pi(i,j_index) + d_BO_pi2(i,j_index)); + sum_ovun2 += (d_Delta[j] - dfvl * d_Delta_lp_temp[j]) * (d_BO_pi(i, j_index) + d_BO_pi2(i,j_index)); } d_sum_ovun(i,1) += sum_ovun1; d_sum_ovun(i,2) += sum_ovun2; @@ -2394,16 +2337,14 @@ void PairReaxFFKokkos::operator()(TagPairReaxComputeMulti2 0 || enobondsflag) a_CdDelta[i] += CEunder3; - const int j_start = d_bo_first[i]; - const int j_end = j_start + d_bo_num[i]; + const int jnum = d_bo_num[i]; F_FLOAT CdDelta_i = 0.0; - for (int jj = j_start; jj < j_end; jj++) { - int j = d_bo_list[jj]; + for (int j_index = 0; j_index < jnum; j_index++) { + int j = d_bo_list(i, j_index); j &= NEIGHMASK; const int jtype = type(j); const F_FLOAT jmass = paramssing(jtype).mass; - const int j_index = jj - j_start; const F_FLOAT De_s = paramstwbp(itype,jtype).De_s; // multibody lone pair: correction for C2 @@ -2453,24 +2394,23 @@ void PairReaxFFKokkos::operator()(TagPairReaxCountAngularTorsion(i, itype, j_start, j_end, location_angular); + int count_angular = preprocess_angular(i, itype, jnum, location_angular); location_angular = Kokkos::atomic_fetch_add(&d_count_angular_torsion(0), count_angular); if (POPULATE) { // Fill buffer for `i` - preprocess_angular(i, itype, j_start, j_end, location_angular); + preprocess_angular(i, itype, jnum, location_angular); } // Torsion @@ -2482,12 +2422,12 @@ void PairReaxFFKokkos::operator()(TagPairReaxCountAngularTorsion(i, itype, itag, xtmp, ytmp, ztmp, j_start, j_end, location_torsion); + int count_torsion = preprocess_torsion(i, itype, itag, xtmp, ytmp, ztmp, jnum, location_torsion); location_torsion = Kokkos::atomic_fetch_add(&d_count_angular_torsion(1), count_torsion); if (POPULATE) { // Fill buffer for `i` - preprocess_torsion(i, itype, itag, xtmp, ytmp, ztmp, j_start, j_end, location_torsion); + preprocess_torsion(i, itype, itag, xtmp, ytmp, ztmp, jnum, location_torsion); } } @@ -2496,7 +2436,7 @@ void PairReaxFFKokkos::operator()(TagPairReaxCountAngularTorsion KOKKOS_INLINE_FUNCTION -void PairReaxFFKokkos::compute_angular_sbo(int i, int itype, int j_start, int j_end) const { +void PairReaxFFKokkos::compute_angular_sbo(int i, int itype, int jnum) const { F_FLOAT SBO2, CSBO2, dSBO1, dSBO2; @@ -2506,8 +2446,7 @@ void PairReaxFFKokkos::compute_angular_sbo(int i, int itype, int j_s F_FLOAT SBOp = 0.0; F_FLOAT prod_SBO = 1.0; - for (int jj = j_start; jj < j_end; jj++) { - const int j_index = jj - j_start; + for (int j_index = 0; j_index < jnum; j_index++) { const F_FLOAT bo_ij = d_BO(i,j_index); SBOp += (d_BO_pi(i,j_index) + d_BO_pi2(i,j_index)); @@ -2560,29 +2499,26 @@ void PairReaxFFKokkos::compute_angular_sbo(int i, int itype, int j_s template template KOKKOS_INLINE_FUNCTION -int PairReaxFFKokkos::preprocess_angular(int i, int itype, int j_start, int j_end, int location_angular) const { +int PairReaxFFKokkos::preprocess_angular(int i, int itype, int jnum, int location_angular) const { int count_angular = 0; - for (int jj = j_start; jj < j_end; jj++) { - int j = d_bo_list[jj]; + for (int j_index = 0; j_index < jnum; j_index++) { + int j = d_bo_list(i, j_index); j &= NEIGHMASK; - const int j_index = jj - j_start; const F_FLOAT bo_ij = d_BO(i,j_index); if (bo_ij <= thb_cut) continue; if (i >= nlocal && j >= nlocal) continue; - const int i_index = maxbo + j_index; const int jtype = type(j); - for (int kk = jj+1; kk < j_end; kk++) { + for (int k_index = j_index + 1; k_index < jnum; k_index++) { //for (int kk = j_start; kk < j_end; kk++) { - int k = d_bo_list[kk]; + int k = d_bo_list(i, k_index); k &= NEIGHMASK; if (k == j) continue; - const int k_index = kk - j_start; const F_FLOAT bo_ik = d_BO(i,k_index); if (bo_ij <= thb_cut || bo_ik <= thb_cut || bo_ij * bo_ik <= thb_cutsq) continue; @@ -2600,14 +2536,14 @@ int PairReaxFFKokkos::preprocess_angular(int i, int itype, int j_sta pack.i0 = i; pack.i1 = j; pack.i2 = k; - pack.i3 = j_start; + pack.i3 = jnum; d_angular_pack(location_angular, 0) = pack; - // Second pack stores i_index, j_index, k_index, and j_end - pack.i0 = i_index; + // Second pack stores j_index and k_index + // i0 is unused because there's no i_index pack.i1 = j_index; pack.i2 = k_index; - pack.i3 = j_end; + // i3 is unused d_angular_pack(location_angular, 1) = pack; location_angular++; @@ -2626,17 +2562,16 @@ template template KOKKOS_INLINE_FUNCTION int PairReaxFFKokkos::preprocess_torsion(int i, int /*itype*/, tagint itag, - F_FLOAT xtmp, F_FLOAT ytmp, F_FLOAT ztmp, int j_start, int j_end, int location_torsion) const { + F_FLOAT xtmp, F_FLOAT ytmp, F_FLOAT ztmp, int jknum, int location_torsion) const { // in reaxff_torsion_angles: j = i, k = j, i = k; int count_torsion = 0; - for (int jj = j_start; jj < j_end; jj++) { - int j = d_bo_list[jj]; + for (int j_index = 0; j_index < jknum; j_index++) { + int j = d_bo_list(i, j_index); j &= NEIGHMASK; const tagint jtag = tag(j); - const int j_index = jj - j_start; // skip half of the interactions if (itag > jtag) { @@ -2652,23 +2587,20 @@ int PairReaxFFKokkos::preprocess_torsion(int i, int /*itype*/, tagin const F_FLOAT bo_ij = d_BO(i,j_index); if (bo_ij < thb_cut) continue; - const int l_start = d_bo_first[j]; - const int l_end = l_start + d_bo_num[j]; + const int lnum = d_bo_num[j]; - for (int kk = j_start; kk < j_end; kk++) { - int k = d_bo_list[kk]; + for (int k_index = 0; k_index < jknum; k_index++) { + int k = d_bo_list(i, k_index); k &= NEIGHMASK; if (k == j) continue; - const int k_index = kk - j_start; const F_FLOAT bo_ik = d_BO(i,k_index); if (bo_ik < thb_cut) continue; - for (int ll = l_start; ll < l_end; ll++) { - int l = d_bo_list[ll]; + for (int l_index = 0; l_index < lnum; l_index++) { + int l = d_bo_list(j, l_index); l &= NEIGHMASK; if (l == i) continue; - const int l_index = ll - l_start; const F_FLOAT bo_jl = d_BO(j,l_index); if (l == k || bo_jl < thb_cut || bo_ij*bo_ik*bo_jl < thb_cut) continue; @@ -2708,9 +2640,9 @@ void PairReaxFFKokkos::operator()(TagPairReaxComputeAngularPreproces auto v_f = ScatterViewHelper,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f); auto a_f = v_f.template access>(); - Kokkos::View::value,Kokkos::MemoryTraits::value>> a_Cdbo = d_Cdbo; - Kokkos::View::value,Kokkos::MemoryTraits::value>> a_Cdbopi = d_Cdbopi; - Kokkos::View::value,Kokkos::MemoryTraits::value>> a_Cdbopi2 = d_Cdbopi2; + 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,decltype(dup_CdDelta),decltype(ndup_CdDelta)>::get(dup_CdDelta,ndup_CdDelta); auto a_CdDelta = v_CdDelta.template access>(); @@ -2750,13 +2682,13 @@ void PairReaxFFKokkos::operator()(TagPairReaxComputeAngularPreproces const int i = pack.i0; const int j = pack.i1; const int k = pack.i2; - const int j_start = pack.i3; + const int jnum = pack.i3; pack = d_angular_pack(apack, 1); - const int i_index = pack.i0; + // i0 is unused const int j_index = pack.i1; const int k_index = pack.i2; - const int j_end = pack.i3; + // i3 is unused const int itype = type(i); const X_FLOAT xtmp = x(i,0); @@ -2906,17 +2838,13 @@ void PairReaxFFKokkos::operator()(TagPairReaxComputeAngularPreproces // Forces a_Cdbo(i,j_index) += (CEval1 + CEpen2 + (CEcoa1 - CEcoa4)); - a_Cdbo(j,i_index) += (CEval1 + CEpen2 + (CEcoa1 - CEcoa4)); a_Cdbo(i,k_index) += (CEval2 + CEpen3 + (CEcoa2 - CEcoa5)); - a_Cdbo(k,i_index) += (CEval2 + CEpen3 + (CEcoa2 - CEcoa5)); CdDelta_i += ((CEval3 + CEval7) + CEpen1 + CEcoa3); CdDelta_j += CEcoa4; a_CdDelta[k] += CEcoa5; - for (int ll = j_start; ll < j_end; ll++) { - const int l_index = ll - j_start; - + for (int l_index = 0; l_index < jnum; l_index++) { temp_bo_jt = d_BO(i,l_index); temp = temp_bo_jt * temp_bo_jt * temp_bo_jt; pBOjt7 = temp * temp * temp_bo_jt; @@ -2970,8 +2898,8 @@ void PairReaxFFKokkos::operator()(TagPairReaxComputeTorsionPreproces auto v_CdDelta = ScatterViewHelper,decltype(dup_CdDelta),decltype(ndup_CdDelta)>::get(dup_CdDelta,ndup_CdDelta); auto a_CdDelta = v_CdDelta.template access>(); - Kokkos::View::value,Kokkos::MemoryTraits::value>> a_Cdbo = d_Cdbo; - Kokkos::View::value,Kokkos::MemoryTraits::value>> a_Cdbopi = d_Cdbopi; + Kokkos::View::value>> a_Cdbo = d_Cdbo; + Kokkos::View::value>> a_Cdbopi = d_Cdbopi; //auto a_Cdbo = dup_Cdbo.template access>(); // in reaxff_torsion_angles: j = i, k = j, i = k; @@ -3332,21 +3260,18 @@ void PairReaxFFKokkos::operator()(TagPairReaxComputeHydrogen= HB_THRESHOLD) { - hblist[top] = jj; + hblist[top] = j_index; top ++; } } @@ -3354,8 +3279,8 @@ void PairReaxFFKokkos::operator()(TagPairReaxComputeHydrogen::operator()(TagPairReaxComputeHydrogen KOKKOS_INLINE_FUNCTION void PairReaxFFKokkos::operator()(TagPairReaxUpdateBond, const int &ii) const { - Kokkos::View::value>> a_Cdbo = d_Cdbo; - Kokkos::View::value>> a_Cdbopi = d_Cdbopi; - Kokkos::View::value>> a_Cdbopi2 = d_Cdbopi2; + Kokkos::View::value>> a_Cdbo = d_Cdbo; + Kokkos::View::value>> a_Cdbopi = d_Cdbopi; + Kokkos::View::value>> a_Cdbopi2 = d_Cdbopi2; const int i = d_ilist[ii]; const X_FLOAT xtmp = x(i,0); const X_FLOAT ytmp = x(i,1); const X_FLOAT ztmp = x(i,2); const tagint itag = tag(i); - const int j_start = d_bo_first[i]; - const int j_end = j_start + d_bo_num[i]; + const int jnum = d_bo_num[i]; - for (int jj = j_start; jj < j_end; jj++) { - int j = d_bo_list[jj]; + for (int j_index = 0; j_index < jnum; j_index++) { + int j = d_bo_list(i, j_index); j &= NEIGHMASK; const tagint jtag = tag(j); @@ -3493,19 +3416,16 @@ void PairReaxFFKokkos::operator()(TagPairReaxUpdateBond, if (!flag) continue; - const int j_index = jj - j_start; const F_FLOAT Cdbo_i = d_Cdbo(i,j_index); const F_FLOAT Cdbopi_i = d_Cdbopi(i,j_index); const F_FLOAT Cdbopi2_i = d_Cdbopi2(i,j_index); - const int k_start = d_bo_first[j]; - const int k_end = k_start + d_bo_num[j]; + const int knum = d_bo_num[j]; - for (int kk = k_start; kk < k_end; kk++) { - int k = d_bo_list[kk]; + for (int k_index = 0; k_index < knum; k_index++) { + int k = d_bo_list(j, k_index); k &= NEIGHMASK; if (k != i) continue; - const int k_index = kk - k_start; a_Cdbo(j,k_index) += Cdbo_i; a_Cdbopi(j,k_index) += Cdbopi_i; @@ -3533,13 +3453,12 @@ void PairReaxFFKokkos::operator()(TagPairReaxComputeBond1::operator()(TagPairReaxComputeBond1::operator()(TagPairReaxComputeBond2::operator()(TagPairReaxComputeBond2::operator()(TagPairReaxComputeBond2::operator()(TagPairReaxComputeBond2::calculate_find_bond_item(int ii, int &numbond int nj = 0; if (mask[i] & groupbit) { - const int j_start = d_bo_first[i]; - const int j_end = j_start + d_bo_num[i]; - for (int jj = j_start; jj < j_end; jj++) { - int j = d_bo_list[jj]; + const int jnum = d_bo_num[i]; + for (int j_index = 0; j_index < jnum; j_index++) { + int j = d_bo_list(i, j_index); j &= NEIGHMASK; if (mask[j] & groupbit) { const tagint jtag = tag[j]; - const int j_index = jj - j_start; - double bo_tmp = d_BO(i,j_index); + double bo_tmp = d_BO(i, j_index); if (bo_tmp > bo_cut_bond) { d_neighid(i,nj) = jtag; @@ -4401,15 +4312,13 @@ KOKKOS_INLINE_FUNCTION void PairReaxFFKokkos::operator()(TagPairReaxFindBondSpecies, const int &i) const { int nj = 0; - const int j_start = d_bo_first[i]; - const int j_end = j_start + d_bo_num[i]; - for (int jj = j_start; jj < j_end; jj++) { - int j = d_bo_list[jj]; + const int jnum = d_bo_num[i]; + for (int j_index = 0; j_index < jnum; j_index++) { + int j = d_bo_list(i, j_index); j &= NEIGHMASK; if (j < i) continue; - const int j_index = jj - j_start; - double bo_tmp = d_BO(i,j_index); + double bo_tmp = d_BO(i, j_index); if (bo_tmp >= 0.10) { // Why is this a hardcoded value? k_tmpid.view()(i,nj) = j; diff --git a/src/KOKKOS/pair_reaxff_kokkos.h b/src/KOKKOS/pair_reaxff_kokkos.h index 5f228ebd19..0fe47fcba8 100644 --- a/src/KOKKOS/pair_reaxff_kokkos.h +++ b/src/KOKKOS/pair_reaxff_kokkos.h @@ -178,14 +178,14 @@ class PairReaxFFKokkos : public PairReaxFF { // TagPairReaxBuildListsHalfBlocking, HalfBlockingPreview, HalfPreview template KOKKOS_INLINE_FUNCTION - void build_hb_list(F_FLOAT, int, int, int, int, int) const; + void build_hb_list(F_FLOAT, int, int, int, int) const; // Isolated function that builds the bond order list, reused across // TagPairReaxBuildListsHalfBlocking, HalfBlockingPreview, HalfPreview // Returns if we need to populate d_d* functions or not template KOKKOS_INLINE_FUNCTION - bool build_bo_list(int, int, int, int&, int&) const; + bool build_bo_list(int, int, int&, int&) const; KOKKOS_INLINE_FUNCTION void operator()(TagPairReaxBuildListsFull, const int&) const; @@ -245,17 +245,17 @@ class PairReaxFFKokkos : public PairReaxFF { // Abstraction for computing SBSO2, CSBO2, dSBO1, dsBO2 KOKKOS_INLINE_FUNCTION - void compute_angular_sbo(int, int, int, int) const; + void compute_angular_sbo(int, int, int) const; // Abstraction for counting and populating angular intermediates template KOKKOS_INLINE_FUNCTION - int preprocess_angular(int, int, int, int, int) const; + int preprocess_angular(int, int, int, int) const; // Abstraction for counting and populating torsion intermediated template KOKKOS_INLINE_FUNCTION - int preprocess_torsion(int, int, tagint, F_FLOAT, F_FLOAT, F_FLOAT, int, int, int) const; + int preprocess_torsion(int, int, tagint, F_FLOAT, F_FLOAT, F_FLOAT, int, int) const; template KOKKOS_INLINE_FUNCTION @@ -436,7 +436,7 @@ class PairReaxFFKokkos : public PairReaxFF { typename AT::t_ffloat_2d_dl d_C1dbo, d_C2dbo, d_C3dbo; typename AT::t_ffloat_2d_dl d_C1dbopi, d_C2dbopi, d_C3dbopi, d_C4dbopi; 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; + typename AT::t_ffloat_2d_dl d_dDeltap_self, d_Cdbo, d_Cdbopi, d_Cdbopi2; int need_dup; @@ -470,7 +470,8 @@ class PairReaxFFKokkos : public PairReaxFF { typename AT::t_int_1d_randomread d_ilist; typename AT::t_int_1d_randomread d_numneigh; - typename AT::t_int_1d d_bo_first, d_bo_num, d_bo_list, d_hb_first, d_hb_num, d_hb_list; + typename AT::t_int_1d d_bo_num, d_hb_num; + typename AT::t_int_2d d_bo_list, d_hb_list; DAT::tdual_int_scalar k_resize_bo, k_resize_hb; typename AT::t_int_scalar d_resize_bo, d_resize_hb; diff --git a/src/KOKKOS/pair_uf3_kokkos.cpp b/src/KOKKOS/pair_uf3_kokkos.cpp index 59112ddab0..da7660d0d0 100644 --- a/src/KOKKOS/pair_uf3_kokkos.cpp +++ b/src/KOKKOS/pair_uf3_kokkos.cpp @@ -1655,7 +1655,7 @@ double PairUF3Kokkos::single(int /*i*/, int /*j*/, int itype, int jt namespace LAMMPS_NS { template class PairUF3Kokkos; -#ifdef KOKKOS_ENABLE_GPU +#ifdef LMP_KOKKOS_GPU template class PairUF3Kokkos; #endif } // namespace LAMMPS_NS diff --git a/src/KOKKOS/pppm_kokkos.cpp b/src/KOKKOS/pppm_kokkos.cpp index 73e2c1f06f..273a53ab8f 100644 --- a/src/KOKKOS/pppm_kokkos.cpp +++ b/src/KOKKOS/pppm_kokkos.cpp @@ -794,7 +794,7 @@ void PPPMKokkos::allocate() // 2nd FFT returns data in 3d brick decomposition // remap takes data from 3d brick to FFT decomposition - int collective_flag = 0; // not yet supported in Kokkos version + int collective_flag = force->kspace->collective_flag; int gpu_aware_flag = lmp->kokkos->gpu_aware_flag; int tmp; diff --git a/src/KOKKOS/remap_kokkos.cpp b/src/KOKKOS/remap_kokkos.cpp index 0d539ada83..573f4c2508 100644 --- a/src/KOKKOS/remap_kokkos.cpp +++ b/src/KOKKOS/remap_kokkos.cpp @@ -103,12 +103,10 @@ template void RemapKokkos::remap_3d_kokkos(typename FFT_AT::t_FFT_SCALAR_1d d_in, typename FFT_AT::t_FFT_SCALAR_1d d_out, typename FFT_AT::t_FFT_SCALAR_1d d_buf, struct remap_plan_3d_kokkos *plan) { - // collective flag not yet supported - // use point-to-point communication - - int i,isend,irecv; typename FFT_AT::t_FFT_SCALAR_1d d_scratch; + int me; + MPI_Comm_rank(plan->comm,&me); if (plan->memory == 0) d_scratch = d_buf; @@ -116,70 +114,132 @@ void RemapKokkos::remap_3d_kokkos(typename FFT_AT::t_FFT_SCALAR_1d d d_scratch = plan->d_scratch; // post all recvs into scratch space + // If not using GPU-aware MPI, mirror data to host FFT_SCALAR* v_scratch = d_scratch.data(); - if (!plan->usegpu_aware) { - plan->h_scratch = Kokkos::create_mirror_view(d_scratch); - v_scratch = plan->h_scratch.data(); - } - - for (irecv = 0; irecv < plan->nrecv; irecv++) { - FFT_SCALAR* scratch = v_scratch + plan->recv_bufloc[irecv]; - MPI_Irecv(scratch,plan->recv_size[irecv], - MPI_FFT_SCALAR,plan->recv_proc[irecv],0, - plan->comm,&plan->request[irecv]); - } - FFT_SCALAR* v_sendbuf = plan->d_sendbuf.data(); if (!plan->usegpu_aware) { + plan->h_scratch = Kokkos::create_mirror_view(d_scratch); plan->h_sendbuf = Kokkos::create_mirror_view(plan->d_sendbuf); + v_scratch = plan->h_scratch.data(); v_sendbuf = plan->h_sendbuf.data(); } - // send all messages to other procs + // use point-to-point communication - for (isend = 0; isend < plan->nsend; isend++) { - int in_offset = plan->send_offset[isend]; - plan->pack(d_in,in_offset, - plan->d_sendbuf,0,&plan->packplan[isend]); + if (!plan->usecollective) { + int i,isend,irecv; - if (!plan->usegpu_aware) - Kokkos::deep_copy(plan->h_sendbuf,plan->d_sendbuf); - MPI_Send(v_sendbuf,plan->send_size[isend],MPI_FFT_SCALAR, - plan->send_proc[isend],0,plan->comm); - } + for (irecv = 0; irecv < plan->nrecv; irecv++) { + FFT_SCALAR* scratch = v_scratch + plan->recv_bufloc[irecv]; + MPI_Irecv(scratch,plan->recv_size[irecv], + MPI_FFT_SCALAR,plan->recv_proc[irecv],0, + plan->comm,&plan->request[irecv]); + } - // copy in -> scratch -> out for self data + // send all messages to other procs - if (plan->self) { - isend = plan->nsend; - irecv = plan->nrecv; + for (isend = 0; isend < plan->nsend; isend++) { + int in_offset = plan->send_offset[isend]; + plan->pack(d_in,in_offset, + plan->d_sendbuf,0,&plan->packplan[isend]); - int in_offset = plan->send_offset[isend]; - int scratch_offset = plan->recv_bufloc[irecv]; - int out_offset = plan->recv_offset[irecv]; + if (!plan->usegpu_aware) + Kokkos::deep_copy(plan->h_sendbuf,plan->d_sendbuf); - plan->pack(d_in,in_offset, - d_scratch,scratch_offset, - &plan->packplan[isend]); - plan->unpack(d_scratch,scratch_offset, - d_out,out_offset,&plan->unpackplan[irecv]); - } + MPI_Send(v_sendbuf,plan->send_size[isend],MPI_FFT_SCALAR, + plan->send_proc[isend],0,plan->comm); + } - // unpack all messages from scratch -> out + // copy in -> scratch -> out for self data - for (i = 0; i < plan->nrecv; i++) { - MPI_Waitany(plan->nrecv,plan->request,&irecv,MPI_STATUS_IGNORE); + if (plan->self) { + isend = plan->nsend; + irecv = plan->nrecv; - int scratch_offset = plan->recv_bufloc[irecv]; - int out_offset = plan->recv_offset[irecv]; + int in_offset = plan->send_offset[isend]; + int scratch_offset = plan->recv_bufloc[irecv]; + int out_offset = plan->recv_offset[irecv]; - if (!plan->usegpu_aware) - Kokkos::deep_copy(d_scratch,plan->h_scratch); + plan->pack(d_in,in_offset, + d_scratch,scratch_offset, + &plan->packplan[isend]); + plan->unpack(d_scratch,scratch_offset, + d_out,out_offset,&plan->unpackplan[irecv]); + } - plan->unpack(d_scratch,scratch_offset, - d_out,out_offset,&plan->unpackplan[irecv]); + // unpack all messages from scratch -> out + + for (i = 0; i < plan->nrecv; i++) { + MPI_Waitany(plan->nrecv,plan->request,&irecv,MPI_STATUS_IGNORE); + + int scratch_offset = plan->recv_bufloc[irecv]; + int out_offset = plan->recv_offset[irecv]; + + if (!plan->usegpu_aware) + Kokkos::deep_copy(d_scratch,plan->h_scratch); + + plan->unpack(d_scratch,scratch_offset, + d_out,out_offset,&plan->unpackplan[irecv]); + } + } else { + if (plan->commringlen > 0) { + int isend,irecv; + + // populate send data + // buffers are allocated and count/displacement buffers + // are populated in remap_3d_create_plan_kokkos + + int numpacked = 0; + for (isend = 0; isend < plan->commringlen; isend++) { + if (plan->sendcnts[isend]) { + plan->pack(d_in,plan->send_offset[numpacked], + plan->d_sendbuf,plan->sdispls[isend], + &plan->packplan[numpacked]); + numpacked++; + } + else if (plan->commringlist[isend] == me && plan->self) { + numpacked++; + } + } + + if (!plan->usegpu_aware) + Kokkos::deep_copy(plan->h_sendbuf,plan->d_sendbuf); + + MPI_Alltoallv(v_sendbuf, plan->sendcnts, plan->sdispls, + MPI_FFT_SCALAR, v_scratch, plan->rcvcnts, + plan->rdispls, MPI_FFT_SCALAR, plan->comm); + + // unpack the data from the recv buffer into out + + if (!plan->usegpu_aware) + Kokkos::deep_copy(d_scratch,plan->h_scratch); + + // copy in -> scratch -> out for self data + + if (plan->self) { + plan->pack(d_in,plan->send_offset[plan->selfnsendloc], + plan->d_sendbuf,plan->sdispls[plan->selfcommringloc], + &plan->packplan[plan->selfnsendloc]); + plan->unpack(plan->d_sendbuf,plan->sdispls[plan->selfcommringloc], + d_out,plan->recv_offset[plan->selfnrecvloc], + &plan->unpackplan[plan->selfnrecvloc]); + } + + numpacked = 0; + for (irecv = 0; irecv < plan->commringlen; irecv++) { + if (plan->rcvcnts[irecv]) { + plan->unpack(d_scratch,plan->rdispls[irecv], + d_out,plan->recv_offset[numpacked], + &plan->unpackplan[numpacked]); + numpacked++; + } + else if (plan->commringlist[irecv] == me && plan->self) { + numpacked++; + } + } + } } } @@ -263,224 +323,488 @@ struct remap_plan_3d_kokkos* RemapKokkos::remap_3d_creat out.khi = out_khi; out.ksize = out.khi - out.klo + 1; - // combine output extents across all procs - inarray = (struct extent_3d *) malloc(nprocs*sizeof(struct extent_3d)); if (inarray == nullptr) return nullptr; outarray = (struct extent_3d *) malloc(nprocs*sizeof(struct extent_3d)); if (outarray == nullptr) return nullptr; - MPI_Allgather(&out,sizeof(struct extent_3d),MPI_BYTE, - outarray,sizeof(struct extent_3d),MPI_BYTE,comm); - - // count send collides, including self - - nsend = 0; - iproc = me; - for (i = 0; i < nprocs; i++) { - iproc++; - if (iproc == nprocs) iproc = 0; - nsend += remap_3d_collide(&in,&outarray[iproc],&overlap); - } - - // malloc space for send info - - if (nsend) { - plan->pack = PackKokkos::pack_3d; - - plan->send_offset = (int *) malloc(nsend*sizeof(int)); - plan->send_size = (int *) malloc(nsend*sizeof(int)); - plan->send_proc = (int *) malloc(nsend*sizeof(int)); - plan->packplan = (struct pack_plan_3d *) - malloc(nsend*sizeof(struct pack_plan_3d)); - - if (plan->send_offset == nullptr || plan->send_size == nullptr || - plan->send_proc == nullptr || plan->packplan == nullptr) return nullptr; - } - - // store send info, with self as last entry - - nsend = 0; - iproc = me; - for (i = 0; i < nprocs; i++) { - iproc++; - if (iproc == nprocs) iproc = 0; - if (remap_3d_collide(&in,&outarray[iproc],&overlap)) { - plan->send_proc[nsend] = iproc; - plan->send_offset[nsend] = nqty * - ((overlap.klo-in.klo)*in.jsize*in.isize + - ((overlap.jlo-in.jlo)*in.isize + overlap.ilo-in.ilo)); - plan->packplan[nsend].nfast = nqty*overlap.isize; - plan->packplan[nsend].nmid = overlap.jsize; - plan->packplan[nsend].nslow = overlap.ksize; - plan->packplan[nsend].nstride_line = nqty*in.isize; - plan->packplan[nsend].nstride_plane = nqty*in.jsize*in.isize; - plan->packplan[nsend].nqty = nqty; - plan->send_size[nsend] = nqty*overlap.isize*overlap.jsize*overlap.ksize; - nsend++; - } - } - - // plan->nsend = # of sends not including self - - if (nsend && plan->send_proc[nsend-1] == me) { - if (plan->usecollective) // for collectives include self in nsend list - plan->nsend = nsend; - else - plan->nsend = nsend - 1; - } else - plan->nsend = nsend; - - // combine input extents across all procs + // combine input & output extents across all procs MPI_Allgather(&in,sizeof(struct extent_3d),MPI_BYTE, inarray,sizeof(struct extent_3d),MPI_BYTE,comm); + MPI_Allgather(&out,sizeof(struct extent_3d),MPI_BYTE, + outarray,sizeof(struct extent_3d),MPI_BYTE,comm); - // count recv collides, including self + // for efficiency, handle collective & non-collective setup separately - nrecv = 0; - iproc = me; - for (i = 0; i < nprocs; i++) { - iproc++; - if (iproc == nprocs) iproc = 0; - nrecv += remap_3d_collide(&out,&inarray[iproc],&overlap); - } + if (!plan->usecollective) { + // count send & recv collides, including self - // malloc space for recv info - - if (nrecv) { - if (permute == 0) - plan->unpack = PackKokkos::unpack_3d; - else if (permute == 1) { - if (nqty == 1) - plan->unpack = PackKokkos::unpack_3d_permute1_1; - else if (nqty == 2) - plan->unpack = PackKokkos::unpack_3d_permute1_2; - else - plan->unpack = PackKokkos::unpack_3d_permute1_n; - } - else if (permute == 2) { - if (nqty == 1) - plan->unpack = PackKokkos::unpack_3d_permute2_1; - else if (nqty == 2) - plan->unpack = PackKokkos::unpack_3d_permute2_2; - else - plan->unpack = PackKokkos::unpack_3d_permute2_n; + nsend = 0; + nrecv = 0; + for (i = 0; i < nprocs; i++) { + nsend += remap_3d_collide(&in,&outarray[i],&overlap); + nrecv += remap_3d_collide(&out,&inarray[i],&overlap); } - plan->recv_offset = (int *) malloc(nrecv*sizeof(int)); - plan->recv_size = (int *) malloc(nrecv*sizeof(int)); - plan->recv_proc = (int *) malloc(nrecv*sizeof(int)); - plan->recv_bufloc = (int *) malloc(nrecv*sizeof(int)); - plan->request = (MPI_Request *) malloc(nrecv*sizeof(MPI_Request)); - plan->unpackplan = (struct pack_plan_3d *) - malloc(nrecv*sizeof(struct pack_plan_3d)); + // malloc space for send & recv info - if (plan->recv_offset == nullptr || plan->recv_size == nullptr || - plan->recv_proc == nullptr || plan->recv_bufloc == nullptr || - plan->request == nullptr || plan->unpackplan == nullptr) return nullptr; - } + if (nsend) { + plan->pack = PackKokkos::pack_3d; - // store recv info, with self as last entry + plan->send_offset = (int *) malloc(nsend*sizeof(int)); + plan->send_size = (int *) malloc(nsend*sizeof(int)); + plan->send_proc = (int *) malloc(nsend*sizeof(int)); + plan->packplan = (struct pack_plan_3d *) + malloc(nsend*sizeof(struct pack_plan_3d)); - ibuf = 0; - nrecv = 0; - iproc = me; + if (plan->send_offset == nullptr || plan->send_size == nullptr || + plan->send_proc == nullptr || plan->packplan == nullptr) return nullptr; + } - for (i = 0; i < nprocs; i++) { - iproc++; - if (iproc == nprocs) iproc = 0; - if (remap_3d_collide(&out,&inarray[iproc],&overlap)) { - plan->recv_proc[nrecv] = iproc; - plan->recv_bufloc[nrecv] = ibuf; - - if (permute == 0) { - plan->recv_offset[nrecv] = nqty * - ((overlap.klo-out.klo)*out.jsize*out.isize + - (overlap.jlo-out.jlo)*out.isize + (overlap.ilo-out.ilo)); - plan->unpackplan[nrecv].nfast = nqty*overlap.isize; - plan->unpackplan[nrecv].nmid = overlap.jsize; - plan->unpackplan[nrecv].nslow = overlap.ksize; - plan->unpackplan[nrecv].nstride_line = nqty*out.isize; - plan->unpackplan[nrecv].nstride_plane = nqty*out.jsize*out.isize; - plan->unpackplan[nrecv].nqty = nqty; - } + if (nrecv) { + if (permute == 0) + plan->unpack = PackKokkos::unpack_3d; else if (permute == 1) { - plan->recv_offset[nrecv] = nqty * - ((overlap.ilo-out.ilo)*out.ksize*out.jsize + - (overlap.klo-out.klo)*out.jsize + (overlap.jlo-out.jlo)); - plan->unpackplan[nrecv].nfast = overlap.isize; - plan->unpackplan[nrecv].nmid = overlap.jsize; - plan->unpackplan[nrecv].nslow = overlap.ksize; - plan->unpackplan[nrecv].nstride_line = nqty*out.jsize; - plan->unpackplan[nrecv].nstride_plane = nqty*out.ksize*out.jsize; - plan->unpackplan[nrecv].nqty = nqty; + if (nqty == 1) + plan->unpack = PackKokkos::unpack_3d_permute1_1; + else if (nqty == 2) + plan->unpack = PackKokkos::unpack_3d_permute1_2; + else + plan->unpack = PackKokkos::unpack_3d_permute1_n; } - else { - plan->recv_offset[nrecv] = nqty * - ((overlap.jlo-out.jlo)*out.isize*out.ksize + - (overlap.ilo-out.ilo)*out.ksize + (overlap.klo-out.klo)); - plan->unpackplan[nrecv].nfast = overlap.isize; - plan->unpackplan[nrecv].nmid = overlap.jsize; - plan->unpackplan[nrecv].nslow = overlap.ksize; - plan->unpackplan[nrecv].nstride_line = nqty*out.ksize; - plan->unpackplan[nrecv].nstride_plane = nqty*out.isize*out.ksize; - plan->unpackplan[nrecv].nqty = nqty; + else if (permute == 2) { + if (nqty == 1) + plan->unpack = PackKokkos::unpack_3d_permute2_1; + else if (nqty == 2) + plan->unpack = PackKokkos::unpack_3d_permute2_2; + else + plan->unpack = PackKokkos::unpack_3d_permute2_n; } - plan->recv_size[nrecv] = nqty*overlap.isize*overlap.jsize*overlap.ksize; - ibuf += plan->recv_size[nrecv]; - nrecv++; + plan->recv_offset = (int *) malloc(nrecv*sizeof(int)); + plan->recv_size = (int *) malloc(nrecv*sizeof(int)); + plan->recv_proc = (int *) malloc(nrecv*sizeof(int)); + plan->recv_bufloc = (int *) malloc(nrecv*sizeof(int)); + plan->request = (MPI_Request *) malloc(nrecv*sizeof(MPI_Request)); + plan->unpackplan = (struct pack_plan_3d *) + malloc(nrecv*sizeof(struct pack_plan_3d)); + + if (plan->recv_offset == nullptr || plan->recv_size == nullptr || + plan->recv_proc == nullptr || plan->recv_bufloc == nullptr || + plan->request == nullptr || plan->unpackplan == nullptr) return nullptr; } + + // store send info, with self as last entry + + nsend = 0; + iproc = me; + for (i = 0; i < nprocs; i++) { + iproc++; + if (iproc == nprocs) iproc = 0; + if (remap_3d_collide(&in,&outarray[iproc],&overlap)) { + plan->send_proc[nsend] = iproc; + plan->send_offset[nsend] = nqty * + ((overlap.klo-in.klo)*in.jsize*in.isize + + ((overlap.jlo-in.jlo)*in.isize + overlap.ilo-in.ilo)); + plan->packplan[nsend].nfast = nqty*overlap.isize; + plan->packplan[nsend].nmid = overlap.jsize; + plan->packplan[nsend].nslow = overlap.ksize; + plan->packplan[nsend].nstride_line = nqty*in.isize; + plan->packplan[nsend].nstride_plane = nqty*in.jsize*in.isize; + plan->packplan[nsend].nqty = nqty; + plan->send_size[nsend] = nqty*overlap.isize*overlap.jsize*overlap.ksize; + nsend++; + } + } + + // plan->nsend = # of sends not including self + + if (nsend && plan->send_proc[nsend-1] == me) plan->nsend = nsend - 1; + else plan->nsend = nsend; + + // store recv info, with self as last entry + + ibuf = 0; + nrecv = 0; + iproc = me; + + for (i = 0; i < nprocs; i++) { + iproc++; + if (iproc == nprocs) iproc = 0; + if (remap_3d_collide(&out,&inarray[iproc],&overlap)) { + plan->recv_proc[nrecv] = iproc; + plan->recv_bufloc[nrecv] = ibuf; + + if (permute == 0) { + plan->recv_offset[nrecv] = nqty * + ((overlap.klo-out.klo)*out.jsize*out.isize + + (overlap.jlo-out.jlo)*out.isize + (overlap.ilo-out.ilo)); + plan->unpackplan[nrecv].nfast = nqty*overlap.isize; + plan->unpackplan[nrecv].nmid = overlap.jsize; + plan->unpackplan[nrecv].nslow = overlap.ksize; + plan->unpackplan[nrecv].nstride_line = nqty*out.isize; + plan->unpackplan[nrecv].nstride_plane = nqty*out.jsize*out.isize; + plan->unpackplan[nrecv].nqty = nqty; + } + else if (permute == 1) { + plan->recv_offset[nrecv] = nqty * + ((overlap.ilo-out.ilo)*out.ksize*out.jsize + + (overlap.klo-out.klo)*out.jsize + (overlap.jlo-out.jlo)); + plan->unpackplan[nrecv].nfast = overlap.isize; + plan->unpackplan[nrecv].nmid = overlap.jsize; + plan->unpackplan[nrecv].nslow = overlap.ksize; + plan->unpackplan[nrecv].nstride_line = nqty*out.jsize; + plan->unpackplan[nrecv].nstride_plane = nqty*out.ksize*out.jsize; + plan->unpackplan[nrecv].nqty = nqty; + } + else { + plan->recv_offset[nrecv] = nqty * + ((overlap.jlo-out.jlo)*out.isize*out.ksize + + (overlap.ilo-out.ilo)*out.ksize + (overlap.klo-out.klo)); + plan->unpackplan[nrecv].nfast = overlap.isize; + plan->unpackplan[nrecv].nmid = overlap.jsize; + plan->unpackplan[nrecv].nslow = overlap.ksize; + plan->unpackplan[nrecv].nstride_line = nqty*out.ksize; + plan->unpackplan[nrecv].nstride_plane = nqty*out.isize*out.ksize; + plan->unpackplan[nrecv].nqty = nqty; + } + + plan->recv_size[nrecv] = nqty*overlap.isize*overlap.jsize*overlap.ksize; + ibuf += plan->recv_size[nrecv]; + nrecv++; + } + } + + // plan->nrecv = # of recvs not including self + + if (nrecv && plan->recv_proc[nrecv-1] == me) plan->nrecv = nrecv - 1; + else plan->nrecv = nrecv; + + // init remaining fields in remap plan + + plan->memory = memory; + + if (nrecv == plan->nrecv) plan->self = 0; + else plan->self = 1; + + + // the plan->d_sendbuf and plan->d_recvbuf are used by both the + // collective & non-collective implementations. + // For non-collective, the buffer size is MAX(send_size) for any one send + + // find biggest send message (not including self) and malloc space for it + + size = 0; + for (nsend = 0; nsend < plan->nsend; nsend++) + size = MAX(size,plan->send_size[nsend]); + + if (size) { + plan->d_sendbuf = typename FFT_AT::t_FFT_SCALAR_1d("remap3d:sendbuf",size); + if (!plan->d_sendbuf.data()) return nullptr; + } + + // if requested, allocate internal scratch space for recvs, + // only need it if I will receive any data (including self) + + if (memory == 1) { + if (nrecv > 0) { + plan->d_scratch = + typename FFT_AT::t_FFT_SCALAR_1d("remap3d:scratch",nqty*out.isize*out.jsize*out.ksize); + if (!plan->d_scratch.data()) return nullptr; + } + } + + // Non-collectives do not use MPI Communicator Groups + + MPI_Comm_dup(comm,&plan->comm); + } else { + + // Improved approach - use an AllReduce to aggregate which ranks need to be included + // To do this, we build the local proc's send/receive list, then do an AllReduce + // to create the send/recv count for the Alltoallv + + // local arrays to be used in the allreduce + // start with max length -- nprocs. Unused entries will be removed later + + int *local_cnts = (int*) malloc(2*nprocs*sizeof(int)); + if (local_cnts == nullptr) return nullptr; + int *local_sendcnts = local_cnts; + int *local_recvcnts = (local_cnts + nprocs); + + // local arrays used to store the results of the allreduce + + int *global_cnts = (int*) malloc(2*nprocs*sizeof(int)); + if (global_cnts == nullptr) return nullptr; + int *global_sendcnts = global_cnts; + int *global_recvcnts = (global_cnts + nprocs); + + // count send & recv collides, including self + + nsend = 0; + nrecv = 0; + for (i = 0; i < nprocs; i++) { + local_sendcnts[i] = remap_3d_collide(&in,&outarray[i],&overlap); + local_recvcnts[i] = remap_3d_collide(&out,&inarray[i],&overlap); + nsend += local_sendcnts[i]; + nrecv += local_recvcnts[i]; + } + + // perform an AllReduce to get the counts from all other processors and build sendcnts list + + MPI_Allreduce(local_cnts, global_cnts, 2*nprocs, MPI_INT, MPI_SUM, comm); + + // now remove procs that are 0 in send or recv to create minimized sendcnts/recvcnts for AlltoAllv + // also builds commringlist -- which is already sorted + + int *commringlist = (int*) malloc(nprocs * sizeof(int)); + int commringlen = 0; + + for (i = 0; i < nprocs; i++) { + if (global_sendcnts[i] > 0 || global_recvcnts[i] > 0) { + commringlist[commringlen] = i; + commringlen++; + } + } + + // resize commringlist to final size + + commringlist = (int *) realloc(commringlist, commringlen*sizeof(int)); + + // set the plan->commringlist + + plan->commringlen = commringlen; + plan->commringlist = commringlist; + + // clean up local buffers that are finished + + local_sendcnts = nullptr; + local_recvcnts = nullptr; + global_recvcnts = nullptr; + global_sendcnts = nullptr; + free(local_cnts); + free(global_cnts); + + // malloc space for send & recv info + // if the current proc is involved in any way in the communication, allocate space + // because of the Alltoallv, both send and recv have to be initialized even if + // only one of those is performed + + if (nsend || nrecv) { + + // send space + + plan->selfcommringloc = -1; + plan->selfnsendloc = -1; + plan->selfnrecvloc = -1; + + plan->nsend = nsend; + plan->pack = PackKokkos::pack_3d; + + plan->send_offset = (int *) malloc(nsend*sizeof(int)); + plan->send_size = (int *) malloc(plan->commringlen*sizeof(int)); + + plan->sendcnts = (int *) malloc(plan->commringlen*sizeof(int)); + plan->sdispls = (int *) malloc(plan->commringlen*sizeof(int)); + + // only used when sendcnt > 0 + + plan->packplan = (struct pack_plan_3d *) + malloc(nsend*sizeof(struct pack_plan_3d)); + + if (plan->send_offset == nullptr || plan->send_size == nullptr || + plan->sendcnts == nullptr || plan->sdispls == nullptr || + plan->packplan == nullptr) return nullptr; + + // recv space + + plan->nrecv = nrecv; + + if (permute == 0) + plan->unpack = PackKokkos::unpack_3d; + else if (permute == 1) { + if (nqty == 1) + plan->unpack = PackKokkos::unpack_3d_permute1_1; + else if (nqty == 2) + plan->unpack = PackKokkos::unpack_3d_permute1_2; + else + plan->unpack = PackKokkos::unpack_3d_permute1_n; + } + else if (permute == 2) { + if (nqty == 1) + plan->unpack = PackKokkos::unpack_3d_permute2_1; + else if (nqty == 2) + plan->unpack = PackKokkos::unpack_3d_permute2_2; + else + plan->unpack = PackKokkos::unpack_3d_permute2_n; + } + + plan->recv_offset = (int *) malloc(nrecv*sizeof(int)); + plan->recv_size = (int *) malloc(plan->commringlen*sizeof(int)); + + plan->rcvcnts = (int *) malloc(plan->commringlen*sizeof(int)); + plan->rdispls = (int *) malloc(plan->commringlen*sizeof(int)); + + // only used when recvcnt > 0 + + plan->unpackplan = (struct pack_plan_3d *) + malloc(nrecv*sizeof(struct pack_plan_3d)); + + if (plan->recv_offset == nullptr || plan->recv_size == nullptr || + plan->rcvcnts == nullptr || plan->rdispls == nullptr || + plan->unpackplan == nullptr) return nullptr; + } + + // store send info, with self as last entry + + nsend = 0; + ibuf = 0; + int total_send_size = 0; + for (i = 0; i < plan->commringlen; i++) { + iproc = plan->commringlist[i]; + if (iproc == me) { + plan->selfcommringloc = i; + plan->selfnsendloc = nsend; + } + if (remap_3d_collide(&in,&outarray[iproc],&overlap)) { + //plan->send_proc[nsend] = i; + // number of entries required for this pack's 3-d coords + plan->send_offset[nsend] = nqty * + ((overlap.klo-in.klo)*in.jsize*in.isize + + ((overlap.jlo-in.jlo)*in.isize + overlap.ilo-in.ilo)); + plan->packplan[nsend].nfast = nqty*overlap.isize; + plan->packplan[nsend].nmid = overlap.jsize; + plan->packplan[nsend].nslow = overlap.ksize; + plan->packplan[nsend].nstride_line = nqty*in.isize; + plan->packplan[nsend].nstride_plane = nqty*in.jsize*in.isize; + plan->packplan[nsend].nqty = nqty; + // total amount of overlap + plan->send_size[i] = nqty*overlap.isize*overlap.jsize*overlap.ksize; + plan->sendcnts[i] = plan->send_size[i]; + plan->sdispls[i] = ibuf; + ibuf += plan->send_size[i]; + nsend++; + } else { + plan->send_size[i] = 0; + plan->sdispls[i] = ibuf; + plan->sendcnts[i] = 0; + } + total_send_size += plan->send_size[i]; + } + + if (total_send_size) { + plan->d_sendbuf = typename FFT_AT::t_FFT_SCALAR_1d("remap3d:sendbuf",total_send_size); + if (!plan->d_sendbuf.data()) return nullptr; + } + + // store recv info, with self as last entry + + ibuf = 0; + nrecv = 0; + + for (i = 0; i < plan->commringlen; i++) { + iproc = plan->commringlist[i]; + if (iproc == me) { + plan->selfnrecvloc = nrecv; + } + if (remap_3d_collide(&out,&inarray[iproc],&overlap)) { + + if (permute == 0) { + plan->recv_offset[nrecv] = nqty * + ((overlap.klo-out.klo)*out.jsize*out.isize + + (overlap.jlo-out.jlo)*out.isize + (overlap.ilo-out.ilo)); + plan->unpackplan[nrecv].nfast = nqty*overlap.isize; + plan->unpackplan[nrecv].nmid = overlap.jsize; + plan->unpackplan[nrecv].nslow = overlap.ksize; + plan->unpackplan[nrecv].nstride_line = nqty*out.isize; + plan->unpackplan[nrecv].nstride_plane = nqty*out.jsize*out.isize; + plan->unpackplan[nrecv].nqty = nqty; + } + else if (permute == 1) { + plan->recv_offset[nrecv] = nqty * + ((overlap.ilo-out.ilo)*out.ksize*out.jsize + + (overlap.klo-out.klo)*out.jsize + (overlap.jlo-out.jlo)); + plan->unpackplan[nrecv].nfast = overlap.isize; + plan->unpackplan[nrecv].nmid = overlap.jsize; + plan->unpackplan[nrecv].nslow = overlap.ksize; + plan->unpackplan[nrecv].nstride_line = nqty*out.jsize; + plan->unpackplan[nrecv].nstride_plane = nqty*out.ksize*out.jsize; + plan->unpackplan[nrecv].nqty = nqty; + } + else { + plan->recv_offset[nrecv] = nqty * + ((overlap.jlo-out.jlo)*out.isize*out.ksize + + (overlap.ilo-out.ilo)*out.ksize + (overlap.klo-out.klo)); + plan->unpackplan[nrecv].nfast = overlap.isize; + plan->unpackplan[nrecv].nmid = overlap.jsize; + plan->unpackplan[nrecv].nslow = overlap.ksize; + plan->unpackplan[nrecv].nstride_line = nqty*out.ksize; + plan->unpackplan[nrecv].nstride_plane = nqty*out.isize*out.ksize; + plan->unpackplan[nrecv].nqty = nqty; + } + + plan->recv_size[i] = nqty*overlap.isize*overlap.jsize*overlap.ksize; + plan->rcvcnts[i] = plan->recv_size[i]; + plan->rdispls[i] = ibuf; + ibuf += plan->recv_size[i]; + nrecv++; + } else { + plan->recv_size[i] = 0; + plan->rcvcnts[i] = 0; + plan->rdispls[i] = ibuf; + } + } + + // init remaining fields in remap plan + + plan->memory = memory; + + if (plan->sendcnts[plan->selfcommringloc]) { + plan->self = 1; + plan->sendcnts[plan->selfcommringloc] = 0; + plan->rcvcnts[plan->selfcommringloc] = 0; + } + else { + plan->self = 0; + } + + + // if requested, allocate internal scratch space for recvs, + // only need it if I will receive any data (including self) + + if (memory == 1) { + if (nrecv > 0) { + plan->d_scratch = + typename FFT_AT::t_FFT_SCALAR_1d("remap3d:scratch",nqty*out.isize*out.jsize*out.ksize); + if (!plan->d_scratch.data()) return nullptr; + } + } + + // if using collective and the commringlist is NOT empty create a + // communicator for the plan based off an MPI_Group created with + // ranks from the commringlist + + if (plan->commringlen > 0) { + MPI_Group orig_group, new_group; + MPI_Comm_group(comm, &orig_group); + MPI_Group_incl(orig_group, plan->commringlen, + plan->commringlist, &new_group); + MPI_Comm_create(comm, new_group, &plan->comm); + } + + // if using collective and the comm ring list is empty create + // a communicator for the plan with an empty group + + else + MPI_Comm_create(comm, MPI_GROUP_EMPTY, &plan->comm); } - // plan->nrecv = # of recvs not including self - // for collectives include self in the nsend list - - if (nrecv && plan->recv_proc[nrecv-1] == me) { - if (plan->usecollective) plan->nrecv = nrecv; - else plan->nrecv = nrecv - 1; - } else plan->nrecv = nrecv; - - // init remaining fields in remap plan - - plan->memory = memory; - - if (nrecv == plan->nrecv) plan->self = 0; - else plan->self = 1; - // free locally malloced space free(inarray); free(outarray); - // find biggest send message (not including self) and malloc space for it - - size = 0; - for (nsend = 0; nsend < plan->nsend; nsend++) - size = MAX(size,plan->send_size[nsend]); - - if (size) { - plan->d_sendbuf = typename FFT_AT::t_FFT_SCALAR_1d("remap3d:sendbuf",size); - if (!plan->d_sendbuf.data()) return nullptr; - } - - // if requested, allocate internal scratch space for recvs, - // only need it if I will receive any data (including self) - - if (memory == 1) { - if (nrecv > 0) { - plan->d_scratch = - typename FFT_AT::t_FFT_SCALAR_1d("remap3d:scratch",nqty*out.isize*out.jsize*out.ksize); - if (!plan->d_scratch.data()) return nullptr; - } - } - - // not using collective - dup comm - - MPI_Comm_dup(comm,&plan->comm); - // return pointer to plan return plan; @@ -500,22 +824,45 @@ void RemapKokkos::remap_3d_destroy_plan_kokkos(struct remap_plan_3d_ if (!((plan->usecollective) && (plan->commringlen == 0))) MPI_Comm_free(&plan->comm); - // free internal arrays + if (plan->usecollective) { + if (plan->commringlist != nullptr) { + free(plan->commringlist); + free(plan->sendcnts); + free(plan->rcvcnts); + free(plan->sdispls); + free(plan->rdispls); + } - if (plan->nsend || plan->self) { - free(plan->send_offset); - free(plan->send_size); - free(plan->send_proc); - free(plan->packplan); - } + if (plan->nsend) { + free(plan->send_offset); + free(plan->send_size); + free(plan->packplan); + } - if (plan->nrecv || plan->self) { - free(plan->recv_offset); - free(plan->recv_size); - free(plan->recv_proc); - free(plan->recv_bufloc); - free(plan->request); - free(plan->unpackplan); + if (plan->nrecv) { + free(plan->recv_offset); + free(plan->recv_size); + free(plan->unpackplan); + } + } else { + + // free arrays used in pt2pt communication + + if (plan->nsend || plan->self) { + free(plan->send_offset); + free(plan->send_size); + free(plan->send_proc); + free(plan->packplan); + } + + if (plan->nrecv || plan->self) { + free(plan->recv_offset); + free(plan->recv_size); + free(plan->recv_proc); + free(plan->recv_bufloc); + free(plan->request); + free(plan->unpackplan); + } } // free plan itself diff --git a/src/KOKKOS/remap_kokkos.h b/src/KOKKOS/remap_kokkos.h index 77a3b1a37a..b0ccdb342d 100644 --- a/src/KOKKOS/remap_kokkos.h +++ b/src/KOKKOS/remap_kokkos.h @@ -44,6 +44,7 @@ struct remap_plan_3d_kokkos { int *recv_size; // size of each recv message int *recv_proc; // proc to recv each message from int *recv_bufloc; // offset in scratch buf for each recv + int *nrecvmap; // maps receive index to rank index MPI_Request *request; // MPI request for each posted recv struct pack_plan_3d *unpackplan; // unpack plan for each recv message int nrecv; // # of recvs from other procs @@ -52,9 +53,17 @@ struct remap_plan_3d_kokkos { int memory; // user provides scratch space or not MPI_Comm comm; // group of procs performing remap int usecollective; // use collective or point-to-point MPI + int usegpu_aware; // use GPU-Aware MPI or not + // variables for collective MPI only int commringlen; // length of commringlist int *commringlist; // ranks on communication ring of this plan - int usegpu_aware; // use GPU-Aware MPI or not + int *sendcnts; // # of elements in send buffer for each rank + int *rcvcnts; // # of elements in recv buffer for each rank + int *sdispls; // extraction location in send buffer for each rank + int *rdispls; // extraction location in recv buffer for each rank + int selfcommringloc; // current proc's location in commringlist + int selfnsendloc; // current proc's location in send lists + int selfnrecvloc; // current proc's location in recv lists }; template diff --git a/src/KOKKOS/verlet_kokkos.cpp b/src/KOKKOS/verlet_kokkos.cpp index 858df5df6c..d839362aa5 100644 --- a/src/KOKKOS/verlet_kokkos.cpp +++ b/src/KOKKOS/verlet_kokkos.cpp @@ -162,8 +162,10 @@ void VerletKokkos::setup(int flag) lmp->kokkos->auto_sync = 0; modify->setup(vflag); - output->setup(flag); lmp->kokkos->auto_sync = 1; + + atomKK->sync(Host,ALL_MASK); + output->setup(flag); update->setupflag = 0; } @@ -252,6 +254,7 @@ void VerletKokkos::setup_minimal(int flag) lmp->kokkos->auto_sync = 0; modify->setup(vflag); lmp->kokkos->auto_sync = 1; + update->setupflag = 0; } diff --git a/src/KSPACE/fft3d.cpp b/src/KSPACE/fft3d.cpp index a9956f4397..9ee798b50d 100644 --- a/src/KSPACE/fft3d.cpp +++ b/src/KSPACE/fft3d.cpp @@ -72,14 +72,14 @@ void fft_3d(FFT_DATA *in, FFT_DATA *out, int flag, struct fft_plan_3d *plan) { FFT_SCALAR norm; -#if defined(FFT_FFTW3) +#if defined(FFT_FFTW3) || defined(FFT_NVPL) FFT_SCALAR *out_ptr; #endif FFT_DATA *data,*copy; // system specific constants -#if defined(FFT_FFTW3) +#if defined(FFT_FFTW3) || defined(FFT_NVPL) FFTW_API(plan) theplan; #else // nothing to do for other FFTs @@ -105,7 +105,7 @@ void fft_3d(FFT_DATA *in, FFT_DATA *out, int flag, struct fft_plan_3d *plan) DftiComputeForward(plan->handle_fast,data); else DftiComputeBackward(plan->handle_fast,data); -#elif defined(FFT_FFTW3) +#elif defined(FFT_FFTW3) || defined(FFT_NVPL) if (flag == 1) theplan=plan->plan_fast_forward; else @@ -139,7 +139,7 @@ void fft_3d(FFT_DATA *in, FFT_DATA *out, int flag, struct fft_plan_3d *plan) DftiComputeForward(plan->handle_mid,data); else DftiComputeBackward(plan->handle_mid,data); -#elif defined(FFT_FFTW3) +#elif defined(FFT_FFTW3) || defined(FFT_NVPL) if (flag == 1) theplan=plan->plan_mid_forward; else @@ -173,7 +173,7 @@ void fft_3d(FFT_DATA *in, FFT_DATA *out, int flag, struct fft_plan_3d *plan) DftiComputeForward(plan->handle_slow,data); else DftiComputeBackward(plan->handle_slow,data); -#elif defined(FFT_FFTW3) +#elif defined(FFT_FFTW3) || defined(FFT_NVPL) if (flag == 1) theplan=plan->plan_slow_forward; else @@ -203,11 +203,11 @@ void fft_3d(FFT_DATA *in, FFT_DATA *out, int flag, struct fft_plan_3d *plan) if (flag == -1 && plan->scaled) { norm = plan->norm; const int num = plan->normnum; -#if defined(FFT_FFTW3) +#if defined(FFT_FFTW3) || defined(FFT_NVPL) out_ptr = (FFT_SCALAR *)out; #endif for (int i = 0; i < num; i++) { -#if defined(FFT_FFTW3) +#if defined(FFT_FFTW3) || defined(FFT_NVPL) *(out_ptr++) *= norm; *(out_ptr++) *= norm; #elif defined(FFT_MKL) @@ -515,7 +515,7 @@ struct fft_plan_3d *fft_3d_create_plan( #endif DftiCommitDescriptor(plan->handle_slow); -#elif defined(FFT_FFTW3) +#elif defined(FFT_FFTW3) || defined(FFT_NVPL) #if defined(FFT_FFTW_THREADS) if (nthreads > 1) { FFTW_API(init_threads)(); @@ -613,7 +613,7 @@ void fft_3d_destroy_plan(struct fft_plan_3d *plan) DftiFreeDescriptor(&(plan->handle_fast)); DftiFreeDescriptor(&(plan->handle_mid)); DftiFreeDescriptor(&(plan->handle_slow)); -#elif defined(FFT_FFTW3) +#elif defined(FFT_FFTW3) || defined(FFT_NVPL) FFTW_API(destroy_plan)(plan->plan_slow_forward); FFTW_API(destroy_plan)(plan->plan_slow_backward); FFTW_API(destroy_plan)(plan->plan_mid_forward); @@ -714,7 +714,7 @@ void fft_1d_only(FFT_DATA *data, int nsize, int flag, struct fft_plan_3d *plan) { int i,num; FFT_SCALAR norm; -#if defined(FFT_FFTW3) +#if defined(FFT_FFTW3) || defined(FFT_NVPL) FFT_SCALAR *data_ptr; #endif @@ -733,7 +733,7 @@ void fft_1d_only(FFT_DATA *data, int nsize, int flag, struct fft_plan_3d *plan) // fftw3 and Dfti in MKL encode the number of transforms // into the plan, so we cannot operate on a smaller data set -#if defined(FFT_MKL) || defined(FFT_FFTW3) +#if defined(FFT_MKL) || defined(FFT_FFTW3) || defined(FFT_NVPL) if ((total1 > nsize) || (total2 > nsize) || (total3 > nsize)) return; #endif @@ -754,7 +754,7 @@ void fft_1d_only(FFT_DATA *data, int nsize, int flag, struct fft_plan_3d *plan) DftiComputeBackward(plan->handle_mid,data); DftiComputeBackward(plan->handle_slow,data); } -#elif defined(FFT_FFTW3) +#elif defined(FFT_FFTW3) || defined(FFT_NVPL) FFTW_API(plan) theplan; if (flag == 1) theplan=plan->plan_fast_forward; @@ -795,11 +795,11 @@ void fft_1d_only(FFT_DATA *data, int nsize, int flag, struct fft_plan_3d *plan) if (flag == -1 && plan->scaled) { norm = plan->norm; num = MIN(plan->normnum,nsize); -#if defined(FFT_FFTW3) +#if defined(FFT_FFTW3) || defined(FFT_NVPL) data_ptr = (FFT_SCALAR *)data; #endif for (i = 0; i < num; i++) { -#if defined(FFT_FFTW3) +#if defined(FFT_FFTW3) || defined(FFT_NVPL) *(data_ptr++) *= norm; *(data_ptr++) *= norm; #elif defined(FFT_MKL) diff --git a/src/KSPACE/fft3d.h b/src/KSPACE/fft3d.h index f4ddeebc4d..34b9c3d4fc 100644 --- a/src/KSPACE/fft3d.h +++ b/src/KSPACE/fft3d.h @@ -31,6 +31,10 @@ typedef MKL_Complex8 FFT_DATA; typedef fftwf_complex FFT_DATA; #define FFTW_API(function) fftwf_##function +#elif defined(FFT_NVPL) +#include "nvpl_fftw.h" +typedef fftwf_complex FFT_DATA; +#define FFTW_API(function) fftwf_##function #else /* use a stripped down version of kiss fft as default fft */ @@ -64,6 +68,11 @@ typedef MKL_Complex16 FFT_DATA; typedef fftw_complex FFT_DATA; #define FFTW_API(function) fftw_##function +#elif defined(FFT_NVPL) +#include "nvpl_fftw.h" +typedef fftw_complex FFT_DATA; +#define FFTW_API(function) fftw_##function + #else /* use a stripped down version of kiss fft as default fft */ @@ -108,7 +117,7 @@ struct fft_plan_3d { DFTI_DESCRIPTOR *handle_fast; DFTI_DESCRIPTOR *handle_mid; DFTI_DESCRIPTOR *handle_slow; -#elif defined(FFT_FFTW3) +#elif defined(FFT_FFTW3) || defined(FFT_NVPL) FFTW_API(plan) plan_fast_forward; FFTW_API(plan) plan_fast_backward; FFTW_API(plan) plan_mid_forward; diff --git a/src/KSPACE/pppm.cpp b/src/KSPACE/pppm.cpp index 4fe5075f44..9665d2392d 100644 --- a/src/KSPACE/pppm.cpp +++ b/src/KSPACE/pppm.cpp @@ -1384,15 +1384,20 @@ void PPPM::set_grid_local() // npey_fft,npez_fft = # of procs in y,z dims // if nprocs is small enough, proc can own 1 or more entire xy planes, // else proc owns 2d sub-blocks of yz plane + // NOTE: commented out lines support this + // need to ensure fft3d.cpp and remap.cpp support 2D planes // me_y,me_z = which proc (0-npe_fft-1) I am in y,z dimensions // nlo_fft,nhi_fft = lower/upper limit of the section // of the global FFT mesh that I own in x-pencil decomposition int npey_fft,npez_fft; - if (nz_pppm >= nprocs) { - npey_fft = 1; - npez_fft = nprocs; - } else procs2grid2d(nprocs,ny_pppm,nz_pppm,&npey_fft,&npez_fft); + + //if (nz_pppm >= nprocs) { + // npey_fft = 1; + // npez_fft = nprocs; + //} else procs2grid2d(nprocs,ny_pppm,nz_pppm,&npey_fft,&npez_fft); + + procs2grid2d(nprocs,ny_pppm,nz_pppm,&npey_fft,&npez_fft); int me_y = me % npey_fft; int me_z = me / npey_fft; diff --git a/src/LATBOLTZ/fix_lb_fluid.cpp b/src/LATBOLTZ/fix_lb_fluid.cpp index 7b6e8cf22b..773f60cf0e 100644 --- a/src/LATBOLTZ/fix_lb_fluid.cpp +++ b/src/LATBOLTZ/fix_lb_fluid.cpp @@ -2416,7 +2416,6 @@ void FixLbFluid::dump(const bigint step) // Transpose local arrays to fortran-order for paraview output std::vector density_2_fort(size2); std::vector velocity_2_fort(size2 * 3); - int indexc = 0; for (int i = 0; i < subNbx + 3; i++) for (int j = 0; j < subNby + 3; j++) for (int k = 0; k < subNbz + 3; k++) { @@ -2424,7 +2423,6 @@ void FixLbFluid::dump(const bigint step) velocity_2_fort[0 + 3 * (i + (subNbx + 3) * (j + (subNby + 3) * k))] = u_lb[i][j][k][0]; velocity_2_fort[1 + 3 * (i + (subNbx + 3) * (j + (subNby + 3) * k))] = u_lb[i][j][k][1]; velocity_2_fort[2 + 3 * (i + (subNbx + 3) * (j + (subNby + 3) * k))] = u_lb[i][j][k][2]; - indexc++; } MPI_File_write_all(dump_file_handle_raw, &density_2_fort[0], 1, fluid_density_2_mpitype, diff --git a/src/LEPTON/pair_lepton_coul.h b/src/LEPTON/pair_lepton_coul.h index 8153792bd5..c58177c6cb 100644 --- a/src/LEPTON/pair_lepton_coul.h +++ b/src/LEPTON/pair_lepton_coul.h @@ -27,8 +27,8 @@ namespace LAMMPS_NS { class PairLeptonCoul : public PairLepton { public: - PairLeptonCoul(class LAMMPS *_lmp) : PairLepton(_lmp){}; - ~PairLeptonCoul() override{}; + PairLeptonCoul(class LAMMPS *_lmp) : PairLepton(_lmp) {}; + ~PairLeptonCoul() override {}; void compute(int, int) override; void settings(int, char **) override; void init_style() override; diff --git a/src/LEPTON/pair_lepton_sphere.h b/src/LEPTON/pair_lepton_sphere.h index ab586a309b..9e2642ac50 100644 --- a/src/LEPTON/pair_lepton_sphere.h +++ b/src/LEPTON/pair_lepton_sphere.h @@ -27,7 +27,7 @@ namespace LAMMPS_NS { class PairLeptonSphere : public PairLepton { public: - PairLeptonSphere(class LAMMPS *_lmp) : PairLepton(_lmp){}; + PairLeptonSphere(class LAMMPS *_lmp) : PairLepton(_lmp) {}; void compute(int, int) override; void settings(int, char **) override; diff --git a/src/MAKE/MACHINES/Makefile.aurora b/src/MAKE/MACHINES/Makefile.aurora new file mode 100644 index 0000000000..7c656e6379 --- /dev/null +++ b/src/MAKE/MACHINES/Makefile.aurora @@ -0,0 +1,121 @@ +# aurora = Intel Sapphire Rapids CPU, mpicxx compiler (compatible w/ GPU package) + +SHELL = /bin/sh + +# --------------------------------------------------------------------- +# compiler/linker settings +# specify flags and libraries needed for your compiler + +CC = mpicxx +OPTFLAGS = -DSHAKEATOMIC -DCOMMPARA -xSAPPHIRERAPIDS -O2 -ffp-model=fast -qoverride-limits -qopt-zmm-usage=high +CCFLAGS = -qopenmp -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) +CCFLAGS += -I$(MKLROOT)/include +SHFLAGS = -fPIC +DEPFLAGS = -M + +LINK = mpicxx +LINKFLAGS = -qopenmp $(OPTFLAGS) +LIB = -ltbbmalloc -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core +SIZE = size + +ARCHIVE = ar +ARFLAGS = -rc +SHLIBFLAGS = -shared + +# --------------------------------------------------------------------- +# LAMMPS-specific settings, all OPTIONAL +# specify settings for LAMMPS features you will use +# if you change any -D setting, do full re-compile after "make clean" + +# LAMMPS ifdef settings +# see possible settings in Section 3.5 of the manual + +LMP_INC = -DLAMMPS_GZIP + +# MPI library +# see discussion in Section 3.4 of the manual +# MPI wrapper compiler/linker can provide this info +# can point to dummy MPI library in src/STUBS as in Makefile.serial +# use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts +# INC = path for mpi.h, MPI compiler settings +# PATH = path for MPI library +# LIB = name of MPI library + +MPI_INC = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX=1 +MPI_PATH = +MPI_LIB = + +# FFT library +# see discussion in Section 3.5.2 of manual +# can be left blank to use provided KISS FFT library +# INC = -DFFT setting, e.g. -DFFT_FFTW, FFT compiler settings +# PATH = path for FFT library +# LIB = name of FFT library + +FFT_INC = -DFFT_MKL -DFFT_SINGLE +FFT_PATH = +FFT_LIB = + +# JPEG and/or PNG library +# see discussion in Section 3.5.4 of manual +# only needed if -DLAMMPS_JPEG or -DLAMMPS_PNG listed with LMP_INC +# INC = path(s) for jpeglib.h and/or png.h +# PATH = path(s) for JPEG library and/or PNG library +# LIB = name(s) of JPEG library and/or PNG library + +JPG_INC = +JPG_PATH = +JPG_LIB = + +# --------------------------------------------------------------------- +# build rules and dependencies +# do not edit this section + +include Makefile.package.settings +include Makefile.package + +EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC) +EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH) +EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB) +EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS) +EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS) + +# Path to src files + +vpath %.cpp .. +vpath %.h .. + +# Link target + +$(EXE): main.o $(LMPLIB) $(EXTRA_LINK_DEPENDS) + $(LINK) $(LINKFLAGS) main.o $(EXTRA_PATH) $(LMPLINK) $(EXTRA_LIB) $(LIB) -o $@ + $(SIZE) $@ + +# Library targets + +$(ARLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + @rm -f ../$(ARLIB) + $(ARCHIVE) $(ARFLAGS) ../$(ARLIB) $(OBJ) + @rm -f $(ARLIB) + @ln -s ../$(ARLIB) $(ARLIB) + +$(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) + $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o ../$(SHLIB) \ + $(OBJ) $(EXTRA_LIB) $(LIB) + @rm -f $(SHLIB) + @ln -s ../$(SHLIB) $(SHLIB) + +# Compilation rules + +%.o:%.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< + +# Individual dependencies + +depend : fastdep.exe $(SRC) + @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 + +fastdep.exe: ../DEPEND/fastdep.c + icx -O -o $@ $< + +sinclude .depend diff --git a/src/MAKE/MACHINES/Makefile.aurora_kokkos b/src/MAKE/MACHINES/Makefile.aurora_kokkos index a263d4cb8c..f164188dc0 100644 --- a/src/MAKE/MACHINES/Makefile.aurora_kokkos +++ b/src/MAKE/MACHINES/Makefile.aurora_kokkos @@ -7,12 +7,14 @@ SHELL = /bin/sh # specify flags and libraries needed for your compiler CC = mpicxx -CCFLAGS = -g -O3 -DNDEBUG +CCFLAGS = -g -O3 -DNDEBUG -w +CCFLAGS += -fsycl-device-code-split=per_kernel SHFLAGS = -fPIC DEPFLAGS = -M LINK = mpicxx LINKFLAGS = -g -O3 +LINKFLAGS += -flink-huge-device-code -fsycl-max-parallel-link-jobs=64 LIB = SIZE = size @@ -52,9 +54,9 @@ MPI_LIB = # PATH = path for FFT library # LIB = name of FFT library -FFT_INC = -FFT_PATH = -FFT_LIB = +FFT_INC = -DFFT_KOKKOS_MKL_GPU -DFFT_SINGLE -I${MKL_ROOT}/include +FFT_PATH = -L${MKL_ROOT}/lib -L${TBB_ROOT}/lib/intel64/gcc4.8 +FFT_LIB = -lmkl_sycl_dft -lmkl_intel_ilp64 -lmkl_tbb_thread -lmkl_core -ltbb # JPEG and/or PNG library # see discussion in Section 3.5.4 of manual @@ -116,6 +118,6 @@ depend : fastdep.exe $(SRC) @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1 fastdep.exe: ../DEPEND/fastdep.c - cc -O -o $@ $< + icx -O -o $@ $< sinclude .depend diff --git a/src/MANYBODY/pair_bop.h b/src/MANYBODY/pair_bop.h index b210d1cc07..cdc6033f00 100644 --- a/src/MANYBODY/pair_bop.h +++ b/src/MANYBODY/pair_bop.h @@ -57,18 +57,18 @@ class PairBOP : public Pair { struct PairList1 { double r, dis[3]; double betaS, dBetaS, betaP, dBetaP, rep, dRep; - PairList1(){}; + PairList1() {}; }; struct PairList2 { double r, dis[3]; double rep, dRep; - PairList2(){}; + PairList2() {}; }; struct TripleList { double G, dG, cosAng, dCosAngi[3], dCosAngj[3], dCosAngk[3]; - TripleList(){}; + TripleList() {}; }; struct B_SG { diff --git a/src/MANYBODY/pair_meam_spline.h b/src/MANYBODY/pair_meam_spline.h index ee09b045cf..47f3f3d8df 100644 --- a/src/MANYBODY/pair_meam_spline.h +++ b/src/MANYBODY/pair_meam_spline.h @@ -197,16 +197,10 @@ class PairMEAMSpline : public Pair { } /// Returns the number of bytes used by this function object. - double memory_usage() const - { - return sizeof(*this) + sizeof(X[0]) * N * 3; - } + double memory_usage() const { return sizeof(*this) + sizeof(X[0]) * N * 3; } /// Returns the cutoff radius of this function. - double cutoff() const - { - return X[N - 1]; - } + double cutoff() const { return X[N - 1]; } /// Writes a Gnuplot script that plots the spline function. void writeGnuplot(const char *filename, const char *title = nullptr) const; diff --git a/src/MANYBODY/pair_meam_sw_spline.h b/src/MANYBODY/pair_meam_sw_spline.h index 9123f8c560..a5c1b0ffd4 100644 --- a/src/MANYBODY/pair_meam_sw_spline.h +++ b/src/MANYBODY/pair_meam_sw_spline.h @@ -187,16 +187,10 @@ class PairMEAMSWSpline : public Pair { } /// Returns the number of bytes used by this function object. - double memory_usage() const - { - return sizeof(*this) + sizeof(X[0]) * N * 3; - } + double memory_usage() const { return sizeof(*this) + sizeof(X[0]) * N * 3; } /// Returns the cutoff radius of this function. - double cutoff() const - { - return X[N - 1]; - } + double cutoff() const { return X[N - 1]; } /// Writes a Gnuplot script that plots the spline function. void writeGnuplot(const char *filename, const char *title = nullptr) const; diff --git a/src/MANYBODY/pair_rebomos.h b/src/MANYBODY/pair_rebomos.h index 856a52ca81..d36eb41a74 100644 --- a/src/MANYBODY/pair_rebomos.h +++ b/src/MANYBODY/pair_rebomos.h @@ -49,7 +49,7 @@ class PairREBOMoS : public Pair { int *REBO_numneigh; // # of pair neighbors for each atom int **REBO_firstneigh; // ptr to 1st neighbor of each atom - double *nM, *nS; // sum of weighting fns with REBO neighs + double *nM, *nS; // sum of weighting fns with REBO neighs double rcmin[2][2], rcmax[2][2], rcmaxsq[2][2], rcmaxp[2][2]; double Q[2][2], alpha[2][2], A[2][2], BIJc[2][2], Beta[2][2]; diff --git a/src/MANYBODY/pair_tersoff_mod_c.h b/src/MANYBODY/pair_tersoff_mod_c.h index aff1883bbd..8cea97baaf 100644 --- a/src/MANYBODY/pair_tersoff_mod_c.h +++ b/src/MANYBODY/pair_tersoff_mod_c.h @@ -26,7 +26,7 @@ namespace LAMMPS_NS { class PairTersoffMODC : public PairTersoffMOD { public: - PairTersoffMODC(class LAMMPS *lmp) : PairTersoffMOD(lmp){}; + PairTersoffMODC(class LAMMPS *lmp) : PairTersoffMOD(lmp) {}; static constexpr int NPARAMS_PER_LINE = 21; diff --git a/src/MC/fix_charge_regulation.cpp b/src/MC/fix_charge_regulation.cpp index cd035781c8..ddf14f6804 100644 --- a/src/MC/fix_charge_regulation.cpp +++ b/src/MC/fix_charge_regulation.cpp @@ -218,7 +218,7 @@ void FixChargeRegulation::init() { int flagall = flag; MPI_Allreduce(&flag, &flagall, 1, MPI_INT, MPI_SUM, world); - if (flagall && comm->me == 0) + if (flagall) error->all(FLERR, "fix charge/regulation cannot exchange " "individual atoms (ions) belonging to a molecule"); } diff --git a/src/MC/fix_gcmc.cpp b/src/MC/fix_gcmc.cpp index e0f1cd243b..8fb778207b 100644 --- a/src/MC/fix_gcmc.cpp +++ b/src/MC/fix_gcmc.cpp @@ -564,7 +564,7 @@ void FixGCMC::init() if (molecule[i]) flag = 1; int flagall; MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world); - if (flagall && comm->me == 0) + if (flagall) error->all(FLERR, "Fix gcmc cannot exchange individual atoms belonging to a molecule"); } @@ -579,7 +579,7 @@ void FixGCMC::init() if (molecule[i] == 0) flag = 1; int flagall; MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world); - if (flagall && comm->me == 0) + if (flagall) error->all(FLERR, "All mol IDs should be set for fix gcmc group atoms"); } diff --git a/src/MC/fix_widom.cpp b/src/MC/fix_widom.cpp index 2c76050430..c72beb5051 100644 --- a/src/MC/fix_widom.cpp +++ b/src/MC/fix_widom.cpp @@ -356,7 +356,7 @@ void FixWidom::init() if (molecule[i] == 0) flag = 1; int flagall; MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world); - if (flagall && comm->me == 0) + if (flagall) error->all(FLERR, "All mol IDs should be set for fix widom group atoms"); } diff --git a/src/MDI/fix_mdi_qm.cpp b/src/MDI/fix_mdi_qm.cpp index 46071c5c90..e508315161 100644 --- a/src/MDI/fix_mdi_qm.cpp +++ b/src/MDI/fix_mdi_qm.cpp @@ -1114,7 +1114,7 @@ void FixMDIQM::unit_conversions() int compare_IDs(const int i, const int j, void *ptr) { - tagint *ids = (int *) ptr; + tagint *ids = (tagint *) ptr; if (ids[i] < ids[j]) return -1; if (ids[i] > ids[j]) return 1; return 0; diff --git a/src/MDI/fix_mdi_qmmm.cpp b/src/MDI/fix_mdi_qmmm.cpp index d45290811f..dc5653bfce 100644 --- a/src/MDI/fix_mdi_qmmm.cpp +++ b/src/MDI/fix_mdi_qmmm.cpp @@ -1962,7 +1962,7 @@ void FixMDIQMMM::unit_conversions() int compare_IDs(const int i, const int j, void *ptr) { - tagint *ids = (int *) ptr; + tagint *ids = (tagint *) ptr; if (ids[i] < ids[j]) return -1; if (ids[i] > ids[j]) return 1; return 0; diff --git a/src/ML-IAP/mliap_data.cpp b/src/ML-IAP/mliap_data.cpp index 5d847ee25e..1ca57e2745 100644 --- a/src/ML-IAP/mliap_data.cpp +++ b/src/ML-IAP/mliap_data.cpp @@ -185,7 +185,6 @@ void MLIAPData::generate_neighdata(NeighList *list_in, int eflag_in, int vflag_i int jtype = type[j]; const int jelem = map[jtype]; - lmp_firstneigh[ii][jj] = firstneigh[i][jj]; if (rsq < descriptor->cutsq[ielem][jelem]) { pair_i[ij] = i; jatoms[ij] = j; @@ -193,6 +192,7 @@ void MLIAPData::generate_neighdata(NeighList *list_in, int eflag_in, int vflag_i rij[ij][0] = delx; rij[ij][1] = dely; rij[ij][2] = delz; + lmp_firstneigh[ii][ninside] = firstneigh[i][jj]; ij++; ninside++; } @@ -228,6 +228,7 @@ void MLIAPData::grow_neigharrays() memory->grow(ielems, natomneigh, "MLIAPData:ielems"); memory->grow(itypes, natomneigh, "MLIAPData:itypes"); memory->grow(numneighs, natomneigh, "MLIAPData:numneighs"); + memory->grow(lmp_firstneigh, natomneigh, nneigh_max, "MLIAPData:lmp_firstneigh"); natomneigh_max = natomneigh; } diff --git a/src/ML-IAP/mliap_descriptor.cpp b/src/ML-IAP/mliap_descriptor.cpp index 34f81c3902..b8acd6329e 100644 --- a/src/ML-IAP/mliap_descriptor.cpp +++ b/src/ML-IAP/mliap_descriptor.cpp @@ -28,6 +28,7 @@ MLIAPDescriptor::MLIAPDescriptor(LAMMPS *lmp) : cutghost(nullptr), radelem(nullptr), wjelem(nullptr) { cutmax = 0.0; + allocated_elements = 0; } /* ---------------------------------------------------------------------- */ diff --git a/src/ML-IAP/mliap_descriptor_ace.cpp b/src/ML-IAP/mliap_descriptor_ace.cpp index fd059b822b..b13699193c 100644 --- a/src/ML-IAP/mliap_descriptor_ace.cpp +++ b/src/ML-IAP/mliap_descriptor_ace.cpp @@ -57,7 +57,6 @@ MLIAPDescriptorACE::MLIAPDescriptorACE(LAMMPS *_lmp, char *yacefilename) : { acemlimpl = new ACE_ML_impl; - allocated_elements = 0; //read in file with CG coefficients or c_tilde coefficients ctilde_file = yacefilename; delete acemlimpl->basis_set; diff --git a/src/ML-PACE/pair_pace.h b/src/ML-PACE/pair_pace.h index 5cff7045fa..a972e857d2 100644 --- a/src/ML-PACE/pair_pace.h +++ b/src/ML-PACE/pair_pace.h @@ -55,7 +55,7 @@ class PairPACE : public Pair { int nmax_corerep; virtual void allocate(); - double *corerep_factor; //per-atom core-rep factor (= 1 - fcut) + double *corerep_factor; //per-atom core-rep factor (= 1 - fcut) int flag_corerep_factor; double **scale; diff --git a/src/ML-QUIP/pair_quip.cpp b/src/ML-QUIP/pair_quip.cpp index a2de4bf38a..35ba4ff8e4 100644 --- a/src/ML-QUIP/pair_quip.cpp +++ b/src/ML-QUIP/pair_quip.cpp @@ -286,7 +286,7 @@ void PairQUIP::coeff(int narg, char **arg) // and returns the necessary size of quip_potential. This behavior // is invoked by setting n_potential_quip to 0. n_quip_potential = 0; - quip_potential = new int[0]; + quip_potential = new int[1]; quip_lammps_potential_initialise(quip_potential, &n_quip_potential, &cutoff, quip_file, &n_quip_file, quip_string, &n_quip_string); delete[] quip_potential; diff --git a/src/ML-QUIP/pair_quip.h b/src/ML-QUIP/pair_quip.h index 2cbbcd4af8..7f23ab4478 100644 --- a/src/ML-QUIP/pair_quip.h +++ b/src/ML-QUIP/pair_quip.h @@ -43,8 +43,10 @@ class PairQUIP : public Pair { double init_one(int, int) override; void allocate(); void *extract(const char *, int &); + protected: double scale; + private: double cutoff; int *quip_potential; diff --git a/src/MOLECULE/angle_harmonic.cpp b/src/MOLECULE/angle_harmonic.cpp index e9f1c528ef..040cbe7530 100644 --- a/src/MOLECULE/angle_harmonic.cpp +++ b/src/MOLECULE/angle_harmonic.cpp @@ -276,17 +276,17 @@ void AngleHarmonic::born_matrix(int type, int i1, int i2, int i3, double &du, do double delx1 = x[i1][0] - x[i2][0]; double dely1 = x[i1][1] - x[i2][1]; double delz1 = x[i1][2] - x[i2][2]; - domain->minimum_image(delx1,dely1,delz1); - double r1 = sqrt(delx1*delx1 + dely1*dely1 + delz1*delz1); + domain->minimum_image(delx1, dely1, delz1); + double r1 = sqrt(delx1 * delx1 + dely1 * dely1 + delz1 * delz1); double delx2 = x[i3][0] - x[i2][0]; double dely2 = x[i3][1] - x[i2][1]; double delz2 = x[i3][2] - x[i2][2]; - domain->minimum_image(delx2,dely2,delz2); - double r2 = sqrt(delx2*delx2 + dely2*dely2 + delz2*delz2); + domain->minimum_image(delx2, dely2, delz2); + double r2 = sqrt(delx2 * delx2 + dely2 * dely2 + delz2 * delz2); - double c = delx1*delx2 + dely1*dely2 + delz1*delz2; - c /= r1*r2; + double c = delx1 * delx2 + dely1 * dely2 + delz1 * delz2; + c /= r1 * r2; if (c > 1.0) c = 1.0; if (c < -1.0) c = -1.0; double theta = acos(c); diff --git a/src/MOLECULE/dihedral_multi_harmonic.cpp b/src/MOLECULE/dihedral_multi_harmonic.cpp index 8e6685cac9..2d1e16b9e4 100644 --- a/src/MOLECULE/dihedral_multi_harmonic.cpp +++ b/src/MOLECULE/dihedral_multi_harmonic.cpp @@ -326,8 +326,8 @@ void DihedralMultiHarmonic::write_data(FILE *fp) /* ---------------------------------------------------------------------- */ -void DihedralMultiHarmonic::born_matrix(int nd, int i1, int i2, int i3, int i4, - double &du, double &du2) +void DihedralMultiHarmonic::born_matrix(int nd, int i1, int i2, int i3, int i4, double &du, + double &du2) { double vb1x, vb1y, vb1z, vb2x, vb2y, vb2z, vb3x, vb3y, vb3z, vb2xm, vb2ym, vb2zm; double sb1, sb3, rb1, rb3, c0, b1mag2, b1mag, b2mag2; diff --git a/src/MOLECULE/dihedral_opls.cpp b/src/MOLECULE/dihedral_opls.cpp index eced454d68..e99d83f631 100644 --- a/src/MOLECULE/dihedral_opls.cpp +++ b/src/MOLECULE/dihedral_opls.cpp @@ -336,8 +336,7 @@ void DihedralOPLS::write_data(FILE *fp) /* ----------------------------------------------------------------------*/ -void DihedralOPLS::born_matrix(int nd, int i1, int i2, int i3, int i4, - double &du, double &du2) +void DihedralOPLS::born_matrix(int nd, int i1, int i2, int i3, int i4, double &du, double &du2) { double vb1x, vb1y, vb1z, vb2x, vb2y, vb2z, vb3x, vb3y, vb3z, vb2xm, vb2ym, vb2zm; double sb1, sb3, rb1, rb3, c0, b1mag2, b1mag, b2mag2; @@ -425,9 +424,10 @@ void DihedralOPLS::born_matrix(int nd, int i1, int i2, int i3, int i4, si = sin(phi); if (fabs(si) < SMALLER) si = SMALLER; - du = k1[type] - 2.0 * k2[type] * sin(2.0 * phi) / si + 3.0 * k3[type] * sin(3.0 * phi) / si - - 4.0 * k4[type] * sin(4.0 * phi) / si; - du2 = (4.0 * k2[type] * si * cos(2.0 * phi) - 2.0 * k2[type] * sin(2.0 * phi) - - 9.0 * k3[type] * si * cos(3.0 * phi) + 3.0 * k3[type] * sin(3.0 * phi) - + 16.0 * k4[type] * si * cos(4.0 * phi) - 4.0 * k4[type] * sin(4.0 * phi)) / (si * si * si); + du = k1[type] - 2.0 * k2[type] * sin(2.0 * phi) / si + 3.0 * k3[type] * sin(3.0 * phi) / si - + 4.0 * k4[type] * sin(4.0 * phi) / si; + du2 = (4.0 * k2[type] * si * cos(2.0 * phi) - 2.0 * k2[type] * sin(2.0 * phi) - + 9.0 * k3[type] * si * cos(3.0 * phi) + 3.0 * k3[type] * sin(3.0 * phi) + + 16.0 * k4[type] * si * cos(4.0 * phi) - 4.0 * k4[type] * sin(4.0 * phi)) / + (si * si * si); } diff --git a/src/MOLECULE/pair_hbond_dreiding_lj.cpp b/src/MOLECULE/pair_hbond_dreiding_lj.cpp index 274f8bc2a3..4536cc8e05 100644 --- a/src/MOLECULE/pair_hbond_dreiding_lj.cpp +++ b/src/MOLECULE/pair_hbond_dreiding_lj.cpp @@ -396,14 +396,14 @@ void PairHbondDreidingLJ::init_style() // and computing forces on A,H which may be on different procs if (atom->molecular == Atom::ATOMIC) - error->all(FLERR,"Pair style hbond/dreiding requires molecular system"); + error->all(FLERR,"Pair style hbond/dreiding/lj requires molecular system"); if (atom->tag_enable == 0) - error->all(FLERR,"Pair style hbond/dreiding requires atom IDs"); + error->all(FLERR,"Pair style hbond/dreiding/lj requires atom IDs"); if (atom->map_style == Atom::MAP_NONE) - error->all(FLERR,"Pair style hbond/dreiding requires an atom map, " + error->all(FLERR,"Pair style hbond/dreiding/lj requires an atom map, " "see atom_modify"); if (force->newton_pair == 0) - error->all(FLERR,"Pair style hbond/dreiding requires newton pair on"); + error->all(FLERR,"Pair style hbond/dreiding/lj requires newton pair on"); // set donor[M]/acceptor[M] if any atom of type M is a donor/acceptor @@ -419,7 +419,7 @@ void PairHbondDreidingLJ::init_style() acceptor[j] = 1; } - if (!anyflag) error->all(FLERR,"No pair hbond/dreiding coefficients set"); + if (!anyflag) error->all(FLERR,"No pair hbond/dreiding/lj coefficients set"); // set additional param values // offset is for LJ only, angle term is not included diff --git a/src/MOLECULE/pair_hbond_dreiding_morse.cpp b/src/MOLECULE/pair_hbond_dreiding_morse.cpp index c8bc0a627d..d976b66460 100644 --- a/src/MOLECULE/pair_hbond_dreiding_morse.cpp +++ b/src/MOLECULE/pair_hbond_dreiding_morse.cpp @@ -323,14 +323,14 @@ void PairHbondDreidingMorse::init_style() // and computing forces on A,H which may be on different procs if (atom->molecular == Atom::ATOMIC) - error->all(FLERR,"Pair style hbond/dreiding requires molecular system"); + error->all(FLERR,"Pair style hbond/dreiding/morse requires molecular system"); if (atom->tag_enable == 0) - error->all(FLERR,"Pair style hbond/dreiding requires atom IDs"); + error->all(FLERR,"Pair style hbond/dreiding/morse requires atom IDs"); if (atom->map_style == Atom::MAP_NONE) - error->all(FLERR,"Pair style hbond/dreiding requires an atom map, " + error->all(FLERR,"Pair style hbond/dreiding/morse requires an atom map, " "see atom_modify"); if (force->newton_pair == 0) - error->all(FLERR,"Pair style hbond/dreiding requires newton pair on"); + error->all(FLERR,"Pair style hbond/dreiding/morse requires newton pair on"); // set donor[M]/acceptor[M] if any atom of type M is a donor/acceptor @@ -346,7 +346,7 @@ void PairHbondDreidingMorse::init_style() acceptor[j] = 1; } - if (!anyflag) error->all(FLERR,"No pair hbond/dreiding coefficients set"); + if (!anyflag) error->all(FLERR,"No pair hbond/dreiding/morse coefficients set"); // set additional param values // offset is for Morse only, angle term is not included diff --git a/src/OPENMP/pair_lj_cut_tip4p_cut_omp.cpp b/src/OPENMP/pair_lj_cut_tip4p_cut_omp.cpp index c54e681686..36033dcaf4 100644 --- a/src/OPENMP/pair_lj_cut_tip4p_cut_omp.cpp +++ b/src/OPENMP/pair_lj_cut_tip4p_cut_omp.cpp @@ -120,7 +120,7 @@ void PairLJCutTIP4PCutOMP::eval(int iifrom, int iito, ThrData * const thr) double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,evdwl,ecoul; double r,rsq,r2inv,r6inv,forcecoul,forcelj,cforce; double factor_coul,factor_lj; - double v[6]; + double v[6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; double fdx,fdy,fdz,fOx,fOy,fOz,fHx,fHy,fHz; dbl3_t x1,x2,xH1,xH2; diff --git a/src/OPENMP/pair_lj_cut_tip4p_long_omp.cpp b/src/OPENMP/pair_lj_cut_tip4p_long_omp.cpp index 8f824ca272..20d4b9481d 100644 --- a/src/OPENMP/pair_lj_cut_tip4p_long_omp.cpp +++ b/src/OPENMP/pair_lj_cut_tip4p_long_omp.cpp @@ -139,7 +139,7 @@ void PairLJCutTIP4PLongOMP::eval(int iifrom, int iito, ThrData * const thr) double r,rsq,r2inv,r6inv,forcecoul,forcelj,cforce; double factor_coul,factor_lj; double grij,expm2,prefactor,t,erfc; - double v[6]; + double v[6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; double fdx,fdy,fdz,fOx,fOy,fOz,fHx,fHy,fHz; dbl3_t x1,x2,xH1,xH2; diff --git a/src/OPENMP/pair_lj_cut_tip4p_long_soft_omp.cpp b/src/OPENMP/pair_lj_cut_tip4p_long_soft_omp.cpp index a646a2dec1..66a1559448 100644 --- a/src/OPENMP/pair_lj_cut_tip4p_long_soft_omp.cpp +++ b/src/OPENMP/pair_lj_cut_tip4p_long_soft_omp.cpp @@ -127,7 +127,7 @@ void PairLJCutTIP4PLongSoftOMP::eval(int iifrom, int iito, ThrData * const thr) double factor_coul,factor_lj; double grij,expm2,prefactor,t,erfc; double denc, denlj, r4sig6; - double v[6]; + double v[6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; double fdx,fdy,fdz,fOx,fOy,fOz,fHx,fHy,fHz; dbl3_t x1,x2,xH1,xH2; diff --git a/src/OPENMP/pair_lj_long_tip4p_long_omp.cpp b/src/OPENMP/pair_lj_long_tip4p_long_omp.cpp index b8206bd21f..f93c7f480d 100644 --- a/src/OPENMP/pair_lj_long_tip4p_long_omp.cpp +++ b/src/OPENMP/pair_lj_long_tip4p_long_omp.cpp @@ -1614,7 +1614,7 @@ void PairLJLongTIP4PLongOMP::eval_outer(int iifrom, int iito, ThrData * const th double qtmp,xtmp,ytmp,ztmp,delx,dely,delz; double r2inv,forcecoul,forcelj,cforce, respa_coul, respa_lj, frespa; double fdx,fdy,fdz,fOx,fOy,fOz,fHx,fHy,fHz; - double v[6]; + double v[6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; dbl3_t x1,x2,xH1,xH2; const auto * _noalias const x = (dbl3_t *) atom->x[0]; diff --git a/src/OPENMP/pair_tip4p_cut_omp.cpp b/src/OPENMP/pair_tip4p_cut_omp.cpp index d43559fc81..a93a10f192 100644 --- a/src/OPENMP/pair_tip4p_cut_omp.cpp +++ b/src/OPENMP/pair_tip4p_cut_omp.cpp @@ -120,7 +120,7 @@ void PairTIP4PCutOMP::eval(int iifrom, int iito, ThrData * const thr) double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,ecoul; double r,rsq,r2inv,forcecoul,cforce; double factor_coul; - double v[6]; + double v[6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; double fdx,fdy,fdz,fOx,fOy,fOz,fHx,fHy,fHz; dbl3_t x1,x2,xH1,xH2; diff --git a/src/OPENMP/pair_tip4p_long_omp.cpp b/src/OPENMP/pair_tip4p_long_omp.cpp index 186549a999..3d96c6ac2e 100644 --- a/src/OPENMP/pair_tip4p_long_omp.cpp +++ b/src/OPENMP/pair_tip4p_long_omp.cpp @@ -139,7 +139,7 @@ void PairTIP4PLongOMP::eval(int iifrom, int iito, ThrData * const thr) double r,rsq,r2inv,forcecoul,cforce; double factor_coul; double grij,expm2,prefactor,t,erfc; - double v[6]; + double v[6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; double fdx,fdy,fdz,fOx,fOy,fOz,fHx,fHy,fHz; dbl3_t x1,x2,xH1,xH2; diff --git a/src/OPENMP/pair_tip4p_long_soft_omp.cpp b/src/OPENMP/pair_tip4p_long_soft_omp.cpp index d2fa95a10c..8799e05b21 100644 --- a/src/OPENMP/pair_tip4p_long_soft_omp.cpp +++ b/src/OPENMP/pair_tip4p_long_soft_omp.cpp @@ -124,7 +124,7 @@ void PairTIP4PLongSoftOMP::eval(int iifrom, int iito, ThrData * const thr) double r,rsq,forcecoul,cforce; double factor_coul,denc; double grij,expm2,prefactor,t,erfc; - double v[6]; + double v[6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; double fdx,fdy,fdz,fOx,fOy,fOz,fHx,fHy,fHz; dbl3_t x1,x2,xH1,xH2; diff --git a/src/OPT/pair_aip_water_2dm_opt.h b/src/OPT/pair_aip_water_2dm_opt.h index 50b5043360..18eee58d72 100644 --- a/src/OPT/pair_aip_water_2dm_opt.h +++ b/src/OPT/pair_aip_water_2dm_opt.h @@ -1,4 +1,4 @@ - /* -*- c++ -*- ---------------------------------------------------------- +/* -*- c++ -*- ---------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories LAMMPS development team: developers@lammps.org @@ -20,8 +20,8 @@ PairStyle(aip/water/2dm/opt,PairAIPWATER2DMOpt); #ifndef LMP_PAIR_AIP_WATER_2DM_OPT_H #define LMP_PAIR_AIP_WATER_2DM_OPT_H -#include "pair_ilp_graphene_hbn_opt.h" #include "pair_aip_water_2dm.h" +#include "pair_ilp_graphene_hbn_opt.h" namespace LAMMPS_NS { diff --git a/src/OPT/pair_ilp_graphene_hbn_opt.h b/src/OPT/pair_ilp_graphene_hbn_opt.h index 01b66bb2fa..f2fa30d595 100644 --- a/src/OPT/pair_ilp_graphene_hbn_opt.h +++ b/src/OPT/pair_ilp_graphene_hbn_opt.h @@ -35,8 +35,8 @@ class PairILPGrapheneHBNOpt : virtual public PairILPGrapheneHBN { protected: void update_internal_list(); template - void calc_atom_normal(int i, int itype, int *ILP_neigh, int nneigh, double *normal, double (*dnormdri)[3], - double (*dnormdrk)[3][3]); + void calc_atom_normal(int i, int itype, int *ILP_neigh, int nneigh, double *normal, + double (*dnormdri)[3], double (*dnormdrk)[3][3]); template void eval(); int *layered_neigh; @@ -51,7 +51,6 @@ class PairILPGrapheneHBNOpt : virtual public PairILPGrapheneHBN { SAIP_BNCH, WATER, }; - }; } // namespace LAMMPS_NS diff --git a/src/OPT/pair_lj_cut_tip4p_long_opt.cpp b/src/OPT/pair_lj_cut_tip4p_long_opt.cpp index 9a9e536bfe..e719efe138 100644 --- a/src/OPT/pair_lj_cut_tip4p_long_opt.cpp +++ b/src/OPT/pair_lj_cut_tip4p_long_opt.cpp @@ -107,7 +107,7 @@ void PairLJCutTIP4PLongOpt::eval() double r,rsq,r2inv,r6inv,forcecoul,forcelj,cforce; double factor_coul,factor_lj; double grij,expm2,prefactor,t,erfc; - double v[6]; + double v[6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; double fdx,fdy,fdz,fOx,fOy,fOz,fHx,fHy,fHz; const double *x1,*x2,*xH1,*xH2; diff --git a/src/Purge.list b/src/Purge.list index 14708a111e..7098d39e3a 100644 --- a/src/Purge.list +++ b/src/Purge.list @@ -53,6 +53,11 @@ lmpinstalledpkgs.h lmpgitversion.h mliap_model_python_couple.cpp mliap_model_python_couple.h +# renamed in September 2024 +group_ndx.cpp +group_ndx.h +ndx_group.cpp +ndx_group.h # removed in August 2023 dump_atom_mpiio.cpp dump_atom_mpiio.h diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index 0e1335282c..e09921d11b 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -237,8 +237,9 @@ void FixQEq::reallocate_storage() void FixQEq::allocate_matrix() { - int i,ii,inum,m; + int i,ii,inum; int *ilist, *numneigh; + bigint m; int mincap; double safezone; @@ -261,7 +262,10 @@ void FixQEq::allocate_matrix() i = ilist[ii]; m += numneigh[i]; } - m_cap = MAX((int)(m * safezone), mincap * MIN_NBRS); + bigint m_cap_big = (bigint)MAX(m * safezone, mincap * MIN_NBRS); + if (m_cap_big > MAXSMALLINT) + error->one(FLERR,"Too many neighbors in fix {}",style); + m_cap = m_cap_big; H.n = n_cap; H.m = m_cap; diff --git a/src/REACTION/fix_bond_react.cpp b/src/REACTION/fix_bond_react.cpp index 8c241355fd..1e4ae33ee6 100644 --- a/src/REACTION/fix_bond_react.cpp +++ b/src/REACTION/fix_bond_react.cpp @@ -58,7 +58,7 @@ using namespace MathConst; static const char cite_fix_bond_react[] = "fix bond/react: reacter.org doi:10.1016/j.polymer.2017.09.038, " - "doi:10.1021/acs.macromol.0c02012\n\n" + "doi:10.1021/acs.macromol.0c02012, doi:10.1016/j.cpc.2024.109287\n\n" "@Article{Gissinger17,\n" " author = {J. R. Gissinger and B. D. Jensen and K. E. Wise},\n" " title = {Modeling Chemical Reactions in Classical Molecular Dynamics Simulations},\n" @@ -75,6 +75,14 @@ static const char cite_fix_bond_react[] = " volume = 53,\n" " number = 22,\n" " pages = {9953--9961}\n" + "}\n\n" + "@Article{Gissinger24,\n" + " author = {J. R. Gissinger, B. D. Jensen, K. E. Wise},\n" + " title = {Molecular Modeling of Reactive Systems with REACTER},\n" + " journal = {Computer Physics Communications},\n" + " year = 2024,\n" + " volume = 304,\n" + " number = 109287\n" "}\n\n"; static constexpr double BIG = 1.0e20; @@ -225,8 +233,8 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : memory->create(reacted_mol,nreacts,"bond/react:reacted_mol"); memory->create(fraction,nreacts,"bond/react:fraction"); memory->create(max_rxn,nreacts,"bond/react:max_rxn"); - memory->create(nlocalskips,nreacts,"bond/react:nlocalskips"); - memory->create(nghostlyskips,nreacts,"bond/react:nghostlyskips"); + memory->create(nlocalkeep,nreacts,"bond/react:nlocalkeep"); + memory->create(nghostlykeep,nreacts,"bond/react:nghostlykeep"); memory->create(seed,nreacts,"bond/react:seed"); memory->create(limit_duration,nreacts,"bond/react:limit_duration"); memory->create(rate_limit,3,nreacts,"bond/react:rate_limit"); @@ -486,10 +494,6 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : get_molxspecials(); read_map_file(i); fclose(fp); - if (ncreate == 0 && onemol->natoms != twomol->natoms) - error->all(FLERR,"Fix bond/react: Reaction templates must contain the same number of atoms"); - else if (ncreate > 0 && onemol->natoms + ncreate != twomol->natoms) - error->all(FLERR,"Fix bond/react: Incorrect number of created atoms"); iatomtype[i] = onemol->type[ibonding[i]-1]; jatomtype[i] = onemol->type[jbonding[i]-1]; find_landlocked_atoms(i); @@ -644,8 +648,8 @@ FixBondReact::~FixBondReact() memory->destroy(fraction); memory->destroy(seed); memory->destroy(max_rxn); - memory->destroy(nlocalskips); - memory->destroy(nghostlyskips); + memory->destroy(nlocalkeep); + memory->destroy(nghostlykeep); memory->destroy(limit_duration); memory->destroy(var_flag); memory->destroy(var_id); @@ -716,6 +720,7 @@ int FixBondReact::setmask() int mask = 0; mask |= POST_INTEGRATE; mask |= POST_INTEGRATE_RESPA; + mask |= POST_FORCE; return mask; } @@ -872,8 +877,8 @@ void FixBondReact::post_integrate() reaction_count[i] = 0; local_rxn_count[i] = 0; ghostly_rxn_count[i] = 0; - nlocalskips[i] = 0; - nghostlyskips[i] = 0; + nlocalkeep[i] = INT_MAX; + nghostlykeep[i] = INT_MAX; // update reaction probability if (var_flag[PROB][i]) fraction[i] = input->variable->compute_equal(var_id[PROB][i]); @@ -1424,10 +1429,13 @@ void FixBondReact::superimpose_algorithm() MPI_Allreduce(&local_rxn_count[0],&reaction_count[0],nreacts,MPI_INT,MPI_SUM,world); int rxnflag = 0; + int *delta_rxn; + memory->create(delta_rxn,nreacts,"bond/react:delta_rxn"); if (comm->me == 0) for (int i = 0; i < nreacts; i++) { - reaction_count_total[i] += reaction_count[i] + ghostly_rxn_count[i]; - rxnflag += reaction_count[i] + ghostly_rxn_count[i]; + delta_rxn[i] = reaction_count[i] + ghostly_rxn_count[i]; + reaction_count_total[i] += delta_rxn[i]; + rxnflag += delta_rxn[i]; } MPI_Bcast(&reaction_count_total[0], nreacts, MPI_INT, 0, world); @@ -1460,42 +1468,43 @@ void FixBondReact::superimpose_algorithm() if (overstep > 0) { // let's randomly choose rxns to skip, unbiasedly from local and ghostly int *local_rxncounts; - int *all_localskips; + int *all_localkeep; memory->create(local_rxncounts,nprocs,"bond/react:local_rxncounts"); - memory->create(all_localskips,nprocs,"bond/react:all_localskips"); + memory->create(all_localkeep,nprocs,"bond/react:all_localkeep"); MPI_Gather(&local_rxn_count[i],1,MPI_INT,local_rxncounts,1,MPI_INT,0,world); if (comm->me == 0) { - int delta_rxn = reaction_count[i] + ghostly_rxn_count[i]; // when using variable input for rate_limit, rate_limit_overstep could be > delta_rxn (below) // we need to limit overstep to the number of reactions on this timestep // essentially skipping all reactions, would be more efficient to use a skip_all flag - if (overstep > delta_rxn) overstep = delta_rxn; + if (overstep > delta_rxn[i]) overstep = delta_rxn[i]; + int nkeep = delta_rxn[i] - overstep; int *rxn_by_proc; - memory->create(rxn_by_proc,delta_rxn,"bond/react:rxn_by_proc"); - for (int j = 0; j < delta_rxn; j++) + memory->create(rxn_by_proc,delta_rxn[i],"bond/react:rxn_by_proc"); + for (int j = 0; j < delta_rxn[i]; j++) rxn_by_proc[j] = -1; // corresponds to ghostly int itemp = 0; for (int j = 0; j < nprocs; j++) for (int k = 0; k < local_rxncounts[j]; k++) rxn_by_proc[itemp++] = j; - std::shuffle(&rxn_by_proc[0],&rxn_by_proc[delta_rxn], park_rng); + std::shuffle(&rxn_by_proc[0],&rxn_by_proc[delta_rxn[i]], park_rng); for (int j = 0; j < nprocs; j++) - all_localskips[j] = 0; - nghostlyskips[i] = 0; - for (int j = 0; j < overstep; j++) { - if (rxn_by_proc[j] == -1) nghostlyskips[i]++; - else all_localskips[rxn_by_proc[j]]++; + all_localkeep[j] = 0; + nghostlykeep[i] = 0; + for (int j = 0; j < nkeep; j++) { + if (rxn_by_proc[j] == -1) nghostlykeep[i]++; + else all_localkeep[rxn_by_proc[j]]++; } memory->destroy(rxn_by_proc); reaction_count_total[i] -= overstep; } - MPI_Scatter(&all_localskips[0],1,MPI_INT,&nlocalskips[i],1,MPI_INT,0,world); - MPI_Bcast(&nghostlyskips[i],1,MPI_INT,0,world); + MPI_Scatter(&all_localkeep[0],1,MPI_INT,&nlocalkeep[i],1,MPI_INT,0,world); + MPI_Bcast(&nghostlykeep[i],1,MPI_INT,0,world); memory->destroy(local_rxncounts); - memory->destroy(all_localskips); + memory->destroy(all_localkeep); } } MPI_Bcast(&reaction_count_total[0], nreacts, MPI_INT, 0, world); + memory->destroy(delta_rxn); // this updates topology next step next_reneighbor = update->ntimestep; @@ -2965,6 +2974,8 @@ void FixBondReact::update_everything() int *type = atom->type; int **nspecial = atom->nspecial; tagint **special = atom->special; + tagint *tag = atom->tag; + AtomVec *avec = atom->avec; int **bond_type = atom->bond_type; tagint **bond_atom = atom->bond_atom; @@ -2977,13 +2988,16 @@ void FixBondReact::update_everything() memory->create(mark,nmark,"bond/react:mark"); for (int i = 0; i < nmark; i++) mark[i] = 0; + // used when creating atoms + addatomtag = 0; + for (int i = 0; i < nlocal; i++) addatomtag = MAX(addatomtag,tag[i]); + MPI_Allreduce(MPI_IN_PLACE,&addatomtag,1,MPI_LMP_TAGINT,MPI_MAX,world); + addatoms.clear(); + // flag used to delete special interactions int *delflag; memory->create(delflag,atom->maxspecial,"bond/react:delflag"); - tagint *tag = atom->tag; - AtomVec *avec = atom->avec; - // used when creating atoms int inserted_atoms_flag = 0; @@ -3026,13 +3040,14 @@ void FixBondReact::update_everything() for (int pass = 0; pass < 2; pass++) { update_num_mega = 0; - int *iskip = new int[nreacts]; - for (int i = 0; i < nreacts; i++) iskip[i] = 0; + int *noccur = new int[nreacts]; + for (int i = 0; i < nreacts; i++) noccur[i] = 0; if (pass == 0) { for (int i = 0; i < local_num_mega; i++) { rxnID = (int) local_mega_glove[0][i]; // reactions already shuffled from dedup procedure, so can skip first N - if (iskip[rxnID]++ < nlocalskips[rxnID]) continue; + // wait, this check needs to be after add atoms, because they can also be 'skipped' due to overlap + if (noccur[rxnID] >= nlocalkeep[rxnID]) continue; // this will be overwritten if reaction skipped by create_atoms below update_mega_glove[0][update_num_mega] = (tagint) local_mega_glove[0][i]; @@ -3043,13 +3058,14 @@ void FixBondReact::update_everything() if (create_atoms_flag[rxnID] == 1) { onemol = atom->molecules[unreacted_mol[rxnID]]; twomol = atom->molecules[reacted_mol[rxnID]]; - if (insert_atoms(update_mega_glove,update_num_mega)) { + if (insert_atoms_setup(update_mega_glove,update_num_mega)) { inserted_atoms_flag = 1; } else { // create aborted reaction_count_total[rxnID]--; continue; } } + noccur[rxnID]++; if (rescale_charges_flag[rxnID]) sim_total_charges[update_num_mega] = local_mega_glove[1][i]; update_num_mega++; @@ -3058,7 +3074,7 @@ void FixBondReact::update_everything() for (int i = 0; i < global_megasize; i++) { rxnID = (int) global_mega_glove[0][i]; // reactions already shuffled from dedup procedure, so can skip first N - if (iskip[rxnID]++ < nghostlyskips[rxnID]) continue; + if (noccur[rxnID] >= nghostlykeep[rxnID]) continue; // this will be overwritten if reaction skipped by create_atoms below update_mega_glove[0][update_num_mega] = (tagint) global_mega_glove[0][i]; @@ -3071,29 +3087,48 @@ void FixBondReact::update_everything() if (create_atoms_flag[rxnID] == 1) { onemol = atom->molecules[unreacted_mol[rxnID]]; twomol = atom->molecules[reacted_mol[rxnID]]; - if (insert_atoms(update_mega_glove,update_num_mega)) { + if (insert_atoms_setup(update_mega_glove,update_num_mega)) { inserted_atoms_flag = 1; } else { // create aborted reaction_count_total[rxnID]--; continue; } } + noccur[rxnID]++; if (rescale_charges_flag[rxnID]) sim_total_charges[update_num_mega] = global_mega_glove[1][i]; update_num_mega++; } } - delete [] iskip; + delete [] noccur; if (update_num_mega == 0) continue; - // if inserted atoms and global map exists, reset map now instead - // of waiting for comm since other pre-exchange fixes may use it - // invoke map_init() b/c atom count has grown - // do this once after all atom insertions - if (inserted_atoms_flag == 1 && atom->map_style != Atom::MAP_NONE) { - atom->map_init(); - atom->map_set(); + // insert all atoms for all rxns here + if (inserted_atoms_flag == 1) { + // clear to-be-overwritten ghost info + atom->nghost = 0; + atom->avec->clear_bonus(); + + for (auto & myaddatom : addatoms) { + atom->avec->create_atom(myaddatom.type,myaddatom.x); + int n = atom->nlocal - 1; + atom->tag[n] = myaddatom.tag; + atom->molecule[n] = myaddatom.molecule; + atom->mask[n] = myaddatom.mask; + atom->image[n] = myaddatom.image; + atom->v[n][0] = myaddatom.v[0]; + atom->v[n][1] = myaddatom.v[1]; + atom->v[n][2] = myaddatom.v[2]; + if (atom->rmass) atom->rmass[n]= myaddatom.rmass; + modify->create_attribute(n); + } + + // reset atom->map + if (atom->map_style != Atom::MAP_NONE) { + atom->map_init(); + atom->map_set(); + } } // mark to-delete atoms @@ -3620,10 +3655,6 @@ void FixBondReact::update_everything() atom->natoms -= ndel; // done deleting atoms - - // reset mol ids - if (reset_mol_ids_flag) reset_mol_ids->reset(); - // something to think about: this could done much more concisely if // all atom-level info (bond,angles, etc...) were kinda inherited from a common data struct --JG @@ -3651,17 +3682,17 @@ void FixBondReact::update_everything() } /* ---------------------------------------------------------------------- -insert created atoms +setup for inserting created atoms +atoms for all rxns are actually created all at once in update_everything ------------------------------------------------------------------------- */ -int FixBondReact::insert_atoms(tagint **my_update_mega_glove, int iupdate) +int FixBondReact::insert_atoms_setup(tagint **my_update_mega_glove, int iupdate) { // inserting atoms based off fix_deposit->pre_exchange int flag; imageint *imageflags; double **coords,lamda[3],rotmat[3][3]; double *newcoord; - double **v = atom->v; double t,delx,dely,delz,rsq; memory->create(coords,twomol->natoms,3,"bond/react:coords"); @@ -3677,19 +3708,13 @@ int FixBondReact::insert_atoms(tagint **my_update_mega_glove, int iupdate) } // find current max atom and molecule IDs - tagint *tag = atom->tag; double **x = atom->x; tagint *molecule = atom->molecule; int nlocal = atom->nlocal; - tagint maxtag_all,maxmol_all; - tagint max = 0; - for (int i = 0; i < nlocal; i++) max = MAX(max,tag[i]); - MPI_Allreduce(&max,&maxtag_all,1,MPI_LMP_TAGINT,MPI_MAX,world); - - max = 0; - for (int i = 0; i < nlocal; i++) max = MAX(max,molecule[i]); - MPI_Allreduce(&max,&maxmol_all,1,MPI_LMP_TAGINT,MPI_MAX,world); + tagint maxmol_all = 0;; + for (int i = 0; i < nlocal; i++) maxmol_all = MAX(maxmol_all,molecule[i]); + MPI_Allreduce(MPI_IN_PLACE,&maxmol_all,1,MPI_LMP_TAGINT,MPI_MAX,world); int dimension = domain->dimension; @@ -3786,6 +3811,26 @@ int FixBondReact::insert_atoms(tagint **my_update_mega_glove, int iupdate) if (abortflag) break; } } + // also check against previous to-be-added atoms + if (!abortflag) { + for (auto & myaddatom : addatoms) { + for (int m = 0; m < twomol->natoms; m++) { + if (create_atoms[m][rxnID] == 1) { + delx = coords[m][0] - myaddatom.x[0]; + dely = coords[m][1] - myaddatom.x[1]; + delz = coords[m][2] - myaddatom.x[2]; + domain->minimum_image(delx,dely,delz); + rsq = delx*delx + dely*dely + delz*delz; + if (rsq < overlapsq[rxnID]) { + abortflag = 1; + break; + } + } + } + if (abortflag) break; + } + } + MPI_Allreduce(MPI_IN_PLACE,&abortflag,1,MPI_INT,MPI_MAX,world); if (abortflag) { memory->destroy(coords); @@ -3794,12 +3839,6 @@ int FixBondReact::insert_atoms(tagint **my_update_mega_glove, int iupdate) } } - // clear ghost count and any ghost bonus data internal to AtomVec - // same logic as beginning of Comm::exchange() - // do it now b/c inserting atoms will overwrite ghost atoms - atom->nghost = 0; - atom->avec->clear_bonus(); - // check if new atoms are in my sub-box or above it if I am highest proc // if so, add atom to my list via create_atom() // initialize additional info about the atoms @@ -3842,40 +3881,46 @@ int FixBondReact::insert_atoms(tagint **my_update_mega_glove, int iupdate) } int root = 0; + addatomtag++; if (flag) { + struct AddAtom myaddatom; root = comm->me; - atom->avec->create_atom(twomol->type[m],coords[m]); - int n = atom->nlocal - 1; - atom->tag[n] = maxtag_all + add_count; + myaddatom.type = twomol->type[m]; + myaddatom.x[0] = coords[m][0]; + myaddatom.x[1] = coords[m][1]; + myaddatom.x[2] = coords[m][2]; + myaddatom.tag = addatomtag; // locally update mega_glove - my_update_mega_glove[preID][iupdate] = atom->tag[n]; + my_update_mega_glove[preID][iupdate] = myaddatom.tag; + // !! could do better job choosing mol ID for added atoms if (atom->molecule_flag) { if (twomol->moleculeflag) { - atom->molecule[n] = maxmol_all + twomol->molecule[m]; + myaddatom.molecule = maxmol_all + twomol->molecule[m]; } else { - atom->molecule[n] = maxmol_all + 1; + myaddatom.molecule = maxmol_all + 1; } } - atom->mask[n] = 1 | groupbit; - atom->image[n] = imageflags[m]; + myaddatom.mask = 1 | groupbit; + myaddatom.image = imageflags[m]; // guess a somewhat reasonable initial velocity based on reaction site // further control is possible using bond_react_MASTER_group // compute |velocity| corresponding to a given temperature t, using specific atom's mass - double mymass = atom->rmass ? atom->rmass[n] : atom->mass[twomol->type[m]]; - double vtnorm = sqrt(t / (force->mvv2e / (dimension * force->boltz)) / mymass); - v[n][0] = random[rxnID]->uniform(); - v[n][1] = random[rxnID]->uniform(); - v[n][2] = random[rxnID]->uniform(); - double vnorm = sqrt(v[n][0]*v[n][0] + v[n][1]*v[n][1] + v[n][2]*v[n][2]); - v[n][0] = v[n][0]/vnorm*vtnorm; - v[n][1] = v[n][1]/vnorm*vtnorm; - v[n][2] = v[n][2]/vnorm*vtnorm; - modify->create_attribute(n); + myaddatom.rmass = atom->rmass ? twomol->rmass[m] : atom->mass[twomol->type[m]]; + double vtnorm = sqrt(t / (force->mvv2e / (dimension * force->boltz)) / myaddatom.rmass); + double myv[3]; + myv[0] = random[rxnID]->uniform(); + myv[1] = random[rxnID]->uniform(); + myv[2] = random[rxnID]->uniform(); + double vnorm = sqrt(myv[0]*myv[0] + myv[1]*myv[1] + myv[2]*myv[2]); + myaddatom.v[0] = myv[0]/vnorm*vtnorm; + myaddatom.v[1] = myv[1]/vnorm*vtnorm; + myaddatom.v[2] = myv[2]/vnorm*vtnorm; + addatoms.push_back(myaddatom); } // globally update mega_glove and equivalences MPI_Allreduce(MPI_IN_PLACE,&root,1,MPI_INT,MPI_SUM,world); @@ -3888,12 +3933,11 @@ int FixBondReact::insert_atoms(tagint **my_update_mega_glove, int iupdate) } // reset global natoms here - // reset atom map elsewhere, after all calls to 'insert_atoms' + // reset atom map elsewhere, after all calls to 'insert_atoms_setup' atom->natoms += add_count; if (atom->natoms < 0) error->all(FLERR,"Too many total atoms"); - maxtag_all += add_count; - if (maxtag_all >= MAXTAGINT) + if (addatomtag >= MAXTAGINT) error->all(FLERR,"New atom IDs exceed maximum allowed ID"); // atom creation successful memory->destroy(coords); @@ -3970,6 +4014,11 @@ void FixBondReact::read_map_file(int myrxn) } else break; } + if (ncreate == 0 && onemol->natoms != twomol->natoms) + error->all(FLERR,"Fix bond/react: Reaction templates must contain the same number of atoms"); + else if (ncreate > 0 && onemol->natoms + ncreate != twomol->natoms) + error->all(FLERR,"Fix bond/react: Incorrect number of created atoms"); + // grab keyword and skip next line parse_keyword(0,line,keyword); @@ -4012,6 +4061,13 @@ void FixBondReact::read_map_file(int myrxn) } + // error check + for (int i = 0; i < onemol->natoms; i++) { + int my_equiv = reverse_equiv[i][1][myrxn]; + if (create_atoms[my_equiv-1][myrxn] == 1) + error->all(FLERR,"Fix bond/react: Created atoms cannot also be listed in Equivalences section\n"); + } + // error check if (bondflag == 0 || equivflag == 0) error->all(FLERR,"Fix bond/react: Map file missing InitiatorIDs or Equivalences section\n"); @@ -4071,6 +4127,8 @@ void FixBondReact::CreateAtoms(char *line, int myrxn) readline(line); rv = sscanf(line,"%d",&tmp); if (rv != 1) error->one(FLERR, "CreateIDs section is incorrectly formatted"); + if (tmp > twomol->natoms) + error->one(FLERR,"Fix bond/react: Invalid atom ID in CreateIDs section of map file"); create_atoms[tmp-1][myrxn] = 1; } if (twomol->xflag == 0) @@ -4331,6 +4389,13 @@ void FixBondReact::post_integrate_respa(int ilevel, int /*iloop*/) /* ---------------------------------------------------------------------- */ +void FixBondReact::post_force(int /*vflag*/) +{ + if (reset_mol_ids_flag) reset_mol_ids->reset(); +} + +/* ---------------------------------------------------------------------- */ + int FixBondReact::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { diff --git a/src/REACTION/fix_bond_react.h b/src/REACTION/fix_bond_react.h index 8c9fc9dce4..c3a92d91a0 100644 --- a/src/REACTION/fix_bond_react.h +++ b/src/REACTION/fix_bond_react.h @@ -46,6 +46,7 @@ class FixBondReact : public Fix { void init_list(int, class NeighList *) override; void post_integrate() override; void post_integrate_respa(int, int) override; + void post_force(int) override; int pack_forward_comm(int, int *, double *, int, int *) override; void unpack_forward_comm(int, int, double *) override; @@ -62,7 +63,7 @@ class FixBondReact : public Fix { int *iatomtype, *jatomtype; int *seed; double **cutsq, *fraction; - int *max_rxn, *nlocalskips, *nghostlyskips; + int *max_rxn, *nlocalkeep, *nghostlykeep; tagint lastcheck; int stabilization_flag; int reset_mol_ids_flag; @@ -215,7 +216,7 @@ class FixBondReact : public Fix { void glove_ghostcheck(); void ghost_glovecast(); void update_everything(); - int insert_atoms(tagint **, int); + int insert_atoms_setup(tagint **, int); void unlimit_bond(); // removes atoms from stabilization, and other post-reaction every-step operations void dedup_mega_gloves(int); //dedup global mega_glove void write_restart(FILE *) override; @@ -245,6 +246,15 @@ class FixBondReact : public Fix { std::map, int> atoms2bond; // maps atom pair to index of local bond array std::vector> constraints; + tagint addatomtag; + struct AddAtom { + tagint tag, molecule; + int type, mask; + imageint image; + double rmass, x[3], v[3]; + }; + std::vector addatoms; + // DEBUG void print_bb(); diff --git a/src/REAXFF/fix_qeq_reaxff.cpp b/src/REAXFF/fix_qeq_reaxff.cpp index 7e935fd6cd..921f6e0261 100644 --- a/src/REAXFF/fix_qeq_reaxff.cpp +++ b/src/REAXFF/fix_qeq_reaxff.cpp @@ -338,7 +338,8 @@ void FixQEqReaxFF::reallocate_storage() void FixQEqReaxFF::allocate_matrix() { - int i,ii,m; + int i,ii; + bigint m; int mincap; double safezone; @@ -360,7 +361,10 @@ void FixQEqReaxFF::allocate_matrix() i = ilist[ii]; m += numneigh[i]; } - m_cap = MAX((int)(m * safezone), mincap * REAX_MIN_NBRS); + bigint m_cap_big = (bigint)MAX(m * safezone, mincap * REAX_MIN_NBRS); + if (m_cap_big > MAXSMALLINT) + error->one(FLERR,"Too many neighbors in fix {}",style); + m_cap = m_cap_big; H.n = n_cap; H.m = m_cap; diff --git a/src/REAXFF/reaxff_allocate.cpp b/src/REAXFF/reaxff_allocate.cpp index 06ebc20f30..9e125bea05 100644 --- a/src/REAXFF/reaxff_allocate.cpp +++ b/src/REAXFF/reaxff_allocate.cpp @@ -169,16 +169,23 @@ namespace ReaxFF { static int Reallocate_HBonds_List(reax_system *system, reax_list *hbonds) { int i, total_hbonds; + LAMMPS_NS::bigint total_hbonds_big; int mincap = system->mincap; double saferzone = system->saferzone; - total_hbonds = 0; + total_hbonds_big = 0; for (i = 0; i < system->n; ++i) if ((system->my_atoms[i].Hindex) >= 0) { - total_hbonds += system->my_atoms[i].num_hbonds; + total_hbonds_big += system->my_atoms[i].num_hbonds; } - total_hbonds = (int)(MAX(total_hbonds*saferzone, mincap*system->minhbonds)); + total_hbonds_big = (LAMMPS_NS::bigint)(MAX(total_hbonds_big*saferzone, mincap*system->minhbonds)); + + auto error = system->error_ptr; + if (total_hbonds_big > MAXSMALLINT) + error->one(FLERR,"Too many hydrogen bonds in pair reaxff"); + + total_hbonds = total_hbonds_big; Delete_List(hbonds); Make_List(system->Hcap, total_hbonds, TYP_HBOND, hbonds); @@ -190,17 +197,24 @@ namespace ReaxFF { reax_list *bonds, int *total_bonds, int *est_3body) { int i; + LAMMPS_NS::bigint total_bonds_big; int mincap = system->mincap; double safezone = system->safezone; - *total_bonds = 0; + total_bonds_big = 0; *est_3body = 0; for (i = 0; i < system->N; ++i) { *est_3body += SQR(system->my_atoms[i].num_bonds); - *total_bonds += system->my_atoms[i].num_bonds; + total_bonds_big += system->my_atoms[i].num_bonds; } - *total_bonds = (int)(MAX(*total_bonds * safezone, mincap*MIN_BONDS)); + total_bonds_big = (LAMMPS_NS::bigint)(MAX(total_bonds_big * safezone, mincap*MIN_BONDS)); + + auto error = system->error_ptr; + if (total_bonds_big > MAXSMALLINT) + error->one(FLERR,"Too many bonds in pair reaxff"); + + *total_bonds = total_bonds_big; if (system->omp_active) for (i = 0; i < bonds->num_intrs; ++i) diff --git a/src/REPLICA/verlet_split.cpp b/src/REPLICA/verlet_split.cpp index b270ad445d..acc776efc3 100644 --- a/src/REPLICA/verlet_split.cpp +++ b/src/REPLICA/verlet_split.cpp @@ -237,7 +237,7 @@ void VerletSplit::init() tip4pflag = force->kspace->tip4pflag; // invoke parent Verlet init - + Verlet::init(); } diff --git a/src/REPLICA/verlet_split.h b/src/REPLICA/verlet_split.h index 10835e0792..3528a1fe5f 100644 --- a/src/REPLICA/verlet_split.h +++ b/src/REPLICA/verlet_split.h @@ -40,7 +40,7 @@ class VerletSplit : public Verlet { int ratio; // ratio of Rspace procs to Kspace procs int *qsize, *qdisp, *xsize, *xdisp; // MPI gather/scatter params for block comm MPI_Comm block; // communicator within one block - + int tip4pflag; // 1 if Kspace method sets tip4pflag double **f_kspace; // copy of Kspace forces on Rspace procs diff --git a/src/angle_hybrid.cpp b/src/angle_hybrid.cpp index a015882a15..1261a78176 100644 --- a/src/angle_hybrid.cpp +++ b/src/angle_hybrid.cpp @@ -320,6 +320,14 @@ void AngleHybrid::init_style() if (styles[m]) styles[m]->init_style(); } +/* ---------------------------------------------------------------------- */ + +int AngleHybrid::check_itype(int itype, char *substyle) +{ + if (strcmp(keywords[map[itype]], substyle) == 0) return 1; + return 0; +} + /* ---------------------------------------------------------------------- return an equilbrium angle length ------------------------------------------------------------------------- */ diff --git a/src/angle_hybrid.h b/src/angle_hybrid.h index a6da29245e..a84096b297 100644 --- a/src/angle_hybrid.h +++ b/src/angle_hybrid.h @@ -42,8 +42,10 @@ class AngleHybrid : public Angle { double single(int, int, int, int) override; double memory_usage() override; + int check_itype(int, char *); + protected: - int *map; // which style each angle type points to + int *map; // which style each angle type points to int *nanglelist; // # of angles in sub-style anglelists int *maxangle; // max # of angles sub-style lists can store int ***anglelist; // anglelist for each sub-style diff --git a/src/angle_write.cpp b/src/angle_write.cpp index 48420ae7be..1be5f1acac 100644 --- a/src/angle_write.cpp +++ b/src/angle_write.cpp @@ -148,8 +148,10 @@ void AngleWrite::command(int narg, char **arg) FILE *coeffs; char line[MAXLINE] = {'\0'}; coeffs = fopen(coeffs_file.c_str(), "r"); + if (!coeffs) + error->one(FLERR, "Unable to open temporary file {}: {}", coeffs_file, utils::getsyserror()); for (int i = 0; i < atom->nangletypes; ++i) { - fgets(line, MAXLINE, coeffs); + utils::sfgets(FLERR, line, MAXLINE, coeffs, coeffs_file.c_str(), error); writer->input->one(fmt::format("angle_coeff {}", line)); } fclose(coeffs); diff --git a/src/atom.cpp b/src/atom.cpp index 52cc2c9bc9..e0fceffe9c 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -1911,7 +1911,11 @@ void Atom::allocate_type_arrays() if (avec->mass_type == AtomVec::PER_TYPE) { mass = new double[ntypes+1]; mass_setflag = new int[ntypes+1]; - for (int itype = 1; itype <= ntypes; itype++) mass_setflag[itype] = 0; + // start loop from 0 to avoid uninitialized access when operating on the whole array + for (int itype = 0; itype <= ntypes; itype++) { + mass_setflag[itype] = 0; + mass[itype] = 0.0; + } } } @@ -2739,20 +2743,21 @@ Classes rarely need to check on ghost communication and so `find_custom` is typically preferred to this function. See :doc:`pair amoeba ` for an example where checking ghost communication is necessary. \endverbatim - * \param name Name of the property (w/o a "i_" or "d_" or "i2_" or "d2_" prefix) - * \param &flag Returns data type of property: 0 for int, 1 for double - * \param &cols Returns number of values: 0 for a single value, 1 or more for a vector of values - * \param &ghost Returns whether property is communicated to ghost atoms: 0 for no, 1 for yes + * \param name Name of the property (w/o a "i_" or "d_" or "i2_" or "d2_" prefix) + * \param &flag Returns data type of property: 0 for int, 1 for double + * \param &cols Returns number of values: 0 for a single value, 1 or more for a vector of values + * \param &ghost Returns whether property is communicated to ghost atoms: 0 for no, 1 for yes * \return index of property in the respective list of properties */ int Atom::find_custom_ghost(const char *name, int &flag, int &cols, int &ghost) { int i = find_custom(name, flag, cols); + ghost = 0; if (i == -1) return i; if ((flag == 0) && (cols == 0)) ghost = ivghost[i]; else if ((flag == 1) && (cols == 0)) ghost = dvghost[i]; - else if ((flag == 0) && (cols == 1)) ghost = iaghost[i]; - else if ((flag == 1) && (cols == 1)) ghost = daghost[i]; + else if ((flag == 0) && (cols > 0)) ghost = iaghost[i]; + else if ((flag == 1) && (cols > 0)) ghost = daghost[i]; return i; } @@ -2999,11 +3004,13 @@ length of the data area, and a short description. - N double values defined by fix property/atom array name *See also* - :cpp:func:`lammps_extract_atom` + :cpp:func:`lammps_extract_atom`, + :cpp:func:`lammps_extract_atom_datatype`, + :cpp:func:`lammps_extract_atom_size` \endverbatim * - * \sa extract_datatype + * \sa extract_datatype, extract_size * * \param name string with the keyword of the desired property. Typically the name of the pointer variable returned @@ -3142,7 +3149,7 @@ void *Atom::extract(const char *name) \endverbatim * - * \sa extract + * \sa extract extract_size * * \param name string with the keyword of the desired property. * \return data type constant for desired property or -1 */ @@ -3177,10 +3184,14 @@ int Atom::extract_datatype(const char *name) if (strcmp(name,"temperature") == 0) return LAMMPS_DOUBLE; if (strcmp(name,"heatflow") == 0) return LAMMPS_DOUBLE; + // PERI package (and in part MACHDYN) + if (strcmp(name,"vfrac") == 0) return LAMMPS_DOUBLE; if (strcmp(name,"s0") == 0) return LAMMPS_DOUBLE; if (strcmp(name,"x0") == 0) return LAMMPS_DOUBLE_2D; + // AWPMD package (and in part EFF and ELECTRODE) + if (strcmp(name,"espin") == 0) return LAMMPS_INT; if (strcmp(name,"spin") == 0) return LAMMPS_INT; // backwards compatibility if (strcmp(name,"eradius") == 0) return LAMMPS_DOUBLE; @@ -3248,14 +3259,255 @@ int Atom::extract_datatype(const char *name) if (!array) index = find_custom(&name[2],flag,cols); else index = find_custom(&name[3],flag,cols); + // consistency checks if (index < 0) return -1; if (which != flag) return -1; if ((!array && cols) || (array && !cols)) return -1; - if (which == 0) return LAMMPS_INT; - else return LAMMPS_DOUBLE; + if (!which && !array) return LAMMPS_INT; + if (which && !array) return LAMMPS_DOUBLE; + if (!which && array) return LAMMPS_INT_2D; + if (which && array) return LAMMPS_DOUBLE_2D; } + return -1; +} +/** Provide vector or array size info of internal data of the Atom class + * +\verbatim embed:rst + +.. versionadded:: TBD + +\endverbatim + * + * \sa extract extract_datatype + * + * \param name string with the keyword of the desired property. + * \param type either LMP_SIZE_ROWS or LMP_SIZE_COLS for per-atom array or ignored + * \return size of the vector or size of the array for the requested dimension or -1 */ + +int Atom::extract_size(const char *name, int type) +{ + // -------------------------------------------------------------------- + // 6th customization section: customize by adding new variable name + + const auto datatype = extract_datatype(name); + const auto nall = nlocal + nghost; + const auto ghost_vel = comm->ghost_velocity; + + if ((datatype == LAMMPS_DOUBLE_2D) || (datatype == LAMMPS_INT_2D)) { + if (type == LMP_SIZE_ROWS) { + if (strcmp(name,"x") == 0) return nall; + if (strcmp(name,"v") == 0) { + if (ghost_vel) return nall; + else return nlocal; + } + if (strcmp(name,"f") == 0) return nall; + if (strcmp(name,"mu") == 0) return nall; + if (strcmp(name,"omega") == 0) { + if (ghost_vel) return nall; + else return nlocal; + } + if (strcmp(name,"angmom") == 0) { + if (ghost_vel) return nall; + else return nlocal; + } + if (strcmp(name,"torque") == 0) return nlocal; + if (strcmp(name,"quat") == 0) { + if (ghost_vel) return nall; + else return nlocal; + } + + // PERI package + + if (strcmp(name,"x0") == 0) return nall; + + // SPIN package + + if (strcmp(name,"sp") == 0) return nall; + if (strcmp(name,"fm") == 0) return nlocal; + if (strcmp(name,"fm_long") == 0) return nlocal; + + // AWPMD package + + if (strcmp(name,"cs") == 0) { + if (ghost_vel) return nall; + else return nlocal; + } + if (strcmp(name,"csforce") == 0) return nlocal; + if (strcmp(name,"vforce") == 0) return nlocal; + + // SPH package + + if (strcmp(name,"vest") == 0) return nall; + + // MACHDYN package + + if (strcmp(name, "smd_data_9") == 0) return LAMMPS_DOUBLE_2D; + if (strcmp(name, "smd_stress") == 0) return LAMMPS_DOUBLE_2D; + + } else if (type == LMP_SIZE_COLS) { + + if (strcmp(name,"x") == 0) return 3; + if (strcmp(name,"v") == 0) return 3; + if (strcmp(name,"f") == 0) return 3; + if (strcmp(name,"mu") == 0) return 4; + if (strcmp(name,"omega") == 0) return 3; + if (strcmp(name,"angmom") == 0) return 3; + if (strcmp(name,"torque") == 0) return 3; + if (strcmp(name,"quat") == 0) return 4; + + // PERI package + + if (strcmp(name,"x0") == 0) return 3; + + // SPIN package + + if (strcmp(name,"sp") == 0) return 4; + if (strcmp(name,"fm") == 0) return 3; + if (strcmp(name,"fm_long") == 0) return 3; + + // AWPMD package + + if (strcmp(name,"cs") == 0) return 2; + if (strcmp(name,"csforce") == 0) return 2; + if (strcmp(name,"vforce") == 0) return 3; + + // SPH package + + if (strcmp(name,"vest") == 0) return 3; + + // MACHDYN package + + if (strcmp(name, "smd_data_9") == 0) return 9; + if (strcmp(name, "smd_stress") == 0) return 6; + } + + // custom arrays + + if (utils::strmatch(name,"^[id]2_")) { + int which = 0; + if (name[0] == 'd') which = 1; + + int index,flag,cols,ghost; + index = find_custom_ghost(&name[3],flag,cols,ghost); + + // consistency checks + if (index < 0) return -1; + if (which != flag) return -1; + if (!cols) return -1; + + if (type == LMP_SIZE_ROWS) { + if (ghost) return nall; + else return nlocal; + } else if (type == LMP_SIZE_COLS) { + return cols; + } + } + } else { + + if (strcmp(name,"mass") == 0) return ntypes + 1; + + if (strcmp(name,"id") == 0) return nall; + if (strcmp(name,"type") == 0) return nall; + if (strcmp(name,"mask") == 0) return nall; + if (strcmp(name,"image") == 0) return nlocal; + if (strcmp(name,"molecule") == 0) return nall; + if (strcmp(name,"q") == 0) return nall; + if (strcmp(name,"radius") == 0) return nall; + if (strcmp(name,"rmass") == 0) return nall; + + // ASPHERE package + + if (strcmp(name,"ellipsoid") == 0) return nlocal; + + // BODY package + + if (strcmp(name,"line") == 0) return nlocal; + if (strcmp(name,"tri") == 0) return nlocal; + if (strcmp(name,"body") == 0) return nlocal; + + // PERI package (and in part MACHDYN) + + if (strcmp(name,"vfrac") == 0) return nall; + if (strcmp(name,"s0") == 0) return nall; + + // AWPMD package (and in part EFF and ELECTRODE) + + if (strcmp(name,"espin") == 0) return nall; + if (strcmp(name,"spin") == 0) return nall; // backwards compatibility + if (strcmp(name,"eradius") == 0) return nall; + if (strcmp(name,"ervel") == 0) return nlocal; + if (strcmp(name,"erforce") == 0) return nlocal; + if (strcmp(name,"ervelforce") == 0) return nlocal; + if (strcmp(name,"etag") == 0) return nall; + + // CG-DNA package + + if (strcmp(name,"id5p") == 0) return nall; + + // RHEO package + + if (strcmp(name,"temperature") == 0) return nlocal; + if (strcmp(name,"heatflow") == 0) return nlocal; + if (strcmp(name,"rheo_status") == 0) return nall; + if (strcmp(name,"conductivity") == 0) return nlocal; + if (strcmp(name,"pressure") == 0) return nlocal; + if (strcmp(name,"viscosity") == 0) return nlocal; + + // SPH package + + if (strcmp(name,"rho") == 0) return nall; + if (strcmp(name,"drho") == 0) return nlocal; + if (strcmp(name,"esph") == 0) return nall; + if (strcmp(name,"desph") == 0) return nlocal; + if (strcmp(name,"cv") == 0) return nall; + + // MACHDYN package + + if (strcmp(name, "contact_radius") == 0) return nall; + if (strcmp(name, "eff_plastic_strain") == 0) return nlocal; + if (strcmp(name, "eff_plastic_strain_rate") == 0) return nlocal; + if (strcmp(name, "damage") == 0) return nlocal; + + // DPD-REACT package + + if (strcmp(name,"dpdTheta") == 0) return nall; + + // DPD-MESO package + + if (strcmp(name,"edpd_temp") == 0) return nall; + + // DIELECTRIC package + + if (strcmp(name,"area") == 0) return nall; + if (strcmp(name,"ed") == 0) return nall; + if (strcmp(name,"em") == 0) return nall; + if (strcmp(name,"epsilon") == 0) return nall; + if (strcmp(name,"curvature") == 0) return nall; + if (strcmp(name,"q_unscaled") == 0) return nall; + + // end of customization section + // -------------------------------------------------------------------- + + // custom vectors + + if (utils::strmatch(name,"^[id]_")) { + int which = 0; + if (name[0] == 'd') which = 1; + + int index,flag,cols,ghost; + index = find_custom_ghost(&name[2],flag,cols,ghost); + + // consistency checks + if (index < 0) return -1; + if (which != flag) return -1; + if (cols) return -1; + + if (ghost) return nall; + else return nlocal; + } + } return -1; } diff --git a/src/atom.h b/src/atom.h index bd5b352cd0..c98f06cbe8 100644 --- a/src/atom.h +++ b/src/atom.h @@ -378,6 +378,7 @@ class Atom : protected Pointers { void *extract(const char *); int extract_datatype(const char *); + int extract_size(const char *, int); inline int *get_map_array() { return map_array; }; inline int get_map_size() { return map_tag_max + 1; }; diff --git a/src/bond_hybrid.cpp b/src/bond_hybrid.cpp index 307cbd72fd..bd5badb54c 100644 --- a/src/bond_hybrid.cpp +++ b/src/bond_hybrid.cpp @@ -385,6 +385,14 @@ void BondHybrid::init_style() else map[0] = -1; } +/* ---------------------------------------------------------------------- */ + +int BondHybrid::check_itype(int itype, char *substyle) +{ + if (strcmp(keywords[map[itype]], substyle) == 0) return 1; + return 0; +} + /* ---------------------------------------------------------------------- return an equilbrium bond length ------------------------------------------------------------------------- */ diff --git a/src/bond_hybrid.h b/src/bond_hybrid.h index ba520b81b4..d93b5c7558 100644 --- a/src/bond_hybrid.h +++ b/src/bond_hybrid.h @@ -44,6 +44,8 @@ class BondHybrid : public Bond { double single(int, double, int, int, double &) override; double memory_usage() override; + int check_itype(int, char *); + protected: int *map; // which style each bond type points to int has_quartic; // which style, if any is a quartic bond style diff --git a/src/compute_reduce.cpp b/src/compute_reduce.cpp index ee94c2d9a7..40bb206bd2 100644 --- a/src/compute_reduce.cpp +++ b/src/compute_reduce.cpp @@ -214,8 +214,10 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg], "inputs") == 0) { if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, mycmd + " inputs", error); - if (strcmp(arg[iarg+1], "peratom") == 0) input_mode = PERATOM; - else if (strcmp(arg[iarg+1], "local") == 0) input_mode = LOCAL; + if (strcmp(arg[iarg + 1], "peratom") == 0) + input_mode = PERATOM; + else if (strcmp(arg[iarg + 1], "local") == 0) + input_mode = LOCAL; iarg += 2; } else error->all(FLERR, "Unknown compute {} keyword: {}", style, arg[iarg]); @@ -242,7 +244,7 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : for (auto &val : values) { if (val.which == ArgInfo::X || val.which == ArgInfo::V || val.which == ArgInfo::F) { - if (input_mode == LOCAL) error->all(FLERR,"Compute {} inputs must be all local"); + if (input_mode == LOCAL) error->all(FLERR, "Compute {} inputs must be all local"); } else if (val.which == ArgInfo::COMPUTE) { val.val.c = modify->get_compute_by_id(val.id); @@ -251,11 +253,14 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : if (input_mode == PERATOM) { if (!val.val.c->peratom_flag) - error->all(FLERR, "Compute {} compute {} does not calculate per-atom values", style, val.id); + error->all(FLERR, "Compute {} compute {} does not calculate per-atom values", style, + val.id); if (val.argindex == 0 && val.val.c->size_peratom_cols != 0) - error->all(FLERR, "Compute {} compute {} does not calculate a per-atom vector", style, val.id); + error->all(FLERR, "Compute {} compute {} does not calculate a per-atom vector", style, + val.id); if (val.argindex && val.val.c->size_peratom_cols == 0) - error->all(FLERR, "Compute {} compute {} does not calculate a per-atom array", style, val.id); + error->all(FLERR, "Compute {} compute {} does not calculate a per-atom array", style, + val.id); if (val.argindex && val.argindex > val.val.c->size_peratom_cols) error->all(FLERR, "Compute {} compute {} array is accessed out-of-range", style, val.id); @@ -263,9 +268,11 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : if (!val.val.c->local_flag) error->all(FLERR, "Compute {} compute {} does not calculate local values", style, val.id); if (val.argindex == 0 && val.val.c->size_local_cols != 0) - error->all(FLERR, "Compute {} compute {} does not calculate a local vector", style, val.id); + error->all(FLERR, "Compute {} compute {} does not calculate a local vector", style, + val.id); if (val.argindex && val.val.c->size_local_cols == 0) - error->all(FLERR, "Compute {} compute {} does not calculate a local array", style, val.id); + error->all(FLERR, "Compute {} compute {} does not calculate a local array", style, + val.id); if (val.argindex && val.argindex > val.val.c->size_local_cols) error->all(FLERR, "Compute {} compute {} array is accessed out-of-range", style, val.id); } @@ -278,7 +285,8 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : if (!val.val.f->peratom_flag) error->all(FLERR, "Compute {} fix {} does not calculate per-atom values", style, val.id); if (val.argindex == 0 && (val.val.f->size_peratom_cols != 0)) - error->all(FLERR, "Compute {} fix {} does not calculate a per-atom vector", style, val.id); + error->all(FLERR, "Compute {} fix {} does not calculate a per-atom vector", style, + val.id); if (val.argindex && (val.val.f->size_peratom_cols == 0)) error->all(FLERR, "Compute {} fix {} does not calculate a per-atom array", style, val.id); if (val.argindex && (val.argindex > val.val.f->size_peratom_cols)) @@ -296,7 +304,7 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) : } } else if (val.which == ArgInfo::VARIABLE) { - if (input_mode == LOCAL) error->all(FLERR,"Compute {} inputs must be all local"); + if (input_mode == LOCAL) error->all(FLERR, "Compute {} inputs must be all local"); val.val.v = input->variable->find(val.id.c_str()); if (val.val.v < 0) error->all(FLERR, "Variable name {} for compute {} does not exist", val.id, style); @@ -417,7 +425,8 @@ void ComputeReduce::compute_vector() } else if (mode == MINN) { if (!replace) { for (int m = 0; m < nvalues; m++) - MPI_Allreduce(&onevec[m], &vector[m], 1, MPI_DOUBLE, this->scalar_reduction_operation, world); + MPI_Allreduce(&onevec[m], &vector[m], 1, MPI_DOUBLE, this->scalar_reduction_operation, + world); } else { for (int m = 0; m < nvalues; m++) @@ -437,7 +446,8 @@ void ComputeReduce::compute_vector() } else if (mode == MAXX) { if (!replace) { for (int m = 0; m < nvalues; m++) - MPI_Allreduce(&onevec[m], &vector[m], 1, MPI_DOUBLE, this->scalar_reduction_operation, world); + MPI_Allreduce(&onevec[m], &vector[m], 1, MPI_DOUBLE, this->scalar_reduction_operation, + world); } else { for (int m = 0; m < nvalues; m++) diff --git a/src/dihedral_write.cpp b/src/dihedral_write.cpp index dd1ca1de6a..1d0f908e2c 100644 --- a/src/dihedral_write.cpp +++ b/src/dihedral_write.cpp @@ -149,8 +149,10 @@ void DihedralWrite::command(int narg, char **arg) FILE *coeffs; char line[MAXLINE] = {'\0'}; coeffs = fopen(coeffs_file.c_str(), "r"); + if (!coeffs) + error->one(FLERR, "Unable to open temporary file {}: {}", utils::getsyserror()); for (int i = 0; i < atom->ndihedraltypes; ++i) { - fgets(line, MAXLINE, coeffs); + utils::sfgets(FLERR, line, MAXLINE, coeffs, coeffs_file.c_str(), error); writer->input->one(fmt::format("dihedral_coeff {}", line)); } fclose(coeffs); diff --git a/src/error.h b/src/error.h index 89d168652a..805bd4cd0d 100644 --- a/src/error.h +++ b/src/error.h @@ -29,14 +29,14 @@ class Error : protected Pointers { [[noreturn]] void all(const std::string &, int, const std::string &); template - void all(const std::string &file, int line, const std::string &format, Args &&...args) + [[noreturn]] void all(const std::string &file, int line, const std::string &format, Args &&...args) { _all(file, line, format, fmt::make_format_args(args...)); } [[noreturn]] void one(const std::string &, int, const std::string &); template - void one(const std::string &file, int line, const std::string &format, Args &&...args) + [[noreturn]] void one(const std::string &file, int line, const std::string &format, Args &&...args) { _one(file, line, format, fmt::make_format_args(args...)); } diff --git a/src/fix_adapt.cpp b/src/fix_adapt.cpp index cad157f2be..c725707b29 100644 --- a/src/fix_adapt.cpp +++ b/src/fix_adapt.cpp @@ -15,8 +15,10 @@ #include "fix_adapt.h" #include "angle.h" +#include "angle_hybrid.h" #include "atom.h" #include "bond.h" +#include "bond_hybrid.h" #include "domain.h" #include "error.h" #include "fix_store_atom.h" @@ -386,11 +388,15 @@ void FixAdapt::init() if (utils::strmatch(force->pair_style,"^hybrid")) { auto pair = dynamic_cast(force->pair); - for (i = ad->ilo; i <= ad->ihi; i++) - for (j = MAX(ad->jlo,i); j <= ad->jhi; j++) - if (!pair->check_ijtype(i,j,pstyle)) - error->all(FLERR,"Fix adapt type pair range is not valid " - "for pair hybrid sub-style {}", pstyle); + if (pair) { + for (i = ad->ilo; i <= ad->ihi; i++) { + for (j = MAX(ad->jlo,i); j <= ad->jhi; j++) { + if (!pair->check_ijtype(i,j,pstyle)) + error->all(FLERR,"Fix adapt type pair range is not valid " + "for pair hybrid sub-style {}", pstyle); + } + } + } } delete[] pstyle; @@ -416,8 +422,16 @@ void FixAdapt::init() if (ad->bdim == 1) ad->vector = (double *) ptr; - if (utils::strmatch(force->bond_style,"^hybrid")) - error->all(FLERR,"Fix adapt does not support bond_style hybrid"); + if (utils::strmatch(force->bond_style,"^hybrid")) { + auto bond = dynamic_cast(force->bond); + if (bond) { + for (i = ad->ilo; i <= ad->ihi; i++) { + if (!bond->check_itype(i,bstyle)) + error->all(FLERR,"Fix adapt type bond range is not valid " + "for pair hybrid sub-style {}", bstyle); + } + } + } delete[] bstyle; @@ -442,8 +456,16 @@ void FixAdapt::init() if (ad->adim == 1) ad->vector = (double *) ptr; - if (utils::strmatch(force->angle_style,"^hybrid")) - error->all(FLERR,"Fix adapt does not support angle_style hybrid"); + if (utils::strmatch(force->angle_style,"^hybrid")) { + auto angle = dynamic_cast(force->angle); + if (angle) { + for (i = ad->ilo; i <= ad->ihi; i++) { + if (!angle->check_itype(i,astyle)) + error->all(FLERR,"Fix adapt type angle range is not valid " + "for pair hybrid sub-style {}", astyle); + } + } + } delete[] astyle; diff --git a/src/fix_ave_chunk.cpp b/src/fix_ave_chunk.cpp index d9723cec9f..6a3c2e2032 100644 --- a/src/fix_ave_chunk.cpp +++ b/src/fix_ave_chunk.cpp @@ -153,7 +153,7 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) : while (iarg < nargnew) { if (strcmp(arg[iarg],"norm") == 0) { - if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix ave/chunk norm", error); + if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/chunk norm", error); if (strcmp(arg[iarg+1],"all") == 0) { normflag = ALL; scaleflag = ATOM; @@ -166,13 +166,13 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) : } else error->all(FLERR,"Unknown fix ave/chunk norm mode: {}", arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"ave") == 0) { - if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix ave/chunk ave", error); + if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/chunk ave", error); if (strcmp(arg[iarg+1],"one") == 0) ave = ONE; else if (strcmp(arg[iarg+1],"running") == 0) ave = RUNNING; else if (strcmp(arg[iarg+1],"window") == 0) ave = WINDOW; else error->all(FLERR,"Unknown fix ave/chunk ave mode: {}", arg[iarg+1]); if (ave == WINDOW) { - if (iarg+3 > narg) utils::missing_cmd_args(FLERR, "fix ave/chunk ave window", error); + if (iarg+3 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/chunk ave window", error); nwindow = utils::inumeric(FLERR,arg[iarg+2],false,lmp); if (nwindow <= 0) error->all(FLERR,"Illegal fix ave/chunk number of windows: {}", nwindow); } @@ -180,21 +180,21 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) : if (ave == WINDOW) iarg++; } else if (strcmp(arg[iarg],"bias") == 0) { - if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix ave/chunk bias", error); + if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/chunk bias", error); biasflag = 1; id_bias = utils::strdup(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"adof") == 0) { - if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix ave/chunk adof", error); + if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/chunk adof", error); adof = utils::numeric(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"cdof") == 0) { - if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix ave/chunk cdof", error); + if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/chunk cdof", error); cdof = utils::numeric(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if ((strcmp(arg[iarg],"file") == 0) || (strcmp(arg[iarg],"append") == 0)) { - if (iarg+2 > narg) + if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, std::string("fix ave/chunk ")+arg[iarg], error); if (comm->me == 0) { if (strcmp(arg[iarg],"file") == 0) fp = fopen(arg[iarg+1],"w"); @@ -208,23 +208,23 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) : overwrite = 1; iarg += 1; } else if (strcmp(arg[iarg],"format") == 0) { - if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix ave/chunk format", error); + if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/chunk format", error); delete[] format_user; format_user = utils::strdup(arg[iarg+1]); format = format_user; iarg += 2; } else if (strcmp(arg[iarg],"title1") == 0) { - if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix ave/chunk title1", error); + if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/chunk title1", error); delete[] title1; title1 = utils::strdup(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"title2") == 0) { - if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix ave/chunk title2", error); + if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/chunk title2", error); delete[] title2; title2 = utils::strdup(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"title3") == 0) { - if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "fix ave/chunk title3", error); + if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/chunk title3", error); delete[] title3; title3 = utils::strdup(arg[iarg+1]); iarg += 2; diff --git a/src/fix_ave_grid.cpp b/src/fix_ave_grid.cpp index 53092900b3..1b69c5644c 100644 --- a/src/fix_ave_grid.cpp +++ b/src/fix_ave_grid.cpp @@ -199,14 +199,14 @@ FixAveGrid::FixAveGrid(LAMMPS *lmp, int narg, char **arg) : while (iarg < nargnew) { if (strcmp(arg[iarg],"discard") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/grid command"); + if (iarg+2 > nargnew) error->all(FLERR,"Illegal fix ave/grid command"); if (strcmp(arg[iarg+1],"yes") == 0) discardflag = DISCARD; else if (strcmp(arg[iarg+1],"no") == 0) discardflag = KEEP; else error->all(FLERR,"Illegal fix ave/grid command"); iarg += 2; } else if (strcmp(arg[iarg],"norm") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/grid command"); + if (iarg+2 > nargnew) error->all(FLERR,"Illegal fix ave/grid command"); if (strcmp(arg[iarg+1],"all") == 0) normflag = ALL; else if (strcmp(arg[iarg+1],"sample") == 0) normflag = SAMPLE; else if (strcmp(arg[iarg+1],"none") == 0) normflag = NONORM; @@ -214,13 +214,13 @@ FixAveGrid::FixAveGrid(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"ave") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix ave/grid command"); + if (iarg+2 > nargnew) error->all(FLERR,"Illegal fix ave/grid command"); if (strcmp(arg[iarg+1],"one") == 0) aveflag = ONE; else if (strcmp(arg[iarg+1],"running") == 0) aveflag = RUNNING; else if (strcmp(arg[iarg+1],"window") == 0) aveflag = WINDOW; else error->all(FLERR,"Illegal fix ave/grid command"); if (aveflag == WINDOW) { - if (iarg+3 > narg) error->all(FLERR,"Illegal fix ave/grid command"); + if (iarg+3 > nargnew) error->all(FLERR,"Illegal fix ave/grid command"); nwindow = utils::inumeric(FLERR,arg[iarg+2],false,lmp); if (nwindow <= 0) error->all(FLERR,"Illegal fix ave/grid command"); iarg++; @@ -228,19 +228,19 @@ FixAveGrid::FixAveGrid(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"bias") == 0) { - if (iarg+2 > narg) + if (iarg+2 > nargnew) error->all(FLERR,"Illegal fix ave/grid command"); biasflag = 1; id_bias = utils::strdup(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"adof") == 0) { - if (iarg+2 > narg) + if (iarg+2 > nargnew) error->all(FLERR,"Illegal fix ave/grid command"); adof = utils::numeric(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"cdof") == 0) { - if (iarg+2 > narg) + if (iarg+2 > nargnew) error->all(FLERR,"Illegal fix ave/grid command"); cdof = utils::numeric(FLERR,arg[iarg+1],false,lmp); iarg += 2; @@ -463,7 +463,7 @@ void FixAveGrid::init() if (which[m] == ArgInfo::COMPUTE) { compute = modify->get_compute_by_index(value2index[m]); grid2d = (Grid2d *) compute->get_grid_by_index(value2grid[m]); - } else { + } else if (which[m] == ArgInfo::FIX) { fix = modify->get_fix_by_index(value2index[m]); grid2d = (Grid2d *) fix->get_grid_by_index(value2grid[m]); } @@ -475,7 +475,7 @@ void FixAveGrid::init() if (which[m] == ArgInfo::COMPUTE) { compute = modify->get_compute_by_index(value2index[m]); grid3d = (Grid3d *) compute->get_grid_by_index(value2grid[m]); - } else { + } else if (which[m] == ArgInfo::FIX) { fix = modify->get_fix_by_index(value2index[m]); grid3d = (Grid3d *) fix->get_grid_by_index(value2grid[m]); } @@ -1127,7 +1127,7 @@ void FixAveGrid::grid2grid() ovec2d = (double **) compute->get_griddata_by_index(idata); else oarray2d = (double ***) compute->get_griddata_by_index(idata); - } else { + } else if (which[m] == ArgInfo::FIX) { if (j == 0) ovec2d = (double **) fix->get_griddata_by_index(idata); else @@ -1165,7 +1165,7 @@ void FixAveGrid::grid2grid() ovec3d = (double ***) compute->get_griddata_by_index(idata); else oarray3d = (double ****) compute->get_griddata_by_index(idata); - } else { + } else if (which[m] == ArgInfo::FIX) { if (j == 0) { ovec3d = (double ***) fix->get_griddata_by_index(idata); } else diff --git a/src/fix_efield.cpp b/src/fix_efield.cpp index 81be66b3e3..a5f02cc7c8 100644 --- a/src/fix_efield.cpp +++ b/src/fix_efield.cpp @@ -114,7 +114,8 @@ FixEfield::FixEfield(LAMMPS *lmp, int narg, char **arg) : } if (estr && pstr) - error->all(FLERR, "Must not use energy and potential keywords at the same time with fix efield"); + error->all(FLERR, + "Must not use energy and potential keywords at the same time with fix efield"); force_flag = 0; fsum[0] = fsum[1] = fsum[2] = fsum[3] = 0.0; @@ -171,7 +172,8 @@ void FixEfield::init() if (xstr) { xvar = input->variable->find(xstr); - if (xvar < 0) error->all(FLERR, "Variable {} for x-field in fix {} does not exist", xstr, style); + if (xvar < 0) + error->all(FLERR, "Variable {} for x-field in fix {} does not exist", xstr, style); if (input->variable->equalstyle(xvar)) xstyle = EQUAL; else if (input->variable->atomstyle(xvar)) @@ -182,7 +184,8 @@ void FixEfield::init() if (ystr) { yvar = input->variable->find(ystr); - if (yvar < 0) error->all(FLERR, "Variable {} for y-field in fix {} does not exist", ystr, style); + if (yvar < 0) + error->all(FLERR, "Variable {} for y-field in fix {} does not exist", ystr, style); if (input->variable->equalstyle(yvar)) ystyle = EQUAL; else if (input->variable->atomstyle(yvar)) @@ -193,7 +196,8 @@ void FixEfield::init() if (zstr) { zvar = input->variable->find(zstr); - if (zvar < 0) error->all(FLERR, "Variable {} for z-field in fix {} does not exist", zstr, style); + if (zvar < 0) + error->all(FLERR, "Variable {} for z-field in fix {} does not exist", zstr, style); if (input->variable->equalstyle(zvar)) zstyle = EQUAL; else if (input->variable->atomstyle(zvar)) @@ -213,7 +217,8 @@ void FixEfield::init() if (pstr) { pvar = input->variable->find(pstr); - if (pvar < 0) error->all(FLERR, "Variable {} for potential in fix {} does not exist", pstr, style); + if (pvar < 0) + error->all(FLERR, "Variable {} for potential in fix {} does not exist", pstr, style); if (input->variable->atomstyle(pvar)) pstyle = ATOM; else @@ -244,8 +249,10 @@ void FixEfield::init() error->all(FLERR, "Cannot use variable energy with constant efield in fix {}", style); if (varflag == CONSTANT && pstyle != NONE) error->all(FLERR, "Cannot use variable potential with constant efield in fix {}", style); - if ((varflag == EQUAL || varflag == ATOM) && update->whichflag == 2 && estyle == NONE && pstyle == NONE) - error->all(FLERR, "Must use variable energy or potential with fix {} during minimization", style); + if ((varflag == EQUAL || varflag == ATOM) && update->whichflag == 2 && estyle == NONE && + pstyle == NONE) + error->all(FLERR, "Must use variable energy or potential with fix {} during minimization", + style); if (utils::strmatch(update->integrate_style, "^respa")) { ilevel_respa = (dynamic_cast(update->integrate))->nlevels - 1; @@ -403,8 +410,10 @@ void FixEfield::post_force(int vflag) } f[i][2] += fz; fsum[3] += fz; - if (pstyle == ATOM) fsum[0] += qe2f * q[i] * efield[i][3]; - else if (estyle == ATOM) fsum[0] += efield[i][3]; + if (pstyle == ATOM) + fsum[0] += qe2f * q[i] * efield[i][3]; + else if (estyle == ATOM) + fsum[0] += efield[i][3]; } } @@ -504,8 +513,10 @@ void FixEfield::update_efield_variables() } else if (zstyle == ATOM) { input->variable->compute_atom(zvar, igroup, &efield[0][2], 4, 0); } - if (pstyle == ATOM) input->variable->compute_atom(pvar, igroup, &efield[0][3], 4, 0); - else if (estyle == ATOM) input->variable->compute_atom(evar, igroup, &efield[0][3], 4, 0); + if (pstyle == ATOM) + input->variable->compute_atom(pvar, igroup, &efield[0][3], 4, 0); + else if (estyle == ATOM) + input->variable->compute_atom(evar, igroup, &efield[0][3], 4, 0); modify->addstep_compute(update->ntimestep + 1); } diff --git a/src/info.cpp b/src/info.cpp index 98ed06f498..2bacea69cf 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -1316,6 +1316,10 @@ std::string Info::get_fft_info() #else fft_info += "FFT library = MKL\n"; #endif +#elif defined(FFT_MKL_GPU) + fft_info += "FFT library = MKL GPU\n"; +#elif defined(FFT_NVPL) + fft_info += "FFT library = NVPL\n"; #elif defined(FFT_FFTW3) #if defined(FFT_FFTW_THREADS) fft_info += "FFT library = FFTW3 with threads\n"; @@ -1338,12 +1342,16 @@ std::string Info::get_fft_info() #else fft_info += "KOKKOS FFT library = FFTW3\n"; #endif +#elif defined(FFT_KOKKOS_NVPL) + fft_info += "KOKKOS FFT library = NVPL\n"; #elif defined(FFT_KOKKOS_MKL) #if defined(FFT_KOKKOS_MKL_THREADS) fft_info += "KOKKOS FFT library = MKL with threads\n"; #else fft_info += "KOKKOS FFT library = MKL\n"; #endif +#elif defined(FFT_KOKKOS_MKL_GPU) + fft_info += "KOKKOS FFT library = MKL GPU\n"; #else fft_info += "KOKKOS FFT library = KISS\n"; #endif diff --git a/src/library.cpp b/src/library.cpp index 097cffd68a..29cec30488 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -35,6 +35,7 @@ #include "group.h" #include "info.h" #include "input.h" +#include "lattice.h" #include "lmppython.h" #include "memory.h" #include "modify.h" @@ -1414,6 +1415,9 @@ int lammps_extract_global_datatype(void * /*handle*/, const char *name) if (strcmp(name,"xy") == 0) return LAMMPS_DOUBLE; if (strcmp(name,"xz") == 0) return LAMMPS_DOUBLE; if (strcmp(name,"yz") == 0) return LAMMPS_DOUBLE; + if (strcmp(name,"xlattice") == 0) return LAMMPS_DOUBLE; + if (strcmp(name,"ylattice") == 0) return LAMMPS_DOUBLE; + if (strcmp(name,"zlattice") == 0) return LAMMPS_DOUBLE; if (strcmp(name,"procgrid") == 0) return LAMMPS_INT; if (strcmp(name,"natoms") == 0) return LAMMPS_BIGINT; @@ -1510,9 +1514,9 @@ The function :cpp:func:`lammps_extract_global_datatype` will directly report the "native" data type. The following tables are provided: * :ref:`Timestep settings ` -* :ref:`Git revision and version settings ` * :ref:`Simulation box settings ` * :ref:`System property settings ` +* :ref:`Git revision and version settings ` * :ref:`Unit settings ` .. _extract_timestep_settings: @@ -1552,35 +1556,6 @@ report the "native" data type. The following tables are provided: - :math:`N_{respa}` - length of the time steps with r-RESPA. See :doc:`run_style`. -.. _extract_git_settings: - -**Git revision and version settings** - -.. list-table:: - :header-rows: 1 - :widths: 16 14 10 60 - - * - Name - - Type - - Length - - Description - * - git_commit - - const char \* - - 1 - - Git commit hash for the LAMMPS version. - * - git_branch - - const char \* - - 1 - - Git branch for the LAMMPS version. - * - git_descriptor - - const char \* - - 1 - - Combined descriptor for the git revision - * - lammps_version - - const char \* - - 1 - - LAMMPS version string. - .. _extract_box_settings: **Simulation box settings** @@ -1649,6 +1624,18 @@ report the "native" data type. The following tables are provided: - double - 1 - triclinic tilt factor; see :doc:`Howto_triclinic`. + * - xlattice + - double + - 1 + - lattice spacing in x-direction; see :doc:`lattice command `. + * - ylattice + - double + - 1 + - lattice spacing in y-direction; see :doc:`lattice command `. + * - zlattice + - double + - 1 + - lattice spacing in z-direction; see :doc:`lattice command `. * - procgrid - int - 3 @@ -1763,6 +1750,35 @@ report the "native" data type. The following tables are provided: - 1 - string with the current KSpace style. +.. _extract_git_settings: + +**Git revision and version settings** + +.. list-table:: + :header-rows: 1 + :widths: 16 14 10 60 + + * - Name + - Type + - Length + - Description + * - git_commit + - const char \* + - 1 + - Git commit hash for the LAMMPS version. + * - git_branch + - const char \* + - 1 + - Git branch for the LAMMPS version. + * - git_descriptor + - const char \* + - 1 + - Combined descriptor for the git revision + * - lammps_version + - const char \* + - 1 + - LAMMPS version string. + .. _extract_unit_settings: **Unit settings** @@ -1917,6 +1933,9 @@ void *lammps_extract_global(void *handle, const char *name) if (strcmp(name,"xy") == 0) return (void *) &lmp->domain->xy; if (strcmp(name,"xz") == 0) return (void *) &lmp->domain->xz; if (strcmp(name,"yz") == 0) return (void *) &lmp->domain->yz; + if (strcmp(name,"xlattice") == 0) return (void *) &lmp->domain->lattice->xlattice; + if (strcmp(name,"ylattice") == 0) return (void *) &lmp->domain->lattice->ylattice; + if (strcmp(name,"zlattice") == 0) return (void *) &lmp->domain->lattice->zlattice; if (((lmp->comm->layout == Comm::LAYOUT_UNIFORM) || (lmp->comm->layout == Comm::LAYOUT_NONUNIFORM)) && (strcmp(name,"procgrid") == 0)) return (void *) &lmp->comm->procgrid; @@ -1972,7 +1991,7 @@ void *lammps_extract_global(void *handle, const char *name) * \verbatim embed:rst -.. versionadded:: TBD +.. versionadded:: 29Aug2024 This function returns an integer that specified the dimensionality of the data that can be extracted from the current pair style with ``Pair::extract()``. @@ -2005,7 +2024,7 @@ int lammps_extract_pair_dimension(void * handle, const char *name) * \verbatim embed:rst -.. versionadded:: TBD +.. versionadded:: 29Aug2024 This function returns a pointer to data available from the current pair style with ``Pair::extract()``. The dimensionality of the returned @@ -2068,10 +2087,13 @@ int lammps_map_atom(void *handle, const void *id) .. versionadded:: 18Sep2020 -This function returns an integer that encodes the data type of the per-atom -property with the specified name. See :cpp:enum:`_LMP_DATATYPE_CONST` for valid -values. Callers of :cpp:func:`lammps_extract_atom` can use this information -to then decide how to cast the ``void *`` pointer and access the data. +This function returns an integer that encodes the data type of the +per-atom property with the specified name. See +:cpp:enum:`_LMP_DATATYPE_CONST` for valid values. Callers of +:cpp:func:`lammps_extract_atom` can use this information to decide how +to cast the ``void *`` pointer and access the data. In addition, +:cpp:func:`lammps_extract_atom_size` can be used to get information +about the vector or array dimensions. \endverbatim * @@ -2089,18 +2111,53 @@ int lammps_extract_atom_datatype(void *handle, const char *name) /* ---------------------------------------------------------------------- */ +/** Get dimension info of a LAMMPS per-atom property + * +\verbatim embed:rst + +.. versionadded:: TBD + +This function returns an integer with the size of the per-atom +property with the specified name. This allows to accurately determine +the size of the per-atom data vectors or arrays. For per-atom arrays, +the *type* argument is required to return either the number of rows or the +number of columns. It is ignored for per-atom vectors. + +Callers of :cpp:func:`lammps_extract_atom` can use this information in +combination with the result from :cpp:func:`lammps_extract_atom_datatype` +to decide how to cast the ``void *`` pointer and access the data. + +\endverbatim + * + * \param handle pointer to a previously created LAMMPS instance + * \param name string with the name of the extracted property + * \param type either LMP_SIZE_ROWS or LMP_SIZE_COLS if *name* refers + to a per-atom array otherwise ignored + * \return integer with the size of the vector or array dimension or -1 + * */ + +int lammps_extract_atom_size(void *handle, const char *name, int type) +{ + auto lmp = (LAMMPS *) handle; + return lmp->atom->extract_size(name, type); +} + +/* ---------------------------------------------------------------------- */ + /** Get pointer to a LAMMPS per-atom property. * \verbatim embed:rst -This function returns a pointer to the location of per-atom properties -(and per-atom-type properties in the case of the 'mass' keyword). -Per-atom data is distributed across sub-domains and thus MPI ranks. The -returned pointer is cast to ``void *`` and needs to be cast to a pointer -of data type that the entity represents. +This function returns a pointer to the location of per-atom properties (and +per-atom-type properties in the case of the 'mass' keyword). Per-atom data is +distributed across sub-domains and thus MPI ranks. The returned pointer is cast +to ``void *`` and needs to be cast to a pointer of data type that the entity +represents. You can use the functions :cpp:func:`lammps_extract_atom_datatype` +and :cpp:func:`lammps_extract_atom_size` to determine data type, dimensions and +sizes of the storage pointed to by the returned pointer. -A table with supported keywords is included in the documentation -of the :cpp:func:`Atom::extract() ` function. +A table with supported keywords is included in the documentation of the +:cpp:func:`Atom::extract() ` function. .. warning:: @@ -5859,7 +5916,7 @@ int lammps_config_has_ffmpeg_support() { \verbatim embed:rst -.. versionadded::TBD +.. versionadded::29Aug2024 The LAMMPS :doc:`geturl command ` supports downloading files through using `the libcurl library `_. @@ -7008,5 +7065,5 @@ int lammps_python_api_version() { } // Local Variables: -// fill-column: 72 +// fill-column: 80 // End: diff --git a/src/library.h b/src/library.h index ff16aaa088..dbfd32a542 100644 --- a/src/library.h +++ b/src/library.h @@ -172,6 +172,7 @@ int lammps_map_atom(void *handle, const void *id); * ---------------------------------------------------------------------- */ int lammps_extract_atom_datatype(void *handle, const char *name); +int lammps_extract_atom_size(void *handle, const char *name, int type); void *lammps_extract_atom(void *handle, const char *name); /* ---------------------------------------------------------------------- diff --git a/src/lmpfftsettings.h b/src/lmpfftsettings.h index 1b9c89274c..3bcab4a61b 100644 --- a/src/lmpfftsettings.h +++ b/src/lmpfftsettings.h @@ -39,6 +39,8 @@ #define LMP_FFT_LIB "FFTW3" #elif defined(FFT_MKL) #define LMP_FFT_LIB "MKL FFT" +#elif defined(FFT_MKL_GPU) +#define LMP_FFT_LIB "MKL GPU FFT" #elif defined(FFT_CUFFT) #define LMP_FFT_LIB "cuFFT" #elif defined(FFT_HIPFFT) diff --git a/src/reader_native.cpp b/src/reader_native.cpp index f0a4976038..9c3a74f36c 100644 --- a/src/reader_native.cpp +++ b/src/reader_native.cpp @@ -139,10 +139,10 @@ void ReaderNative::skip() // invoke read_lines() in chunks no larger than MAXSMALLINT - int nchunk; + bigint nchunk; while (nremain) { nchunk = MIN(nremain,MAXSMALLINT); - read_lines(nchunk); + read_lines((int)nchunk); nremain -= nchunk; } } diff --git a/src/reader_xyz.cpp b/src/reader_xyz.cpp index 385682533c..216651455b 100644 --- a/src/reader_xyz.cpp +++ b/src/reader_xyz.cpp @@ -90,11 +90,11 @@ void ReaderXYZ::skip() { // invoke read_lines() in chunks no larger than MAXSMALLINT - int nchunk; + bigint nchunk; bigint nremain = natoms; while (nremain) { nchunk = MIN(nremain,MAXSMALLINT); - read_lines(nchunk); + read_lines((int)nchunk); nremain -= nchunk; } } diff --git a/src/region.h b/src/region.h index f273485dce..19fdec31c7 100644 --- a/src/region.h +++ b/src/region.h @@ -20,6 +20,8 @@ namespace LAMMPS_NS { class Region : protected Pointers { public: + enum { CONSTANT, VARIABLE }; + char *id, *style; Region **reglist; int interior; // 1 for interior, 0 for exterior diff --git a/src/region_block.cpp b/src/region_block.cpp index efa3d8ca6a..9376016843 100644 --- a/src/region_block.cpp +++ b/src/region_block.cpp @@ -23,8 +23,6 @@ using namespace LAMMPS_NS; -enum { CONSTANT, VARIABLE }; - static constexpr double BIG = 1.0e20; /* ---------------------------------------------------------------------- */ diff --git a/src/region_cone.cpp b/src/region_cone.cpp index dc37eeefe3..401ed53735 100644 --- a/src/region_cone.cpp +++ b/src/region_cone.cpp @@ -27,8 +27,6 @@ using namespace LAMMPS_NS; -enum { CONSTANT, VARIABLE }; - static constexpr double BIG = 1.0e20; /* ---------------------------------------------------------------------- */ diff --git a/src/region_cylinder.cpp b/src/region_cylinder.cpp index 601f70e66b..2ad0ba82f5 100644 --- a/src/region_cylinder.cpp +++ b/src/region_cylinder.cpp @@ -26,13 +26,12 @@ using namespace LAMMPS_NS; static constexpr double BIG = 1.0e20; -enum { CONSTANT, VARIABLE }; - /* ---------------------------------------------------------------------- */ RegCylinder::RegCylinder(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg), c1str(nullptr), c2str(nullptr), rstr(nullptr) { + c1style = c2style = CONSTANT; options(narg - 8, &arg[8]); // check open face settings diff --git a/src/region_ellipsoid.cpp b/src/region_ellipsoid.cpp index daabd621c8..a0b4b9e544 100644 --- a/src/region_ellipsoid.cpp +++ b/src/region_ellipsoid.cpp @@ -23,8 +23,6 @@ using namespace LAMMPS_NS; -enum { CONSTANT, VARIABLE }; - static double GetRoot2D(double r0, double z0, double z1, double g); static double GetRoot3D(double r0, double r1, double z0, double z1, double z2, double g); diff --git a/src/region_plane.cpp b/src/region_plane.cpp index 154b072633..6dc162eead 100644 --- a/src/region_plane.cpp +++ b/src/region_plane.cpp @@ -14,6 +14,9 @@ #include "region_plane.h" #include "error.h" +#include "input.h" +#include "update.h" +#include "variable.h" #include @@ -21,13 +24,48 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -RegPlane::RegPlane(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg) +RegPlane::RegPlane(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg), + xstr(nullptr), ystr(nullptr), zstr(nullptr) { + xvar = yvar = zvar = 0.0; + options(narg - 8, &arg[8]); - xp = xscale * utils::numeric(FLERR, arg[2], false, lmp); - yp = yscale * utils::numeric(FLERR, arg[3], false, lmp); - zp = zscale * utils::numeric(FLERR, arg[4], false, lmp); + if (utils::strmatch(arg[2], "^v_")) { + xstr = utils::strdup(arg[2] + 2); + xp = 0.0; + xstyle = VARIABLE; + varshape = 1; + } else { + xp = xscale * utils::numeric(FLERR, arg[2], false, lmp); + xstyle = CONSTANT; + } + + if (utils::strmatch(arg[3], "^v_")) { + ystr = utils::strdup(arg[3] + 2); + yp = 0.0; + ystyle = VARIABLE; + varshape = 1; + } else { + yp = yscale * utils::numeric(FLERR, arg[3], false, lmp); + ystyle = CONSTANT; + } + + if (utils::strmatch(arg[4], "^v_")) { + zstr = utils::strdup(arg[4] + 2); + zp = 0.0; + zstyle = VARIABLE; + varshape = 1; + } else { + zp = zscale * utils::numeric(FLERR, arg[4], false, lmp); + zstyle = CONSTANT; + } + + if (varshape) { + variable_check(); + RegPlane::shape_update(); + } + normal[0] = xscale * utils::numeric(FLERR, arg[5], false, lmp); normal[1] = yscale * utils::numeric(FLERR, arg[6], false, lmp); normal[2] = zscale * utils::numeric(FLERR, arg[7], false, lmp); @@ -54,9 +92,20 @@ RegPlane::RegPlane(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg) RegPlane::~RegPlane() { + delete[] xstr; + delete[] ystr; + delete[] zstr; delete[] contact; } +/* ---------------------------------------------------------------------- */ + +void RegPlane::init() +{ + Region::init(); + if (varshape) variable_check(); +} + /* ---------------------------------------------------------------------- inside = 1 if x,y,z is on normal side of plane or on plane inside = 0 if x,y,z is on non-normal side of plane and not on plane @@ -113,3 +162,45 @@ int RegPlane::surface_exterior(double *x, double cutoff) } return 0; } + +/* ---------------------------------------------------------------------- + change region shape via variable evaluation +------------------------------------------------------------------------- */ + +void RegPlane::shape_update() +{ + if (xstyle == VARIABLE) xp = xscale * input->variable->compute_equal(xvar); + + if (ystyle == VARIABLE) yp = yscale * input->variable->compute_equal(yvar); + + if (zstyle == VARIABLE) zp = zscale * input->variable->compute_equal(zvar); +} + +/* ---------------------------------------------------------------------- + error check on existence of variable +------------------------------------------------------------------------- */ + +void RegPlane::variable_check() +{ + if (xstyle == VARIABLE) { + xvar = input->variable->find(xstr); + if (xvar < 0) error->all(FLERR, "Variable {} for region plane does not exist", xstr); + if (!input->variable->equalstyle(xvar)) + error->all(FLERR, "Variable {} for region plane is invalid style", xstr); + } + + if (ystyle == VARIABLE) { + yvar = input->variable->find(ystr); + if (yvar < 0) error->all(FLERR, "Variable {} for region plane does not exist", ystr); + if (!input->variable->equalstyle(yvar)) + error->all(FLERR, "Variable {} for region plane is invalid style", ystr); + } + + if (zstyle == VARIABLE) { + zvar = input->variable->find(zstr); + if (zvar < 0) error->all(FLERR, "Variable {} for region plane does not exist", zstr); + if (!input->variable->equalstyle(zvar)) + error->all(FLERR, "Variable {} for region plane is invalid style", zstr); + } +} + diff --git a/src/region_plane.h b/src/region_plane.h index 2025586a7c..0e4ecda6d4 100644 --- a/src/region_plane.h +++ b/src/region_plane.h @@ -28,13 +28,23 @@ class RegPlane : public Region { public: RegPlane(class LAMMPS *, int, char **); ~RegPlane() override; + void init() override; int inside(double, double, double) override; int surface_interior(double *, double) override; int surface_exterior(double *, double) override; + void shape_update() override; private: double xp, yp, zp; double normal[3]; + + int xstyle, xvar; + int ystyle, yvar; + int zstyle, zvar; + char *xstr, *ystr, *zstr; + + void variable_check(); + }; } // namespace LAMMPS_NS diff --git a/src/region_sphere.cpp b/src/region_sphere.cpp index cd20a697d4..f449978938 100644 --- a/src/region_sphere.cpp +++ b/src/region_sphere.cpp @@ -22,8 +22,6 @@ using namespace LAMMPS_NS; -enum { CONSTANT, VARIABLE }; - /* ---------------------------------------------------------------------- */ RegSphere::RegSphere(LAMMPS *lmp, int narg, char **arg) : diff --git a/src/utils.cpp b/src/utils.cpp index dc6ee459a7..59984c8443 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -1005,8 +1005,6 @@ int utils::expand_type_int(const char *file, int line, const std::string &str, i char *typestr = expand_type(file, line, str, mode, lmp); int type = inumeric(file, line, typestr ? typestr : str, false, lmp); if (verify) { - int errorflag = 0; - if (type <= 0) errorflag = 1; int nmax; switch (mode) { case Atom::ATOM: @@ -1024,10 +1022,12 @@ int utils::expand_type_int(const char *file, int line, const std::string &str, i case Atom::IMPROPER: nmax = lmp->atom->nimpropertypes; break; + default: + nmax = 0; } - if (type > nmax) errorflag = 1; - if (errorflag) lmp->error->all(file, line, "{} type {} is out of bounds ({}-{})", - labeltypes[mode], type, 1, nmax); + if ((type <= 0) || (type > nmax)) + lmp->error->all(file, line, "{} type {} is out of bounds ({}-{})", labeltypes[mode], type, 1, + nmax); } delete[] typestr; return type; diff --git a/src/variable.cpp b/src/variable.cpp index b2f6c2882c..279c14d999 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -613,7 +613,7 @@ void Variable::set(int narg, char **arg) // unrecognized variable style - } else error->all(FLERR,"Unknown variable keyword: {}", arg[1]); + } else error->all(FLERR,"Unknown variable style: {}", arg[1]); // set name of variable, if not replacing one flagged with replaceflag // name must be all alphanumeric chars or underscores diff --git a/src/version.h b/src/version.h index af7e87b61f..9c382b3768 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1,2 @@ -#define LAMMPS_VERSION "27 Jun 2024" +#define LAMMPS_VERSION "29 Aug 2024" #define LAMMPS_UPDATE "Development" diff --git a/tools/lammps-gui/CMakeLists.txt b/tools/lammps-gui/CMakeLists.txt index 3fd2e1e7d8..fc111f5c64 100644 --- a/tools/lammps-gui/CMakeLists.txt +++ b/tools/lammps-gui/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.16) -project(lammps-gui VERSION 1.6.8 LANGUAGES CXX) +project(lammps-gui VERSION 1.6.11 LANGUAGES CXX) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) @@ -86,9 +86,7 @@ else() add_compile_options(/wd4244) add_compile_options(/wd4267) add_compile_options(/wd4250) - if(LAMMPS_EXCEPTIONS) - add_compile_options(/EHsc) - endif() + add_compile_options(/EHsc) endif() add_compile_definitions(_CRT_SECURE_NO_WARNINGS) endif() @@ -130,6 +128,8 @@ set(PROJECT_SOURCES chartviewer.h codeeditor.cpp codeeditor.h + findandreplace.cpp + findandreplace.h helpers.cpp highlighter.cpp highlighter.h diff --git a/tools/lammps-gui/TODO.md b/tools/lammps-gui/TODO.md index 9485368374..b36f0a4ce8 100644 --- a/tools/lammps-gui/TODO.md +++ b/tools/lammps-gui/TODO.md @@ -2,13 +2,21 @@ LAMMPS-GUI TODO list: # Short term goals (v1.x) +- implement a timed "Auto-Save" feature that saves after some idle time. set timeout in Editor preferences. +- add a "Filter data" checkbox to the "Charts" window to select whether data should be dropped. +- add a "Charts tab" to the preferences with the following (default) settings: + - default filter data yes/no + - default smooth parameters + - default plot colors + - enable "raw" or "smooth" or "both" +- add QLineEdit field to enter plot title +- add a "Colors" menu to the image viewer to adjust color settings for the + current image (unlike the defaults in the perferences) including assigning + colors to individual atom types. +- Support color by property (e.g. scan computes or fixes with per-atom data), define colormaps etc. +- Add a "Diameters" dialog where diamaters can by specified by atom type - figure out how widgets can be resized to fraction of available screen size. - figure out stacking order of frames and whether it can be more flexible -- figure out how to avoid corrupted cached thermo data while reading it. -- implement a timed "Auto-Save" feature that saves after some idle time. set timeout in Editor preferences. -- add a "Colors" menu to the image viewer to adjust color settings for the - current image (unlike the defaults in the perferences). Support color by - property (e.g. scan computes or fixes with per-atom data), define colormaps etc. - implement indenting regions for (nested) loops? - implement data file manager GUI with the following features: @@ -28,6 +36,7 @@ LAMMPS-GUI TODO list: - call to LAMMPS to create geometries from lattices (with/without molecule files) and STL files - call to LAMMPS to generate visualizations of geometries - edit force field parameters, e.g. apply charmm + - edit / manage labelmap # Long term ideas (v2.x) - rewrite entire application to build the App and its layout manually diff --git a/tools/lammps-gui/chartviewer.cpp b/tools/lammps-gui/chartviewer.cpp index 8d5c3f3d56..eb5444de8e 100644 --- a/tools/lammps-gui/chartviewer.cpp +++ b/tools/lammps-gui/chartviewer.cpp @@ -82,6 +82,7 @@ ChartWindow::ChartWindow(const QString &_filename, QWidget *parent) : top->addWidget(menu); top->addSpacerItem(new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum)); top->addWidget(dummy); + top->addWidget(new QLabel("Plot:")); top->addWidget(smooth); top->addWidget(new QLabel(" Smooth:")); top->addWidget(window); @@ -423,7 +424,7 @@ void ChartViewer::add_data(int step, double data) if (last_step < step) { last_step = step; - // do not add data that deviates by more than 5 sigma from the average + // do not add data that deviates by more than 4 sigma from the average // over the last 5 to 20 data items. this is a hack to work around // getting corrupted data from lammps_get_last_thermo() const auto &points = series->points(); diff --git a/tools/lammps-gui/codeeditor.cpp b/tools/lammps-gui/codeeditor.cpp index fd86b5199e..8083f1e2c5 100644 --- a/tools/lammps-gui/codeeditor.cpp +++ b/tools/lammps-gui/codeeditor.cpp @@ -218,7 +218,10 @@ CodeEditor::CodeEditor(QWidget *parent) : help_index.close(); } + setBackgroundRole(QPalette::Light); lineNumberArea = new LineNumberArea(this); + lineNumberArea->setBackgroundRole(QPalette::Dark); + lineNumberArea->setAutoFillBackground(true); connect(this, &CodeEditor::blockCountChanged, this, &CodeEditor::updateLineNumberAreaWidth); connect(this, &CodeEditor::updateRequest, this, &CodeEditor::updateLineNumberArea); updateLineNumberAreaWidth(0); @@ -669,7 +672,7 @@ void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event) if (block.isVisible() && bottom >= event->rect().top()) { QString number = QString::number(blockNumber + 1) + " "; if ((highlight == NO_HIGHLIGHT) || (blockNumber != std::abs(highlight))) { - painter.setPen(Qt::black); + painter.setPen(palette().color(QPalette::WindowText)); } else { number = QString(">") + QString::number(blockNumber + 1) + "<"; if (highlight < 0) diff --git a/tools/lammps-gui/findandreplace.cpp b/tools/lammps-gui/findandreplace.cpp new file mode 100644 index 0000000000..e986dc4edf --- /dev/null +++ b/tools/lammps-gui/findandreplace.cpp @@ -0,0 +1,148 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 "findandreplace.h" + +#include "codeeditor.h" +#include "lammpsgui.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* ---------------------------------------------------------------------- */ + +FindAndReplace::FindAndReplace(CodeEditor *_editor, QWidget *parent) : + QDialog(parent), editor(_editor), search(nullptr), replace(nullptr), withcase(nullptr), + wrap(nullptr), whole(nullptr) +{ + auto *layout = new QGridLayout; + search = new QLineEdit; + replace = new QLineEdit; + withcase = new QCheckBox("Match case"); + wrap = new QCheckBox("Wrap around"); + whole = new QCheckBox("Whole word"); + auto *next = new QPushButton("&Next"); + auto *replone = new QPushButton("&Replace"); + auto *replall = new QPushButton("Replace &All"); + auto *done = new QPushButton("&Done"); + + layout->addWidget(new QLabel("Find:"), 0, 0, Qt::AlignRight); + layout->addWidget(search, 0, 1, 1, 2, Qt::AlignLeft); + layout->addWidget(new QLabel("Replace with:"), 1, 0, Qt::AlignRight); + layout->addWidget(replace, 1, 1, 1, 2, Qt::AlignLeft); + layout->addWidget(withcase, 2, 0, Qt::AlignLeft); + layout->addWidget(wrap, 2, 1, Qt::AlignLeft); + layout->addWidget(whole, 2, 2, Qt::AlignLeft); + wrap->setChecked(true); + + auto *buttons = new QHBoxLayout; + buttons->addWidget(next); + buttons->addWidget(replone); + buttons->addWidget(replall); + buttons->addWidget(done); + layout->addLayout(buttons, 3, 0, 1, 3, Qt::AlignHCenter); + + connect(next, &QPushButton::released, this, &FindAndReplace::find_next); + connect(replone, &QPushButton::released, this, &FindAndReplace::replace_next); + connect(replall, &QPushButton::released, this, &FindAndReplace::replace_all); + connect(done, &QPushButton::released, this, &QDialog::accept); + + auto action = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q), this); + connect(action, &QShortcut::activated, this, &FindAndReplace::quit); + + setLayout(layout); + setWindowIcon(QIcon(":/icons/lammps-icon-128x128.png")); + setWindowTitle("LAMMPS-GUI - Find and Replace"); +} + +/* ---------------------------------------------------------------------- */ + +void FindAndReplace::find_next() +{ + auto text = search->text(); + + int find_flags = 0; + if (withcase->isChecked()) find_flags |= QTextDocument::FindCaseSensitively; + if (whole->isChecked()) find_flags |= QTextDocument::FindWholeWords; + + if (!text.isEmpty()) { + if (!editor->find(text, (QTextDocument::FindFlag)find_flags) && wrap->isChecked()) { + // nothing found from the current position to the end, reposition cursor and beginning + editor->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor); + editor->find(text, (QTextDocument::FindFlag)find_flags); + } + } +} + +/* ---------------------------------------------------------------------- */ + +void FindAndReplace::replace_next() +{ + auto text = search->text(); + if (text.isEmpty()) return; + + auto cursor = editor->textCursor(); + auto flag = withcase->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive; + + // if selected text at cursor location matches search text, replace + if (QString::compare(cursor.selectedText(), search->text(), flag) == 0) + cursor.insertText(replace->text()); + + find_next(); +} + +/* ---------------------------------------------------------------------- */ + +void FindAndReplace::replace_all() +{ + auto text = search->text(); + if (text.isEmpty()) return; + + // drop selection if we have one + auto cursor = editor->textCursor(); + if (cursor.hasSelection()) cursor.movePosition(QTextCursor::Left); + + find_next(); + cursor = editor->textCursor(); + + // keep replacing until find_next() does not find anything anymore + while (cursor.hasSelection()) { + cursor.insertText(replace->text()); + find_next(); + cursor = editor->textCursor(); + } +} + +/* ---------------------------------------------------------------------- */ + +void FindAndReplace::quit() +{ + LammpsGui *main = nullptr; + for (QWidget *widget : QApplication::topLevelWidgets()) + if (widget->objectName() == "LammpsGui") main = dynamic_cast(widget); + if (main) main->quit(); +} + +// Local Variables: +// c-basic-offset: 4 +// End: diff --git a/tools/lammps-gui/findandreplace.h b/tools/lammps-gui/findandreplace.h new file mode 100644 index 0000000000..7c34c50543 --- /dev/null +++ b/tools/lammps-gui/findandreplace.h @@ -0,0 +1,46 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 FIND_AND_REPLACE_H +#define FIND_AND_REPLACE_H + +#include "codeeditor.h" +#include + +class QLineEdit; +class QCheckBox; + +class FindAndReplace : public QDialog { + Q_OBJECT + +public: + explicit FindAndReplace(CodeEditor *_editor, QWidget *parent = nullptr); + ~FindAndReplace() = default; + +private slots: + void find_next(); + void replace_next(); + void replace_all(); + void quit(); + +private: + CodeEditor *editor; + QLineEdit *search, *replace; + QCheckBox *withcase, *wrap, *whole; +}; + +#endif + +// Local Variables: +// c-basic-offset: 4 +// End: diff --git a/tools/lammps-gui/helpers.cpp b/tools/lammps-gui/helpers.cpp index 47d09f4515..cac5d86482 100644 --- a/tools/lammps-gui/helpers.cpp +++ b/tools/lammps-gui/helpers.cpp @@ -13,9 +13,12 @@ #include "helpers.h" +#include +#include #include #include #include +#include #include #include @@ -84,6 +87,16 @@ void purge_directory(const QString &dir) } } +// compare black level of foreground and background color +bool is_light_theme() +{ + QPalette p; + int fg = p.brush(QPalette::Active, QPalette::WindowText).color().black(); + int bg = p.brush(QPalette::Active, QPalette::Window).color().black(); + + return (fg > bg); +} + // Local Variables: // c-basic-offset: 4 // End: diff --git a/tools/lammps-gui/helpers.h b/tools/lammps-gui/helpers.h index b22b6e72c4..b3269e6d61 100644 --- a/tools/lammps-gui/helpers.h +++ b/tools/lammps-gui/helpers.h @@ -28,6 +28,9 @@ extern bool has_exe(const QString &exe); // recursively purge a directory extern void purge_directory(const QString &dir); +// flag if light or dark theme +extern bool is_light_theme(); + #endif // Local Variables: // c-basic-offset: 4 diff --git a/tools/lammps-gui/highlighter.cpp b/tools/lammps-gui/highlighter.cpp index 3f79c7a73e..ec196438d9 100644 --- a/tools/lammps-gui/highlighter.cpp +++ b/tools/lammps-gui/highlighter.cpp @@ -12,6 +12,28 @@ ------------------------------------------------------------------------- */ #include "highlighter.h" +#include "helpers.h" +#include + +// workaround for Qt-5.12 +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) +namespace QColorConstants { +const QColor Red = QColor::fromRgb(0xff, 0x00, 0x00); +const QColor Green = QColor::fromRgb(0x00, 0xff, 0x00); +const QColor Blue = QColor::fromRgb(0x00, 0x00, 0xff); +const QColor Cyan = QColor::fromRgb(0x00, 0xff, 0xff); +const QColor Magenta = QColor::fromRgb(0xff, 0x00, 0xff); +const QColor Yellow = QColor::fromRgb(0xff, 0xff, 0x00); +namespace Svg { +const QColor dodgerblue = QColor::fromRgb(0x1e, 0x90, 0xff); +const QColor indianred = QColor::fromRgb(0xcd, 0x5c, 0x5c); +const QColor lightcoral = QColor::fromRgb(0xf0, 0x80, 0x80); +const QColor lightgray = QColor::fromRgb(0xd3, 0xd3, 0xd3); +const QColor lightgreen = QColor::fromRgb(0x90, 0xee, 0x90); +const QColor lightskyblue = QColor::fromRgb(0x87, 0xce, 0xfa); +} // namespace Svg +} // namespace QColorConstants +#endif Highlighter::Highlighter(QTextDocument *parent) : QSyntaxHighlighter(parent), @@ -54,27 +76,54 @@ Highlighter::Highlighter(QTextDocument *parent) : isTriple(QStringLiteral("[^\"]*\"\"\"[^\"]*")), isString(QStringLiteral("(\".+?\"|'.+?'|\"\"\".*\"\"\")")), in_triple(false) { - formatNumber.setForeground(Qt::blue); - formatString.setForeground(Qt::darkGreen); - formatString.setFontWeight(QFont::Normal); - formatComment.setForeground(Qt::red); - formatSpecial.setForeground(Qt::darkMagenta); - formatSpecial.setFontWeight(QFont::Bold); - formatParticle.setForeground(Qt::darkRed); - formatParticle.setFontWeight(QFont::Bold); - formatRun.setForeground(Qt::darkBlue); - formatRun.setFontWeight(QFont::Bold); - formatVariable.setForeground(Qt::darkGray); - formatVariable.setFontWeight(QFont::Bold); + if (is_light_theme()) { + // syntax colors for light themes + formatNumber.setForeground(Qt::blue); + formatString.setForeground(Qt::darkGreen); + formatString.setFontWeight(QFont::Normal); + formatComment.setForeground(Qt::red); + formatSpecial.setForeground(Qt::darkMagenta); + formatSpecial.setFontWeight(QFont::Bold); + formatParticle.setForeground(Qt::darkRed); + formatParticle.setFontWeight(QFont::Bold); + formatRun.setForeground(Qt::darkBlue); + formatRun.setFontWeight(QFont::Bold); + formatVariable.setForeground(Qt::darkGray); + formatVariable.setFontWeight(QFont::Bold); - formatOutput.setForeground(Qt::darkYellow); - formatOutput.setFontWeight(QFont::Bold); - formatRead.setForeground(Qt::magenta); - formatRead.setFontWeight(QFont::Bold); - formatLattice.setForeground(Qt::darkGreen); - formatLattice.setFontWeight(QFont::Bold); - formatSetup.setForeground(Qt::darkCyan); - formatSetup.setFontWeight(QFont::Bold); + formatOutput.setForeground(Qt::darkYellow); + formatOutput.setFontWeight(QFont::Bold); + formatRead.setForeground(Qt::magenta); + formatRead.setFontWeight(QFont::Bold); + formatLattice.setForeground(Qt::darkGreen); + formatLattice.setFontWeight(QFont::Bold); + formatSetup.setForeground(Qt::darkCyan); + formatSetup.setFontWeight(QFont::Bold); + } else { + // syntax colors for dark themes + formatNumber.setForeground(QColorConstants::Svg::dodgerblue); + formatString.setForeground(QColorConstants::Green); + formatString.setFontWeight(QFont::Normal); + formatComment.setForeground(QColorConstants::Red); + formatComment.setFontWeight(QFont::Bold); + formatSpecial.setForeground(QColorConstants::Magenta); + formatSpecial.setFontWeight(QFont::Bold); + formatParticle.setForeground(QColorConstants::Svg::indianred); + formatParticle.setFontWeight(QFont::Bold); + formatRun.setForeground(QColorConstants::Svg::lightskyblue); + formatRun.setFontWeight(QFont::Bold); + formatVariable.setForeground(QColorConstants::Svg::lightgray); + formatVariable.setFontWeight(QFont::Bold); + + formatOutput.setForeground(QColorConstants::Yellow); + formatOutput.setFontWeight(QFont::Bold); + formatRead.setForeground(QColorConstants::Svg::lightcoral); + formatRead.setFontWeight(QFont::Bold); + formatLattice.setForeground(QColorConstants::Svg::lightgreen); + formatLattice.setFontWeight(QFont::Bold); + formatSetup.setForeground(QColorConstants::Cyan); + formatSetup.setFontWeight(QFont::Bold); + } } void Highlighter::highlightBlock(const QString &text) diff --git a/tools/lammps-gui/icons/search.png b/tools/lammps-gui/icons/search.png new file mode 100644 index 0000000000..1790200d49 Binary files /dev/null and b/tools/lammps-gui/icons/search.png differ diff --git a/tools/lammps-gui/imageviewer.cpp b/tools/lammps-gui/imageviewer.cpp index ff96967498..0b3c58abd3 100644 --- a/tools/lammps-gui/imageviewer.cpp +++ b/tools/lammps-gui/imageviewer.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -31,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -135,9 +137,10 @@ static const QString blank(" "); ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidget *parent) : QDialog(parent), menuBar(new QMenuBar), imageLabel(new QLabel), scrollArea(new QScrollArea), - saveAsAct(nullptr), copyAct(nullptr), cmdAct(nullptr), zoomInAct(nullptr), zoomOutAct(nullptr), - normalSizeAct(nullptr), lammps(_lammps), group("all"), filename(fileName), useelements(false), - usediameter(false), usesigma(false) + buttonBox(nullptr), scaleFactor(1.0), atomSize(1.0), saveAsAct(nullptr), copyAct(nullptr), + cmdAct(nullptr), zoomInAct(nullptr), zoomOutAct(nullptr), normalSizeAct(nullptr), + lammps(_lammps), group("all"), filename(fileName), useelements(false), usediameter(false), + usesigma(false) { imageLabel->setBackgroundRole(QPalette::Base); imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); @@ -163,6 +166,13 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge renderstatus->setEnabled(false); renderstatus->setToolTip("Render status"); renderstatus->setObjectName("renderstatus"); + auto *asize = new QLineEdit(QString::number(atomSize)); + auto *valid = new QDoubleValidator(1.0e-10, 1.0e10, 10, asize); + asize->setValidator(valid); + asize->setObjectName("atomSize"); + asize->setToolTip("Set Atom size"); + asize->setEnabled(false); + asize->hide(); settings.beginGroup("snapshot"); auto *xval = new QSpinBox; xval->setRange(100, 10000); @@ -179,6 +189,7 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge yval->setToolTip("Set rendered image height"); yval->setMinimumSize(bsize); settings.endGroup(); + connect(asize, &QLineEdit::editingFinished, this, &ImageViewer::set_atom_size); connect(xval, &QAbstractSpinBox::editingFinished, this, &ImageViewer::edit_size); connect(yval, &QAbstractSpinBox::editingFinished, this, &ImageViewer::edit_size); @@ -249,6 +260,11 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge menuLayout->addWidget(menuBar); menuLayout->addWidget(renderstatus); + menuLayout->addWidget(new QLabel(" Atom Size: ")); + menuLayout->addWidget(asize); + // hide item initially + menuLayout->itemAt(2)->widget()->setObjectName("AtomLabel"); + menuLayout->itemAt(2)->widget()->hide(); menuLayout->addWidget(new QLabel(" Width: ")); menuLayout->addWidget(xval); menuLayout->addWidget(new QLabel(" Height: ")); @@ -307,7 +323,7 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge doanti->setChecked(antialias); scaleFactor = 1.0; - resize(image.width() + 20, image.height() + 75); + resize(image.width() + 25, image.height() + 80); scrollArea->setVisible(true); updateActions(); @@ -356,6 +372,13 @@ void ImageViewer::reset_view() createImage(); } +void ImageViewer::set_atom_size() +{ + auto *field = qobject_cast(sender()); + atomSize = field->text().toDouble(); + createImage(); +} + void ImageViewer::edit_size() { auto *field = qobject_cast(sender()); @@ -498,7 +521,9 @@ void ImageViewer::cmd_to_clipboard() for (int i = modidx + 1; i < maxidx; ++i) dumpcmd += blank + words[i]; dumpcmd += '\n'; +#if QT_CONFIG(clipboard) QGuiApplication::clipboard()->setText(dumpcmd); +#endif } void ImageViewer::change_group(int) @@ -558,10 +583,43 @@ void ImageViewer::createImage() if (useelements || usediameter || usesigma) { auto *button = findChild("vdw"); if (button) button->setEnabled(true); + auto *edit = findChild("atomSize"); + if (edit) { + edit->setEnabled(false); + edit->hide(); + } + auto *label = findChild("AtomLabel"); + if (label) { + label->setEnabled(false); + label->hide(); + } + } else { adiams.clear(); auto *button = findChild("vdw"); if (button) button->setEnabled(false); + + auto *label = findChild("AtomLabel"); + if (label) { + label->setEnabled(true); + label->show(); + } + auto *edit = findChild("atomSize"); + if (edit) { + if (!edit->isEnabled()) { + edit->setEnabled(true); + edit->show(); + // initialize with lattice spacing + auto *xlattice = (const double *)lammps->extract_global("xlattice"); + if (xlattice) atomSize = *xlattice; + edit->setText(QString::number(atomSize)); + } + atomSize = edit->text().toDouble(); + } + if (atomSize != 1.0) { + for (int i = 1; i <= ntypes; ++i) + adiams += QString("adiam %1 %2 ").arg(i).arg(atomSize); + } } // color @@ -605,6 +663,7 @@ void ImageViewer::createImage() dumpcmd += " backcolor " + settings.value("background", "black").toString(); if (useelements) dumpcmd += blank + elements + blank + adiams + blank; if (usesigma) dumpcmd += blank + adiams + blank; + if (!useelements && !usesigma && (atomSize != 1.0)) dumpcmd += blank + adiams + blank; settings.endGroup(); last_dump_cmd = dumpcmd; @@ -615,10 +674,10 @@ void ImageViewer::createImage() const QImage newImage = reader.read(); dumpfile.remove(); - // read of new image failed. Don't try to scale and load it. + // read of new image failed. nothing left to do. if (newImage.isNull()) return; - // scale back to achieve antialiasing + // show show image image = newImage; imageLabel->setPixmap(QPixmap::fromImage(image)); imageLabel->adjustSize(); diff --git a/tools/lammps-gui/imageviewer.h b/tools/lammps-gui/imageviewer.h index 8e72cea7bf..0c175bd03f 100644 --- a/tools/lammps-gui/imageviewer.h +++ b/tools/lammps-gui/imageviewer.h @@ -34,13 +34,15 @@ class ImageViewer : public QDialog { Q_OBJECT public: - explicit ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidget *parent = nullptr); + explicit ImageViewer(const QString &fileName, LammpsWrapper *_lammps, + QWidget *parent = nullptr); private slots: void saveAs(); void copy(); void quit(); + void set_atom_size(); void edit_size(); void reset_view(); void toggle_ssao(); @@ -75,7 +77,8 @@ private: QLabel *imageLabel; QScrollArea *scrollArea; QDialogButtonBox *buttonBox; - double scaleFactor = 1.0; + double scaleFactor; + double atomSize; QAction *saveAsAct; QAction *copyAct; diff --git a/tools/lammps-gui/lammps-gui.appdata.xml b/tools/lammps-gui/lammps-gui.appdata.xml index 32028f9ee1..4c8843957e 100644 --- a/tools/lammps-gui/lammps-gui.appdata.xml +++ b/tools/lammps-gui/lammps-gui.appdata.xml @@ -54,8 +54,27 @@ + + + + + + + Resolve plugin mode issues. + Add -p command line flag to override path to liblammps.so + + + + + Added search and replace functionality + Converged command line argument parsing using Qt facilities + Added dark mode adjustments to syntax highlighting + Add field to enter Atom size, if not determined otherwise + + + Support plotting raw and smoothed data diff --git a/tools/lammps-gui/lammpsgui.cpp b/tools/lammps-gui/lammpsgui.cpp index 32b23c9d12..fe6b8c5391 100644 --- a/tools/lammps-gui/lammpsgui.cpp +++ b/tools/lammps-gui/lammpsgui.cpp @@ -15,6 +15,7 @@ #include "chartviewer.h" #include "fileviewer.h" +#include "findandreplace.h" #include "helpers.h" #include "highlighter.h" #include "imageviewer.h" @@ -40,7 +41,6 @@ #include #include #include -#include #include #include #include @@ -69,21 +69,13 @@ static const QString blank(" "); static constexpr int BUFLEN = 256; -LammpsGui::LammpsGui(QWidget *parent, const char *filename) : +LammpsGui::LammpsGui(QWidget *parent, const QString &filename) : QMainWindow(parent), ui(new Ui::LammpsGui), highlighter(nullptr), capturer(nullptr), status(nullptr), logwindow(nullptr), imagewindow(nullptr), chartwindow(nullptr), slideshow(nullptr), logupdater(nullptr), dirstatus(nullptr), progress(nullptr), prefdialog(nullptr), lammpsstatus(nullptr), varwindow(nullptr), wizard(nullptr), runner(nullptr), is_running(false), run_counter(0) { - // enforce using the plain ASCII C locale within the GUI. - QLocale::setDefault(QLocale("C")); - -#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - // register QList only needed for Qt5 - qRegisterMetaTypeStreamOperators>("QList"); -#endif - docver = ""; ui->setupUi(this); this->setCentralWidget(ui->textEdit); @@ -94,35 +86,34 @@ LammpsGui::LammpsGui(QWidget *parent, const char *filename) : // use $HOME if we get dropped to "/" like on macOS if (current_dir == "/") current_dir = QDir::homePath(); inspectList.clear(); - -#define stringify(x) myxstr(x) -#define myxstr(x) #x - QCoreApplication::setOrganizationName("The LAMMPS Developers"); - QCoreApplication::setOrganizationDomain("lammps.org"); - QCoreApplication::setApplicationName("LAMMPS-GUI - QT" stringify(QT_VERSION_MAJOR)); -#undef stringify -#undef myxstr + setAutoFillBackground(true); // restore and initialize settings QSettings settings; #if defined(LAMMPS_GUI_USE_PLUGIN) - plugin_path.clear(); - std::string deffile = settings.value("plugin_path", "liblammps.so").toString().toStdString(); - for (const char *libfile : {deffile.c_str(), "./liblammps.so", "liblammps.dylib", - "./liblammps.dylib", "liblammps.dll"}) { - if (lammps.load_lib(libfile)) { - auto canonical = QFileInfo(libfile).canonicalFilePath(); - plugin_path = canonical.toStdString(); - settings.setValue("plugin_path", canonical); - break; + plugin_path = + QFileInfo(settings.value("plugin_path", "liblammps.so").toString()).canonicalFilePath(); + if (!lammps.load_lib(plugin_path.toStdString().c_str())) { + // fall back to defaults + for (const char *libfile : + {"./liblammps.so", "liblammps.dylib", "./liblammps.dylib", "liblammps.dll"}) { + if (lammps.load_lib(libfile)) { + plugin_path = QFileInfo(libfile).canonicalFilePath(); + settings.setValue("plugin_path", plugin_path); + break; + } else { + plugin_path.clear(); + } } } - if (plugin_path.empty()) { + if (plugin_path.isEmpty()) { // none of the plugin paths could load, remove key settings.remove("plugin_path"); - QMessageBox::critical(this, "Error", "Cannot open LAMMPS shared library file"); + QMessageBox::critical(this, "Error", + "Cannot open LAMMPS shared library file.\n" + "Use -p command line flag to specify a path to the library."); exit(1); } #endif @@ -217,6 +208,7 @@ LammpsGui::LammpsGui(QWidget *parent, const char *filename) : connect(ui->actionPaste, &QAction::triggered, this, &LammpsGui::paste); connect(ui->actionUndo, &QAction::triggered, this, &LammpsGui::undo); connect(ui->actionRedo, &QAction::triggered, this, &LammpsGui::redo); + connect(ui->actionSearchAndReplace, &QAction::triggered, this, &LammpsGui::findandreplace); connect(ui->actionRun_Buffer, &QAction::triggered, this, &LammpsGui::run_buffer); connect(ui->actionRun_File, &QAction::triggered, this, &LammpsGui::run_file); connect(ui->actionStop_LAMMPS, &QAction::triggered, this, &LammpsGui::stop_run); @@ -290,7 +282,7 @@ LammpsGui::LammpsGui(QWidget *parent, const char *filename) : dirstatus->show(); ui->statusbar->addWidget(progress); - if (filename) { + if (filename.size() > 0) { open_file(filename); } else { setWindowTitle("LAMMPS-GUI - Editor - *unknown*"); @@ -514,7 +506,7 @@ void LammpsGui::start_exe() void LammpsGui::update_recents(const QString &filename) { QSettings settings; - recent = settings.value("recent").value>(); + if (settings.contains("recent")) recent = settings.value("recent").value>(); for (int i = 0; i < recent.size(); ++i) { QFileInfo fi(recent[i]); @@ -526,7 +518,10 @@ void LammpsGui::update_recents(const QString &filename) if (!filename.isEmpty() && !recent.contains(filename)) recent.prepend(filename); if (recent.size() > 5) recent.removeLast(); - settings.setValue("recent", QVariant::fromValue(recent)); + if (recent.size() > 0) + settings.setValue("recent", QVariant::fromValue(recent)); + else + settings.remove("recent"); ui->action_1->setVisible(false); if ((recent.size() > 0) && !recent[0].isEmpty()) { @@ -1440,12 +1435,16 @@ void LammpsGui::setFont(const QFont &newfont) void LammpsGui::about() { std::string version = "This is LAMMPS-GUI version " LAMMPS_GUI_VERSION; - version += " using Qt version " QT_VERSION_STR "\n"; + version += " using Qt version " QT_VERSION_STR; + if (is_light_theme()) + version += " using light theme\n"; + else + version += " using dark theme\n"; if (lammps.has_plugin()) { version += "LAMMPS library loaded as plugin"; - if (!plugin_path.empty()) { + if (!plugin_path.isEmpty()) { version += " from file "; - version += plugin_path; + version += plugin_path.toStdString(); } } else { version += "LAMMPS library linked to executable"; @@ -1469,8 +1468,10 @@ void LammpsGui::about() } to_clipboard += info.c_str(); +#if QT_CONFIG(clipboard) QGuiApplication::clipboard()->setText(to_clipboard); info += "(Note: this text has been copied to the clipboard)\n"; +#endif QMessageBox msg; msg.setWindowTitle("About LAMMPS-GUI"); @@ -1872,6 +1873,14 @@ void LammpsGui::edit_variables() } } +void LammpsGui::findandreplace() +{ + FindAndReplace find(ui->textEdit, this); + find.setFont(font()); + find.setObjectName("find"); + find.exec(); +} + void LammpsGui::preferences() { QSettings settings; diff --git a/tools/lammps-gui/lammpsgui.h b/tools/lammps-gui/lammpsgui.h index 0cf6677149..a269e1a384 100644 --- a/tools/lammps-gui/lammpsgui.h +++ b/tools/lammps-gui/lammpsgui.h @@ -68,7 +68,7 @@ class LammpsGui : public QMainWindow { friend class Tutorial2Wizard; public: - LammpsGui(QWidget *parent = nullptr, const char *filename = nullptr); + LammpsGui(QWidget *parent = nullptr, const QString &filename = QString()); ~LammpsGui() override; protected: @@ -115,6 +115,7 @@ private slots: void paste(); void undo(); void redo(); + void findandreplace(); void run_buffer() { do_run(true); } void run_file() { do_run(false); } @@ -171,7 +172,7 @@ private: LammpsWrapper lammps; LammpsRunner *runner; QString docver; - std::string plugin_path; + QString plugin_path; bool is_running; int run_counter; std::vector lammps_args; diff --git a/tools/lammps-gui/lammpsgui.qrc b/tools/lammps-gui/lammpsgui.qrc index cf9dd20dda..8111edd44b 100644 --- a/tools/lammps-gui/lammpsgui.qrc +++ b/tools/lammps-gui/lammpsgui.qrc @@ -58,6 +58,7 @@ icons/preferences-desktop.png icons/process-stop.png icons/run-file.png + icons/search.png icons/system-box.png icons/system-help.png icons/system-run.png diff --git a/tools/lammps-gui/lammpsgui.ui b/tools/lammps-gui/lammpsgui.ui index 1517168327..045e0f84a8 100644 --- a/tools/lammps-gui/lammpsgui.ui +++ b/tools/lammps-gui/lammpsgui.ui @@ -62,6 +62,8 @@ + + @@ -312,12 +314,23 @@ Ctrl+Shift+H + + + + + + &Find and Replace... + + + Ctrl+F + + - Pre&ferences... + P&references... Ctrl+P diff --git a/tools/lammps-gui/lammpswrapper.cpp b/tools/lammps-gui/lammpswrapper.cpp index ed2bde1c9f..70d271f547 100644 --- a/tools/lammps-gui/lammpswrapper.cpp +++ b/tools/lammps-gui/lammpswrapper.cpp @@ -115,7 +115,7 @@ double LammpsWrapper::extract_variable(const char *keyword) } double val = *((double *)ptr); #if defined(LAMMPS_GUI_USE_PLUGIN) - ptr = ((liblammpsplugin_t *)plugin_handle)->free(ptr); + ((liblammpsplugin_t *)plugin_handle)->free(ptr); #else lammps_free(ptr); #endif diff --git a/tools/lammps-gui/main.cpp b/tools/lammps-gui/main.cpp index 4820d48ebb..53bdaca8fd 100644 --- a/tools/lammps-gui/main.cpp +++ b/tools/lammps-gui/main.cpp @@ -14,28 +14,69 @@ #include "lammpsgui.h" #include +#include +#include +#include +#include +#include +#include #include #include +#define stringify(x) myxstr(x) +#define myxstr(x) #x + int main(int argc, char *argv[]) { - QApplication a(argc, argv); + Q_INIT_RESOURCE(lammpsgui); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + // register QList only needed for Qt5 + qRegisterMetaTypeStreamOperators>("QList"); +#endif - const char *infile = nullptr; - if (argc > 1) { - infile = argv[1]; - if ((strcmp(infile, "-help") == 0) || (strcmp(infile, "-h") == 0)) { - printf("This is LAMMPS-GUI version " LAMMPS_GUI_VERSION - " using Qt version " QT_VERSION_STR "\n"); - printf("Usage: %s [-h|-help|]\n", argv[0]); - return 1; + QApplication app(argc, argv); + // enforce using the plain ASCII C locale within the GUI. + QLocale::setDefault(QLocale::c()); + QCoreApplication::setOrganizationName("The LAMMPS Developers"); + QCoreApplication::setOrganizationDomain("lammps.org"); + QCoreApplication::setApplicationName("LAMMPS-GUI - QT" stringify(QT_VERSION_MAJOR)); + QCoreApplication::setApplicationVersion(LAMMPS_GUI_VERSION); + QCommandLineParser parser; + parser.setApplicationDescription( + "\nThis is LAMMPS-GUI v" LAMMPS_GUI_VERSION "\n" + "\nA graphical editor for LAMMPS input files with syntax highlighting and\n" + "auto-completion that can run LAMMPS directly. It has built-in capabilities\n" + "for monitoring, visualization, plotting, and capturing console output."); +#if defined(LAMMPS_GUI_USE_PLUGIN) + QCommandLineOption plugindir(QStringList() << "p" + << "pluginpath", + "Path to LAMMPS shared library", "path"); + parser.addOption(plugindir); +#endif + + parser.addHelpOption(); + parser.addVersionOption(); + parser.addPositionalArgument("file", "The LAMMPS input file to open (optional)."); + parser.process(app); + +#if defined(LAMMPS_GUI_USE_PLUGIN) + if (parser.isSet(plugindir)) { + QStringList pluginpath = parser.values(plugindir); + if (pluginpath.length() > 0) { + QSettings settings; + settings.setValue("plugin_path", QString(pluginpath.at(0))); + settings.sync(); } } +#endif + QString infile; + QStringList args = parser.positionalArguments(); + if (args.size() > 0) infile = args[0]; LammpsGui w(nullptr, infile); w.show(); - return QApplication::exec(); + return app.exec(); } // Local Variables: diff --git a/tools/lammps-gui/org.lammps.lammps-gui.yml b/tools/lammps-gui/org.lammps.lammps-gui.yml index 26f35531ce..548c4ce93e 100644 --- a/tools/lammps-gui/org.lammps.lammps-gui.yml +++ b/tools/lammps-gui/org.lammps.lammps-gui.yml @@ -108,5 +108,5 @@ modules: - -D BUILD_TOOLS=yes sources: - type: git - url: https://github.com/akohlmey/lammps.git - branch: collected-small-fixes + url: https://github.com/lammps/lammps.git + branch: release diff --git a/tools/lammps-gui/preferences.cpp b/tools/lammps-gui/preferences.cpp index 2955d37eb1..ab6397f7bd 100644 --- a/tools/lammps-gui/preferences.cpp +++ b/tools/lammps-gui/preferences.cpp @@ -171,6 +171,8 @@ void Preferences::accept() auto *spin = tabWidget->findChild("updfreq"); if (spin) settings->setValue("updfreq", spin->value()); + spin = tabWidget->findChild("updchart"); + if (spin) settings->setValue("updchart", spin->value()); if (need_relaunch) { QMessageBox msg(QMessageBox::Information, QString("Relaunching LAMMPS-GUI"), diff --git a/tools/msi2lmp/src/GetParameters.c b/tools/msi2lmp/src/GetParameters.c index 921e37491f..b7796de939 100644 --- a/tools/msi2lmp/src/GetParameters.c +++ b/tools/msi2lmp/src/GetParameters.c @@ -44,7 +44,7 @@ void GetParameters() for (i=0; i < no_atom_types; i++) { backwards = -1; - strncpy(potential_types[0],atomtypes[i].potential,5); + memcpy(potential_types[0],atomtypes[i].potential,5); k = find_match(1,potential_types,ff_atomtypes,&backwards); if (k < 0) { printf(" Unable to find mass for %s\n",atomtypes[i].potential); @@ -63,7 +63,7 @@ void GetParameters() for (i=0; i < no_atom_types; i++) { backwards = 0; for (j=0; j < 2; j++) atomtypes[i].params[j] = 0.0; - strncpy(potential_types[0],atomtypes[i].potential,5); + memcpy(potential_types[0],atomtypes[i].potential,5); k = find_match(1,potential_types,ff_vdw,&backwards); if (k < 0) { get_equivs(1,potential_types,equiv_types); @@ -101,7 +101,7 @@ void GetParameters() printf("\n Atom Types, Masses and VDW Parameters\n"); for (i=0; i < no_atom_types; i++) { printf(" %3s %8.4f %8.4f %8.4f\n", - atomtypes[i].potential,atomtypes[i].mass, atomtypes[i].params[0],atomtypes[i].params[1]); + atomtypes[i].potential,atomtypes[i].mass,atomtypes[i].params[0],atomtypes[i].params[1]); } } @@ -115,8 +115,7 @@ void GetParameters() backwards = 0; for (j=0; j < 4; j++) bondtypes[i].params[j] = 0.0; for (j=0; j < 2; j++) - strncpy(potential_types[j], - atomtypes[bondtypes[i].types[j]].potential,5); + memcpy(potential_types[j],atomtypes[bondtypes[i].types[j]].potential,5); k = find_match(2,potential_types,ff_bond,&backwards); if (k < 0) { get_equivs(2,potential_types,equiv_types); @@ -172,7 +171,7 @@ void GetParameters() backwards = 0; for (j=0; j < 4; j++) angletypes[i].params[j] = 0.0; for (j=0; j < 3; j++) - strncpy(potential_types[j],atomtypes[angletypes[i].types[j]].potential,5); + memcpy(potential_types[j],atomtypes[angletypes[i].types[j]].potential,5); k = find_match(3,potential_types,ff_ang,&backwards); if (k < 0) { get_equivs(3,potential_types,equiv_types); @@ -295,8 +294,7 @@ void GetParameters() for (j=0; j < 6; j++) dihedraltypes[i].params[j] = 0.0; for (j=0; j < 4; j++) - strncpy(potential_types[j], - atomtypes[dihedraltypes[i].types[j]].potential,5); + memcpy(potential_types[j],atomtypes[dihedraltypes[i].types[j]].potential,5); backwards = 0; k = find_match(4,potential_types,ff_tor,&backwards); @@ -614,8 +612,7 @@ void GetParameters() for (i=0; i < no_oop_types; i++) { for (j=0; j < 3; j++) ooptypes[i].params[j] = 0.0; for (j=0; j < 4; j++) - strncpy(potential_types[j], - atomtypes[ooptypes[i].types[j]].potential,5); + memcpy(potential_types[j],atomtypes[ooptypes[i].types[j]].potential,5); k = find_improper_body_data(potential_types,ff_oop,&rearrange); if (k < 0) { @@ -658,8 +655,7 @@ void GetParameters() for (j=0; j < 3; j++) ooptypes[i].params[j] = 0.0; for (j=0; j < 4; j++) - strncpy(potential_types[j], - atomtypes[ooptypes[i].types[j]].potential,5); + memcpy(potential_types[j],atomtypes[ooptypes[i].types[j]].potential,5); k = find_trigonal_body_data(potential_types,ff_oop); if (k < 0) { get_equivs(5,potential_types,equiv_types); @@ -715,8 +711,7 @@ void GetParameters() for (j=0; j < 6; j++) ooptypes[i].angleangle_params[j] = 0.0; for (j=0; j < 4; j++) - strncpy(potential_types[j], - atomtypes[ooptypes[i].types[j]].potential,5); + memcpy(potential_types[j],atomtypes[ooptypes[i].types[j]].potential,5); tabc = get_t0(ooptypes[i].types[0], @@ -763,8 +758,7 @@ void GetParameters() for (i=0; i < no_angleangle_types; i++) { for (j=0; j < 6; j++) angleangletypes[i].params[j] = 0.0; for (j=0; j < 4; j++) - strncpy(potential_types[j], - atomtypes[angleangletypes[i].types[j]].potential,5); + memcpy(potential_types[j],atomtypes[angleangletypes[i].types[j]].potential,5); tabc = get_t0(angleangletypes[i].types[0], angleangletypes[i].types[1], @@ -841,44 +835,44 @@ int find_improper_body_data(char types1[][5],struct FrcFieldItem item, /* a b d c */ *rearrange_ptr = 1; - strncpy(mirror_types[0],types1[0],5); - strncpy(mirror_types[1],types1[1],5); - strncpy(mirror_types[2],types1[3],5); - strncpy(mirror_types[3],types1[2],5); + memcpy(mirror_types[0],types1[0],5); + memcpy(mirror_types[1],types1[1],5); + memcpy(mirror_types[2],types1[3],5); + memcpy(mirror_types[3],types1[2],5); k = find_match(4,mirror_types,item,&backwards); if (k >= 0) return k; /* d b a c */ *rearrange_ptr = 2; - strncpy(mirror_types[0],types1[3],5); - strncpy(mirror_types[2],types1[0],5); - strncpy(mirror_types[3],types1[2],5); + memcpy(mirror_types[0],types1[3],5); + memcpy(mirror_types[2],types1[0],5); + memcpy(mirror_types[3],types1[2],5); k = find_match(4,mirror_types,item,&backwards); if (k >= 0) return k; /* d b c a */ *rearrange_ptr = 3; - strncpy(mirror_types[2],types1[2],5); - strncpy(mirror_types[3],types1[0],5); + memcpy(mirror_types[2],types1[2],5); + memcpy(mirror_types[3],types1[0],5); k = find_match(4,mirror_types,item,&backwards); if (k >= 0) return k; /* c b a d */ *rearrange_ptr = 4; - strncpy(mirror_types[0],types1[2],5); - strncpy(mirror_types[2],types1[0],5); - strncpy(mirror_types[3],types1[3],5); + memcpy(mirror_types[0],types1[2],5); + memcpy(mirror_types[2],types1[0],5); + memcpy(mirror_types[3],types1[3],5); k = find_match(4,mirror_types,item,&backwards); if (k >= 0) return k; /* c b d a */ *rearrange_ptr = 5; - strncpy(mirror_types[2],types1[3],5); - strncpy(mirror_types[3],types1[0],5); + memcpy(mirror_types[2],types1[3],5); + memcpy(mirror_types[3],types1[0],5); k = find_match(4,mirror_types,item,&backwards); return k; } @@ -973,39 +967,39 @@ int find_trigonal_body_data(char types1[][5],struct FrcFieldItem item) /* a b d c */ - strncpy(mirror_types[0],types1[0],5); - strncpy(mirror_types[1],types1[1],5); - strncpy(mirror_types[2],types1[3],5); - strncpy(mirror_types[3],types1[2],5); + memcpy(mirror_types[0],types1[0],5); + memcpy(mirror_types[1],types1[1],5); + memcpy(mirror_types[2],types1[3],5); + memcpy(mirror_types[3],types1[2],5); k = find_match(4,mirror_types,item,&backwards); if (k >= 0) return k; /* d b a c */ - strncpy(mirror_types[0],types1[3],5); - strncpy(mirror_types[2],types1[0],5); - strncpy(mirror_types[3],types1[2],5); + memcpy(mirror_types[0],types1[3],5); + memcpy(mirror_types[2],types1[0],5); + memcpy(mirror_types[3],types1[2],5); k = find_match(4,mirror_types,item,&backwards); if (k >= 0) return k; /* d b c a */ - strncpy(mirror_types[2],types1[2],5); - strncpy(mirror_types[3],types1[0],5); + memcpy(mirror_types[2],types1[2],5); + memcpy(mirror_types[3],types1[0],5); k = find_match(4,mirror_types,item,&backwards); if (k >= 0) return k; /* c b a d */ - strncpy(mirror_types[0],types1[2],5); - strncpy(mirror_types[2],types1[0],5); - strncpy(mirror_types[3],types1[3],5); + memcpy(mirror_types[0],types1[2],5); + memcpy(mirror_types[2],types1[0],5); + memcpy(mirror_types[3],types1[3],5); k = find_match(4,mirror_types,item,&backwards); if (k >= 0) return k; /* c b d a */ - strncpy(mirror_types[2],types1[3],5); - strncpy(mirror_types[3],types1[0],5); + memcpy(mirror_types[2],types1[3],5); + memcpy(mirror_types[3],types1[0],5); k = find_match(4,mirror_types,item,&backwards); return k; } @@ -1015,41 +1009,41 @@ int find_angleangle_data(char types1[][5],struct FrcFieldItem item,int kloc[3]) int k,backwards = -1; char mirror_types[4][5]; - strncpy(mirror_types[1],types1[1],5); + memcpy(mirror_types[1],types1[1],5); /* go for first parameter a b c d or d b c a */ k = find_match(4,types1,item,&backwards); if (k < 0) { - strncpy(mirror_types[0],types1[3],5); - strncpy(mirror_types[2],types1[2],5); - strncpy(mirror_types[3],types1[0],5); + memcpy(mirror_types[0],types1[3],5); + memcpy(mirror_types[2],types1[2],5); + memcpy(mirror_types[3],types1[0],5); k = find_match(4,mirror_types,item,&backwards); } kloc[0] = k; /* go for second parameter d b a c or c b a d */ - strncpy(mirror_types[0],types1[3],5); - strncpy(mirror_types[2],types1[0],5); - strncpy(mirror_types[3],types1[2],5); + memcpy(mirror_types[0],types1[3],5); + memcpy(mirror_types[2],types1[0],5); + memcpy(mirror_types[3],types1[2],5); k = find_match(4,mirror_types,item,&backwards); if (k < 0) { - strncpy(mirror_types[0],types1[2],5); - strncpy(mirror_types[3],types1[3],5); + memcpy(mirror_types[0],types1[2],5); + memcpy(mirror_types[3],types1[3],5); k = find_match(4,mirror_types,item,&backwards); } kloc[1] = k; /* go for third parameter a b d c or c b d a */ - strncpy(mirror_types[0],types1[0],5); - strncpy(mirror_types[2],types1[3],5); - strncpy(mirror_types[3],types1[2],5); + memcpy(mirror_types[0],types1[0],5); + memcpy(mirror_types[2],types1[3],5); + memcpy(mirror_types[3],types1[2],5); k = find_match(4,mirror_types,item,&backwards); if (k < 0) { - strncpy(mirror_types[0],types1[2],5); - strncpy(mirror_types[3],types1[0],5); + memcpy(mirror_types[0],types1[2],5); + memcpy(mirror_types[3],types1[0],5); k = find_match(4,mirror_types,item,&backwards); } kloc[2] = k; @@ -1250,25 +1244,25 @@ void get_equivs(int ic,char potential_types[][5],char equiv_types[][5]) switch (ic) { case 1: k = find_equiv_type(potential_types[0]); - if (k > -1) strncpy(equiv_types[0],equivalence.data[k].ff_types[1],5); + if (k > -1) memcpy(equiv_types[0],equivalence.data[k].ff_types[1],5); break; case 2: for (i=0; i < 2; i++) { k = find_equiv_type(potential_types[i]); - if (k > -1) strncpy(equiv_types[i],equivalence.data[k].ff_types[2],5); + if (k > -1) memcpy(equiv_types[i],equivalence.data[k].ff_types[2],5); } break; case 3: for (i=0; i < 3; i++) { k = find_equiv_type(potential_types[i]); - if (k > -1) strncpy(equiv_types[i],equivalence.data[k].ff_types[3],5); + if (k > -1) memcpy(equiv_types[i],equivalence.data[k].ff_types[3],5); } break; case 4: for (i=0; i < 4; i++) { k = find_equiv_type(potential_types[i]); - if (k > -1) strncpy(equiv_types[i],equivalence.data[k].ff_types[4],5); + if (k > -1) memcpy(equiv_types[i],equivalence.data[k].ff_types[4],5); } break; @@ -1276,7 +1270,7 @@ void get_equivs(int ic,char potential_types[][5],char equiv_types[][5]) for (i=0; i < 4; i++) { k = find_equiv_type(potential_types[i]); if (k > -1) - strncpy(equiv_types[i],equivalence.data[k].ff_types[5],5); + memcpy(equiv_types[i],equivalence.data[k].ff_types[5],5); } break; default: diff --git a/tools/msi2lmp/src/MakeLists.c b/tools/msi2lmp/src/MakeLists.c index 18b261a561..4f9a9f1548 100644 --- a/tools/msi2lmp/src/MakeLists.c +++ b/tools/msi2lmp/src/MakeLists.c @@ -476,7 +476,7 @@ void build_atomtypes_list() { int j,k,n,match,atom_type=0; - strncpy(atomtypes[0].potential,atoms[0].potential,5); + memcpy(atomtypes[0].potential,atoms[0].potential,5); atoms[0].type = 0; atomtypes[0].no_connect = atoms[0].no_connect; @@ -497,7 +497,7 @@ void build_atomtypes_list() if (match == 0) { atom_type = n; atomtypes[n].no_connect = atoms[j].no_connect; - strncpy(atomtypes[n++].potential,atoms[j].potential,5); + memcpy(atomtypes[n++].potential,atoms[j].potential,5); } if (n >= MAX_ATOM_TYPES) { fprintf(stderr,"Too many atom types (> 100) - error\n"); diff --git a/tools/msi2lmp/src/ReadMdfFile.c b/tools/msi2lmp/src/ReadMdfFile.c index 96a6a01ab2..253121d001 100644 --- a/tools/msi2lmp/src/ReadMdfFile.c +++ b/tools/msi2lmp/src/ReadMdfFile.c @@ -144,7 +144,7 @@ void ReadMdfFile(void) molecule[n].residue[j].end = i; molecule[n].residue[++j].start = i; - strncpy(molecule[n].residue[j].name,atoms[i].residue_string,MAX_NAME); + memcpy(molecule[n].residue[j].name,atoms[i].residue_string,MAX_NAME); } } molecule[n].residue[j].end = molecule[n].end; @@ -167,10 +167,9 @@ void ReadMdfFile(void) for (n=0; n < no_molecules; n++) { for (j=0; j < molecule[n].no_residues; j++) { - for (i=molecule[n].residue[j].start; i < molecule[n].residue[j].end; - i++) { + for (i=molecule[n].residue[j].start; i < molecule[n].residue[j].end; i++) { for (l=0; l < atoms[i].no_connect; l++) { - strncpy(temp_string,atoms[i].connections[l],MAX_STRING); + memcpy(temp_string,atoms[i].connections[l],MAX_STRING); temp_residue = strtok(temp_string,":"); temp_atom_name = strtok(NULL,"%"); diff --git a/tools/msi2lmp/src/SearchAndFill.c b/tools/msi2lmp/src/SearchAndFill.c index 35de0c81fe..a26554aeaa 100644 --- a/tools/msi2lmp/src/SearchAndFill.c +++ b/tools/msi2lmp/src/SearchAndFill.c @@ -212,7 +212,7 @@ void SearchAndFill(struct FrcFieldItem *item) item->data[replace].ver = version; item->data[replace].ref = reference; for (i=0; i < item->number_of_members; i++) { - strncpy(item->data[replace].ff_types[i],atom_types[i],5); + memcpy(item->data[replace].ff_types[i],atom_types[i],5); } for (i=0; i < item->number_of_parameters; i++) { item->data[replace].ff_param[i] = parameters[i]; @@ -230,7 +230,7 @@ void SearchAndFill(struct FrcFieldItem *item) item->data[ctr].ver = version; item->data[ctr].ref = reference; for (i=0; i < item->number_of_members; i++) { - strncpy(item->data[ctr].ff_types[i],atom_types[i],5); + memcpy(item->data[ctr].ff_types[i],atom_types[i],5); } for (i=0; i < item->number_of_parameters; i++) { item->data[ctr].ff_param[i] = parameters[i]; diff --git a/tools/msi2lmp/src/msi2lmp.c b/tools/msi2lmp/src/msi2lmp.c index 68aaf566b2..8228fd0f7f 100644 --- a/tools/msi2lmp/src/msi2lmp.c +++ b/tools/msi2lmp/src/msi2lmp.c @@ -2,6 +2,10 @@ * * msi2lmp.exe * +* v3.9.11 AK - Replace call to strncpy() with memcpy() when copying atom type strings +* to avoid problems with fixed array sizes +* - update tests for newer LAMMPS versions +* * v3.9.10 AK - Substitute UTF-8 characters in .frc files with known ASCII equivalents * - add help message output * diff --git a/tools/msi2lmp/src/msi2lmp.h b/tools/msi2lmp/src/msi2lmp.h index 3e1de85cbe..ca745bdc6e 100644 --- a/tools/msi2lmp/src/msi2lmp.h +++ b/tools/msi2lmp/src/msi2lmp.h @@ -36,7 +36,7 @@ #include /* IWYU pragma: export */ -#define MSI2LMP_VERSION "v3.9.10 / 10 Mar 2023" +#define MSI2LMP_VERSION "v3.9.11 / 6 Sep 2024" #define PI_180 0.01745329251994329576 diff --git a/tools/msi2lmp/test/data-compare.pl b/tools/msi2lmp/test/data-compare.pl index 7411f2a017..38bbed051d 100755 --- a/tools/msi2lmp/test/data-compare.pl +++ b/tools/msi2lmp/test/data-compare.pl @@ -2,11 +2,12 @@ # Tool to validate and compare two LAMMPS data files # with "inexact" floating point comparisons # July 2013 by Axel Kohlmeyer +# last update September 2024 by Axel Kohlmeyer use strict; use warnings; -my $version = 'v0.3'; +my $version = 'v0.4'; # delta for floating point comparisons. my $small = 1.0e-4; @@ -596,6 +597,26 @@ sub read_data { last; } + # apply sort + if ($data->{nbonds} > 1) { + my ($did_swap, $num) = (1, $data->{nbonds}); + while ($did_swap) { + $did_swap = 0; + for ($i=0; $i < $num-1; ++$i) { + $j = $i+1; + if (($data->{bond1}[$i] > $data->{bond1}[$j]) + or (($data->{bond1}[$i] == $data->{bond1}[$j]) + and ($data->{bond2}[$i] > $data->{bond2}[$j]))) { + $did_swap = 1; + my @tmp = ($data->{bondt}[$i], $data->{bond1}[$i], $data->{bond2}[$i]); + ($data->{bondt}[$i], $data->{bond1}[$i], $data->{bond2}[$i]) = + ($data->{bondt}[$j], $data->{bond1}[$j], $data->{bond2}[$j]); + ($data->{bondt}[$j], $data->{bond1}[$j], $data->{bond2}[$j]) = @tmp; + } + } + --$num; + } + } } elsif ($1 eq "Angles") { $data->{anglet} = []; $data->{angle1} = []; @@ -638,6 +659,33 @@ sub read_data { last; } + # apply sort + if ($data->{nangles} > 1) { + my ($did_swap, $num) = (1, $data->{nangles}); + while ($did_swap) { + $did_swap = 0; + for ($i=0; $i < $num-1; ++$i) { + $j = $i+1; + if (($data->{angle1}[$i] > $data->{angle1}[$j]) + or (($data->{angle1}[$i] == $data->{angle1}[$j]) + and ($data->{angle2}[$i] > $data->{angle2}[$j])) + or (($data->{angle1}[$i] == $data->{angle1}[$j]) + and ($data->{angle2}[$i] == $data->{angle2}[$j]) + and ($data->{angle3}[$i] > $data->{angle3}[$j]))) { + $did_swap = 1; + my @tmp = ($data->{anglet}[$i], $data->{angle1}[$i], + $data->{angle2}[$i], $data->{angle3}[$i]); + ($data->{anglet}[$i], $data->{angle1}[$i], + $data->{angle2}[$i], $data->{angle3}[$i]) = + ($data->{anglet}[$j], $data->{angle1}[$j], + $data->{angle2}[$j], $data->{angle3}[$j]); + ($data->{anglet}[$j], $data->{angle1}[$j], + $data->{angle2}[$j], $data->{angle3}[$j]) = @tmp; + } + } + --$num; + } + } } elsif ($1 eq "Dihedrals") { $data->{dihedralt} = []; $data->{dihedral1} = []; @@ -684,6 +732,38 @@ sub read_data { last; } + # apply sort + if ($data->{ndihedrals} > 1) { + my ($did_swap, $num) = (1, $data->{ndihedrals}); + while ($did_swap) { + $did_swap = 0; + for ($i=0; $i < $num-1; ++$i) { + $j = $i+1; + if (($data->{dihedral1}[$i] > $data->{dihedral1}[$j]) + or (($data->{dihedral1}[$i] == $data->{dihedral1}[$j]) + and ($data->{dihedral2}[$i] > $data->{dihedral2}[$j])) + or (($data->{dihedral1}[$i] == $data->{dihedral1}[$j]) + and ($data->{dihedral2}[$i] == $data->{dihedral2}[$j]) + and ($data->{dihedral3}[$i] > $data->{dihedral3}[$j])) + or (($data->{dihedral1}[$i] == $data->{dihedral1}[$j]) + and ($data->{dihedral2}[$i] == $data->{dihedral2}[$j]) + and ($data->{dihedral3}[$i] == $data->{dihedral3}[$j]) + and ($data->{dihedral4}[$i] > $data->{dihedral4}[$j]))) { + $did_swap = 1; + my @tmp = ($data->{dihedralt}[$i], $data->{dihedral1}[$i], + $data->{dihedral2}[$i], $data->{dihedral3}[$i], + $data->{dihedral4}[$i]); + ($data->{dihedralt}[$i], $data->{dihedral1}[$i], $data->{dihedral2}[$i], + $data->{dihedral3}[$i], $data->{dihedral4}[$i]) = + ($data->{dihedralt}[$j], $data->{dihedral1}[$j], + $data->{dihedral2}[$j], $data->{dihedral3}[$j], $data->{dihedral4}[$j]); + ($data->{dihedralt}[$j], $data->{dihedral1}[$j], $data->{dihedral2}[$j], + $data->{dihedral3}[$j], $data->{dihedral4}[$j]) = @tmp; + } + } + --$num; + } + } } elsif ($1 eq "Impropers") { $data->{impropert} = []; $data->{improper1} = []; @@ -730,6 +810,39 @@ sub read_data { last; } + # apply sort + if ($data->{nimpropers} > 1) { + my ($did_swap, $num) = (1, $data->{nimpropers}); + while ($did_swap) { + $did_swap = 0; + for ($i=0; $i < $num-1; ++$i) { + $j = $i+1; + if (($data->{improper1}[$i] > $data->{improper1}[$j]) + or (($data->{improper1}[$i] == $data->{improper1}[$j]) + and ($data->{improper2}[$i] > $data->{improper2}[$j])) + or (($data->{improper1}[$i] == $data->{improper1}[$j]) + and ($data->{improper2}[$i] == $data->{improper2}[$j]) + and ($data->{improper3}[$i] > $data->{improper3}[$j])) + or (($data->{improper1}[$i] == $data->{improper1}[$j]) + and ($data->{improper2}[$i] == $data->{improper2}[$j]) + and ($data->{improper3}[$i] == $data->{improper3}[$j]) + and ($data->{improper4}[$i] > $data->{improper4}[$j]))) { + $did_swap = 1; + my @tmp = ($data->{impropert}[$i], $data->{improper1}[$i], + $data->{improper2}[$i], $data->{improper3}[$i], + $data->{improper4}[$i]); + ($data->{impropert}[$i], $data->{improper1}[$i], $data->{improper2}[$i], + $data->{improper3}[$i], $data->{improper4}[$i]) = + ($data->{impropert}[$j], $data->{improper1}[$j], + $data->{improper2}[$j], $data->{improper3}[$j], $data->{improper4}[$j]); + ($data->{impropert}[$j], $data->{improper1}[$j], $data->{improper2}[$j], + $data->{improper3}[$j], $data->{improper4}[$j]) = @tmp; + } + } + --$num; + } + } + } else { die "Bad data: $_"; } diff --git a/tools/msi2lmp/test/in.PyAC_bulk-clayff b/tools/msi2lmp/test/in.PyAC_bulk-clayff index 1c6663a679..923891b920 100644 --- a/tools/msi2lmp/test/in.PyAC_bulk-clayff +++ b/tools/msi2lmp/test/in.PyAC_bulk-clayff @@ -5,9 +5,9 @@ atom_style full pair_style lj/cut/coul/long 15.0 pair_modify mix geometric bond_style harmonic -kspace_style pppm 1.0e-5 read_data PyAC_bulk-clayff.data +kspace_style pppm 1.0e-5 thermo_style multi minimize 0.0 0.0 100 1000 diff --git a/tools/msi2lmp/test/reference/PyAC_bulk-clayff.data b/tools/msi2lmp/test/reference/PyAC_bulk-clayff.data index 6b6602d69d..0a304ea296 100644 --- a/tools/msi2lmp/test/reference/PyAC_bulk-clayff.data +++ b/tools/msi2lmp/test/reference/PyAC_bulk-clayff.data @@ -1,4 +1,4 @@ -LAMMPS data file. msi2lmp v3.9.8 / 06 Oct 2016 / CGCMM for PyAC_bulk-clayff +LAMMPS data file. msi2lmp v3.9.10 / 10 Mar 2023 / CGCMM for PyAC_bulk-clayff 1280 atoms 128 bonds @@ -11,7 +11,7 @@ LAMMPS data file. msi2lmp v3.9.8 / 06 Oct 2016 / CGCMM for PyAC_bulk-clayff -10.320000000 10.320000000 xlo xhi -17.931646038 17.931646038 ylo yhi - -9.196614681 9.196614681 zlo zhi + -9.189871922 9.189871922 zlo zhi 0.225338675 -3.393877748 -0.363656523 xy xz yz Masses @@ -676,27 +676,27 @@ Atoms # full 638 1 3 -1.050000 -0.590722660 -5.885450799 -3.293650032 1 1 0 # ob 639 1 3 -1.050000 0.277898824 -8.390728187 -3.055632561 1 1 0 # ob 640 1 5 0.425000 -4.694842406 -6.184112754 -1.194847627 1 1 0 # ho - 641 1 1 1.575000 0.889889112 1.315464043 9.189872068 0 0 0 # ao - 642 1 2 2.100000 5.101961261 9.067732250 -6.523590700 0 0 1 # st - 643 1 2 2.100000 5.138292081 3.048848378 -6.517157818 0 0 1 # st - 644 1 3 -1.050000 4.852463935 0.176965538 -8.141927041 0 0 1 # ob - 645 1 3 -1.050000 5.291802919 2.921349398 -8.139170101 0 0 1 # ob - 646 1 4 -0.950000 2.692063605 1.889886595 -8.209932150 0 0 1 # oh - 647 1 3 -1.050000 1.366795516 3.605171499 -5.905112111 0 0 1 # ob - 648 1 3 -1.050000 4.839493963 1.584366125 -5.909707262 0 0 1 # ob - 649 1 3 -1.050000 3.970872479 4.089643514 -6.147724732 0 0 1 # ob - 650 1 5 0.425000 3.783613862 1.883028080 -8.008509666 0 0 1 # ho - 651 1 1 1.575000 3.498056417 5.798375353 9.189872068 0 0 0 # ao - 652 1 2 2.100000 2.493793956 4.584820940 -6.523590700 0 0 1 # st - 653 1 2 2.100000 2.586459538 7.531759689 -6.517157818 0 0 1 # st - 654 1 3 -1.050000 2.300631392 4.659876849 -8.141927041 0 0 1 # ob - 655 1 3 -1.050000 2.739970376 7.404260709 -8.139170101 0 0 1 # ob - 656 1 4 -0.950000 5.300230909 6.372797905 -8.209932150 0 0 1 # oh - 657 1 3 -1.050000 3.974962821 8.088082810 -5.905112111 0 0 1 # ob - 658 1 3 -1.050000 2.287661420 6.067277436 -5.909707262 0 0 1 # ob - 659 1 3 -1.050000 1.419039936 8.572554825 -6.147724732 0 0 1 # ob - 660 1 5 0.425000 6.391781167 6.365939391 -8.008509666 0 0 1 # ho - 661 1 1 1.575000 0.932567998 7.286701985 9.189872068 0 0 0 # ao + 641 1 1 1.575000 4.283766860 1.679120566 -9.189871776 0 0 1 # ao + 642 1 2 2.100000 5.101961261 9.067732250 -6.510105182 0 0 1 # st + 643 1 2 2.100000 5.138292081 3.048848378 -6.503672300 0 0 1 # st + 644 1 3 -1.050000 4.852463935 0.176965538 -8.128441523 0 0 1 # ob + 645 1 3 -1.050000 5.291802919 2.921349398 -8.125684583 0 0 1 # ob + 646 1 4 -0.950000 2.692063605 1.889886595 -8.196446632 0 0 1 # oh + 647 1 3 -1.050000 1.366795516 3.605171499 -5.891626593 0 0 1 # ob + 648 1 3 -1.050000 4.839493963 1.584366125 -5.896221744 0 0 1 # ob + 649 1 3 -1.050000 3.970872479 4.089643514 -6.134239214 0 0 1 # ob + 650 1 5 0.425000 3.783613862 1.883028080 -7.995024148 0 0 1 # ho + 651 1 1 1.575000 6.891934165 6.162031876 -9.189871776 0 0 1 # ao + 652 1 2 2.100000 2.493793956 4.584820940 -6.510105182 0 0 1 # st + 653 1 2 2.100000 2.586459538 7.531759689 -6.503672300 0 0 1 # st + 654 1 3 -1.050000 2.300631392 4.659876849 -8.128441523 0 0 1 # ob + 655 1 3 -1.050000 2.739970376 7.404260709 -8.125684583 0 0 1 # ob + 656 1 4 -0.950000 5.300230909 6.372797905 -8.196446632 0 0 1 # oh + 657 1 3 -1.050000 3.974962821 8.088082810 -5.891626593 0 0 1 # ob + 658 1 3 -1.050000 2.287661420 6.067277436 -5.896221744 0 0 1 # ob + 659 1 3 -1.050000 1.419039936 8.572554825 -6.134239214 0 0 1 # ob + 660 1 5 0.425000 6.391781167 6.365939391 -7.995024148 0 0 1 # ho + 661 1 1 1.575000 4.326445746 7.650358508 -9.189871776 0 0 1 # ao 662 1 2 2.100000 0.114373597 -0.101909699 6.510105475 0 0 0 # st 663 1 2 2.100000 0.078042778 5.916974173 6.503672592 0 0 0 # st 664 1 3 -1.050000 0.363870923 8.788857013 8.128441816 0 0 0 # ob @@ -706,7 +706,7 @@ Atoms # full 668 1 3 -1.050000 0.376840895 7.381456426 5.896222036 0 0 0 # ob 669 1 3 -1.050000 1.245462379 4.876179037 6.134239507 0 0 0 # ob 670 1 5 0.425000 1.432720996 7.082794471 7.995024441 0 0 0 # ho - 671 1 1 1.575000 -1.675599307 2.803790675 9.189872068 0 0 0 # ao + 671 1 1 1.575000 1.718278441 3.167447198 -9.189871776 0 0 1 # ao 672 1 2 2.100000 2.722540902 4.381001611 6.510105475 0 0 0 # st 673 1 2 2.100000 2.629875320 1.434062862 6.503672592 0 0 0 # st 674 1 3 -1.050000 2.915703466 4.305945702 8.128441816 0 0 0 # ob @@ -716,27 +716,27 @@ Atoms # full 678 1 3 -1.050000 2.928673438 2.898545115 5.896222036 0 0 0 # ob 679 1 3 -1.050000 3.797294922 0.393267726 6.134239507 0 0 0 # ob 680 1 5 0.425000 -1.175446309 2.599883160 7.995024441 0 0 0 # ho - 681 1 1 1.575000 6.049888960 1.315464043 9.189872068 0 0 0 # ao - 682 1 2 2.100000 -10.378038892 9.067732250 -6.523590700 1 0 1 # st - 683 1 2 2.100000 -10.341708072 3.048848378 -6.517157818 1 0 1 # st - 684 1 3 -1.050000 10.012463782 0.176965538 -8.141927041 0 0 1 # ob - 685 1 3 -1.050000 -10.188197233 2.921349398 -8.139170101 1 0 1 # ob - 686 1 4 -0.950000 7.852063452 1.889886595 -8.209932150 0 0 1 # oh - 687 1 3 -1.050000 6.526795364 3.605171499 -5.905112111 0 0 1 # ob - 688 1 3 -1.050000 -10.640506189 1.584366125 -5.909707262 1 0 1 # ob - 689 1 3 -1.050000 9.130872326 4.089643514 -6.147724732 0 0 1 # ob - 690 1 5 0.425000 8.943613710 1.883028080 -8.008509666 0 0 1 # ho - 691 1 1 1.575000 -11.981943736 5.798375353 9.189872068 1 0 0 # ao - 692 1 2 2.100000 7.653793804 4.584820940 -6.523590700 0 0 1 # st - 693 1 2 2.100000 7.746459385 7.531759689 -6.517157818 0 0 1 # st - 694 1 3 -1.050000 7.460631240 4.659876849 -8.141927041 0 0 1 # ob - 695 1 3 -1.050000 7.899970224 7.404260709 -8.139170101 0 0 1 # ob - 696 1 4 -0.950000 -10.179769243 6.372797905 -8.209932150 1 0 1 # oh - 697 1 3 -1.050000 9.134962668 8.088082810 -5.905112111 0 0 1 # ob - 698 1 3 -1.050000 7.447661268 6.067277436 -5.909707262 0 0 1 # ob - 699 1 3 -1.050000 6.579039784 8.572554825 -6.147724732 0 0 1 # ob - 700 1 5 0.425000 -9.088218986 6.365939391 -8.008509666 1 0 1 # ho - 701 1 1 1.575000 6.092567845 7.286701985 9.189872068 0 0 0 # ao + 681 1 1 1.575000 9.443766708 1.679120566 -9.189871776 0 0 1 # ao + 682 1 2 2.100000 -10.378038892 9.067732250 -6.510105182 1 0 1 # st + 683 1 2 2.100000 -10.341708072 3.048848378 -6.503672300 1 0 1 # st + 684 1 3 -1.050000 10.012463782 0.176965538 -8.128441523 0 0 1 # ob + 685 1 3 -1.050000 -10.188197233 2.921349398 -8.125684583 1 0 1 # ob + 686 1 4 -0.950000 7.852063452 1.889886595 -8.196446632 0 0 1 # oh + 687 1 3 -1.050000 6.526795364 3.605171499 -5.891626593 0 0 1 # ob + 688 1 3 -1.050000 -10.640506189 1.584366125 -5.896221744 1 0 1 # ob + 689 1 3 -1.050000 9.130872326 4.089643514 -6.134239214 0 0 1 # ob + 690 1 5 0.425000 8.943613710 1.883028080 -7.995024148 0 0 1 # ho + 691 1 1 1.575000 -8.588065988 6.162031876 -9.189871776 1 0 1 # ao + 692 1 2 2.100000 7.653793804 4.584820940 -6.510105182 0 0 1 # st + 693 1 2 2.100000 7.746459385 7.531759689 -6.503672300 0 0 1 # st + 694 1 3 -1.050000 7.460631240 4.659876849 -8.128441523 0 0 1 # ob + 695 1 3 -1.050000 7.899970224 7.404260709 -8.125684583 0 0 1 # ob + 696 1 4 -0.950000 -10.179769243 6.372797905 -8.196446632 1 0 1 # oh + 697 1 3 -1.050000 9.134962668 8.088082810 -5.891626593 0 0 1 # ob + 698 1 3 -1.050000 7.447661268 6.067277436 -5.896221744 0 0 1 # ob + 699 1 3 -1.050000 6.579039784 8.572554825 -6.134239214 0 0 1 # ob + 700 1 5 0.425000 -9.088218986 6.365939391 -7.995024148 1 0 1 # ho + 701 1 1 1.575000 9.486445593 7.650358508 -9.189871776 0 0 1 # ao 702 1 2 2.100000 5.274373445 -0.101909699 6.510105475 0 0 0 # st 703 1 2 2.100000 5.238042625 5.916974173 6.503672592 0 0 0 # st 704 1 3 -1.050000 5.523870771 8.788857013 8.128441816 0 0 0 # ob @@ -746,7 +746,7 @@ Atoms # full 708 1 3 -1.050000 5.536840742 7.381456426 5.896222036 0 0 0 # ob 709 1 3 -1.050000 6.405462227 4.876179037 6.134239507 0 0 0 # ob 710 1 5 0.425000 6.592720843 7.082794471 7.995024441 0 0 0 # ho - 711 1 1 1.575000 3.484400541 2.803790675 9.189872068 0 0 0 # ao + 711 1 1 1.575000 6.878278289 3.167447198 -9.189871776 0 0 1 # ao 712 1 2 2.100000 -12.757459251 4.381001611 6.510105475 1 0 0 # st 713 1 2 2.100000 -12.850124832 1.434062862 6.503672592 1 0 0 # st 714 1 3 -1.050000 -12.564296687 4.305945702 8.128441816 1 0 0 # ob @@ -756,27 +756,27 @@ Atoms # full 718 1 3 -1.050000 -12.551326715 2.898545115 5.896222036 1 0 0 # ob 719 1 3 -1.050000 -11.682705231 0.393267726 6.134239507 1 0 0 # ob 720 1 5 0.425000 3.984553539 2.599883160 7.995024441 0 0 0 # ho - 721 1 1 1.575000 -9.430111193 1.315464043 9.189872068 1 0 0 # ao - 722 1 2 2.100000 -5.218039044 9.067732250 -6.523590700 1 0 1 # st - 723 1 2 2.100000 -5.181708225 3.048848378 -6.517157818 1 0 1 # st - 724 1 3 -1.050000 -5.467536370 0.176965538 -8.141927041 1 0 1 # ob - 725 1 3 -1.050000 -5.028197386 2.921349398 -8.139170101 1 0 1 # ob - 726 1 4 -0.950000 -7.627936701 1.889886595 -8.209932150 1 0 1 # oh - 727 1 3 -1.050000 -8.953204789 3.605171499 -5.905112111 1 0 1 # ob - 728 1 3 -1.050000 -5.480506342 1.584366125 -5.909707262 1 0 1 # ob - 729 1 3 -1.050000 -6.349127826 4.089643514 -6.147724732 1 0 1 # ob - 730 1 5 0.425000 -6.536386443 1.883028080 -8.008509666 1 0 1 # ho - 731 1 1 1.575000 -6.821943888 5.798375353 9.189872068 1 0 0 # ao - 732 1 2 2.100000 -7.826206349 4.584820940 -6.523590700 1 0 1 # st - 733 1 2 2.100000 -7.733540767 7.531759689 -6.517157818 1 0 1 # st - 734 1 3 -1.050000 -8.019368913 4.659876849 -8.141927041 1 0 1 # ob - 735 1 3 -1.050000 -7.580029929 7.404260709 -8.139170101 1 0 1 # ob - 736 1 4 -0.950000 -5.019769396 6.372797905 -8.209932150 1 0 1 # oh - 737 1 3 -1.050000 -6.345037484 8.088082810 -5.905112111 1 0 1 # ob - 738 1 3 -1.050000 -8.032338885 6.067277436 -5.909707262 1 0 1 # ob - 739 1 3 -1.050000 -8.900960369 8.572554825 -6.147724732 1 0 1 # ob - 740 1 5 0.425000 -3.928219138 6.365939391 -8.008509666 1 0 1 # ho - 741 1 1 1.575000 -9.387432307 7.286701985 9.189872068 1 0 0 # ao + 721 1 1 1.575000 -6.036233445 1.679120566 -9.189871776 1 0 1 # ao + 722 1 2 2.100000 -5.218039044 9.067732250 -6.510105182 1 0 1 # st + 723 1 2 2.100000 -5.181708225 3.048848378 -6.503672300 1 0 1 # st + 724 1 3 -1.050000 -5.467536370 0.176965538 -8.128441523 1 0 1 # ob + 725 1 3 -1.050000 -5.028197386 2.921349398 -8.125684583 1 0 1 # ob + 726 1 4 -0.950000 -7.627936701 1.889886595 -8.196446632 1 0 1 # oh + 727 1 3 -1.050000 -8.953204789 3.605171499 -5.891626593 1 0 1 # ob + 728 1 3 -1.050000 -5.480506342 1.584366125 -5.896221744 1 0 1 # ob + 729 1 3 -1.050000 -6.349127826 4.089643514 -6.134239214 1 0 1 # ob + 730 1 5 0.425000 -6.536386443 1.883028080 -7.995024148 1 0 1 # ho + 731 1 1 1.575000 -3.428066140 6.162031876 -9.189871776 1 0 1 # ao + 732 1 2 2.100000 -7.826206349 4.584820940 -6.510105182 1 0 1 # st + 733 1 2 2.100000 -7.733540767 7.531759689 -6.503672300 1 0 1 # st + 734 1 3 -1.050000 -8.019368913 4.659876849 -8.128441523 1 0 1 # ob + 735 1 3 -1.050000 -7.580029929 7.404260709 -8.125684583 1 0 1 # ob + 736 1 4 -0.950000 -5.019769396 6.372797905 -8.196446632 1 0 1 # oh + 737 1 3 -1.050000 -6.345037484 8.088082810 -5.891626593 1 0 1 # ob + 738 1 3 -1.050000 -8.032338885 6.067277436 -5.896221744 1 0 1 # ob + 739 1 3 -1.050000 -8.900960369 8.572554825 -6.134239214 1 0 1 # ob + 740 1 5 0.425000 -3.928219138 6.365939391 -7.995024148 1 0 1 # ho + 741 1 1 1.575000 -5.993554559 7.650358508 -9.189871776 1 0 1 # ao 742 1 2 2.100000 -10.205626708 -0.101909699 6.510105475 1 0 0 # st 743 1 2 2.100000 -10.241957528 5.916974173 6.503672592 1 0 0 # st 744 1 3 -1.050000 -9.956129382 8.788857013 8.128441816 1 0 0 # ob @@ -786,7 +786,7 @@ Atoms # full 748 1 3 -1.050000 -9.943159410 7.381456426 5.896222036 1 0 0 # ob 749 1 3 -1.050000 -9.074537926 4.876179037 6.134239507 1 0 0 # ob 750 1 5 0.425000 -8.887279309 7.082794471 7.995024441 1 0 0 # ho - 751 1 1 1.575000 -11.995599612 2.803790675 9.189872068 1 0 0 # ao + 751 1 1 1.575000 -8.601721864 3.167447198 -9.189871776 1 0 1 # ao 752 1 2 2.100000 -7.597459403 4.381001611 6.510105475 1 0 0 # st 753 1 2 2.100000 -7.690124985 1.434062862 6.503672592 1 0 0 # st 754 1 3 -1.050000 -7.404296839 4.305945702 8.128441816 1 0 0 # ob @@ -796,27 +796,27 @@ Atoms # full 758 1 3 -1.050000 -7.391326867 2.898545115 5.896222036 1 0 0 # ob 759 1 3 -1.050000 -6.522705383 0.393267726 6.134239507 1 0 0 # ob 760 1 5 0.425000 -11.495446614 2.599883160 7.995024441 1 0 0 # ho - 761 1 1 1.575000 -4.270111345 1.315464043 9.189872068 1 0 0 # ao - 762 1 2 2.100000 -0.058039197 9.067732250 -6.523590700 1 0 1 # st - 763 1 2 2.100000 -0.021708377 3.048848378 -6.517157818 1 0 1 # st - 764 1 3 -1.050000 -0.307536523 0.176965538 -8.141927041 1 0 1 # ob - 765 1 3 -1.050000 0.131802461 2.921349398 -8.139170101 1 0 1 # ob - 766 1 4 -0.950000 -2.467936853 1.889886595 -8.209932150 1 0 1 # oh - 767 1 3 -1.050000 -3.793204941 3.605171499 -5.905112111 1 0 1 # ob - 768 1 3 -1.050000 -0.320506495 1.584366125 -5.909707262 1 0 1 # ob - 769 1 3 -1.050000 -1.189127979 4.089643514 -6.147724732 1 0 1 # ob - 770 1 5 0.425000 -1.376386596 1.883028080 -8.008509666 1 0 1 # ho - 771 1 1 1.575000 -1.661944041 5.798375353 9.189872068 1 0 0 # ao - 772 1 2 2.100000 -2.666206502 4.584820940 -6.523590700 1 0 1 # st - 773 1 2 2.100000 -2.573540920 7.531759689 -6.517157818 1 0 1 # st - 774 1 3 -1.050000 -2.859369065 4.659876849 -8.141927041 1 0 1 # ob - 775 1 3 -1.050000 -2.420030081 7.404260709 -8.139170101 1 0 1 # ob - 776 1 4 -0.950000 0.140230451 6.372797905 -8.209932150 1 0 1 # oh - 777 1 3 -1.050000 -1.185037637 8.088082810 -5.905112111 1 0 1 # ob - 778 1 3 -1.050000 -2.872339037 6.067277436 -5.909707262 1 0 1 # ob - 779 1 3 -1.050000 -3.740960522 8.572554825 -6.147724732 1 0 1 # ob - 780 1 5 0.425000 1.231780709 6.365939391 -8.008509666 1 0 1 # ho - 781 1 1 1.575000 -4.227432460 7.286701985 9.189872068 1 0 0 # ao + 761 1 1 1.575000 -0.876233597 1.679120566 -9.189871776 1 0 1 # ao + 762 1 2 2.100000 -0.058039197 9.067732250 -6.510105182 1 0 1 # st + 763 1 2 2.100000 -0.021708377 3.048848378 -6.503672300 1 0 1 # st + 764 1 3 -1.050000 -0.307536523 0.176965538 -8.128441523 1 0 1 # ob + 765 1 3 -1.050000 0.131802461 2.921349398 -8.125684583 1 0 1 # ob + 766 1 4 -0.950000 -2.467936853 1.889886595 -8.196446632 1 0 1 # oh + 767 1 3 -1.050000 -3.793204941 3.605171499 -5.891626593 1 0 1 # ob + 768 1 3 -1.050000 -0.320506495 1.584366125 -5.896221744 1 0 1 # ob + 769 1 3 -1.050000 -1.189127979 4.089643514 -6.134239214 1 0 1 # ob + 770 1 5 0.425000 -1.376386596 1.883028080 -7.995024148 1 0 1 # ho + 771 1 1 1.575000 1.731933707 6.162031876 -9.189871776 1 0 1 # ao + 772 1 2 2.100000 -2.666206502 4.584820940 -6.510105182 1 0 1 # st + 773 1 2 2.100000 -2.573540920 7.531759689 -6.503672300 1 0 1 # st + 774 1 3 -1.050000 -2.859369065 4.659876849 -8.128441523 1 0 1 # ob + 775 1 3 -1.050000 -2.420030081 7.404260709 -8.125684583 1 0 1 # ob + 776 1 4 -0.950000 0.140230451 6.372797905 -8.196446632 1 0 1 # oh + 777 1 3 -1.050000 -1.185037637 8.088082810 -5.891626593 1 0 1 # ob + 778 1 3 -1.050000 -2.872339037 6.067277436 -5.896221744 1 0 1 # ob + 779 1 3 -1.050000 -3.740960522 8.572554825 -6.134239214 1 0 1 # ob + 780 1 5 0.425000 1.231780709 6.365939391 -7.995024148 1 0 1 # ho + 781 1 1 1.575000 -0.833554712 7.650358508 -9.189871776 1 0 1 # ao 782 1 2 2.100000 -5.045626860 -0.101909699 6.510105475 1 0 0 # st 783 1 2 2.100000 -5.081957680 5.916974173 6.503672592 1 0 0 # st 784 1 3 -1.050000 -4.796129535 8.788857013 8.128441816 1 0 0 # ob @@ -826,7 +826,7 @@ Atoms # full 788 1 3 -1.050000 -4.783159563 7.381456426 5.896222036 1 0 0 # ob 789 1 3 -1.050000 -3.914538079 4.876179037 6.134239507 1 0 0 # ob 790 1 5 0.425000 -3.727279462 7.082794471 7.995024441 1 0 0 # ho - 791 1 1 1.575000 -6.835599765 2.803790675 9.189872068 1 0 0 # ao + 791 1 1 1.575000 -3.441722017 3.167447198 -9.189871776 1 0 1 # ao 792 1 2 2.100000 -2.437459556 4.381001611 6.510105475 1 0 0 # st 793 1 2 2.100000 -2.530125137 1.434062862 6.503672592 1 0 0 # st 794 1 3 -1.050000 -2.244296992 4.305945702 8.128441816 1 0 0 # ob @@ -836,27 +836,27 @@ Atoms # full 798 1 3 -1.050000 -2.231327020 2.898545115 5.896222036 1 0 0 # ob 799 1 3 -1.050000 -1.362705536 0.393267726 6.134239507 1 0 0 # ob 800 1 5 0.425000 -6.335446766 2.599883160 7.995024441 1 0 0 # ho - 801 1 1 1.575000 0.946223874 10.281286664 9.189872068 0 0 0 # ao - 802 1 2 2.100000 4.932957348 -17.829737203 -6.523590700 0 1 1 # st - 803 1 2 2.100000 5.194626842 12.014671000 -6.517157818 0 0 1 # st - 804 1 3 -1.050000 4.908798697 9.142788159 -8.141927041 0 0 1 # ob - 805 1 3 -1.050000 5.348137681 11.887172019 -8.139170101 0 0 1 # ob - 806 1 4 -0.950000 2.748398366 10.855709216 -8.209932150 0 0 1 # oh - 807 1 3 -1.050000 1.423130278 12.570994121 -5.905112111 0 0 1 # ob - 808 1 3 -1.050000 4.895828725 10.550188747 -5.909707262 0 0 1 # ob - 809 1 3 -1.050000 4.027207241 13.055466135 -6.147724732 0 0 1 # ob - 810 1 5 0.425000 3.839948624 10.848850702 -8.008509666 0 0 1 # ho - 811 1 1 1.575000 3.554391179 14.764197975 9.189872068 0 0 0 # ao - 812 1 2 2.100000 2.550128718 13.550643561 -6.523590700 0 0 1 # st - 813 1 2 2.100000 2.642794300 16.497582311 -6.517157818 0 0 1 # st - 814 1 3 -1.050000 2.356966154 13.625699470 -8.141927041 0 0 1 # ob - 815 1 3 -1.050000 2.796305138 16.370083330 -8.139170101 0 0 1 # ob - 816 1 4 -0.950000 5.356565671 15.338620527 -8.209932150 0 0 1 # oh - 817 1 3 -1.050000 4.031297583 17.053905432 -5.905112111 0 0 1 # ob - 818 1 3 -1.050000 2.343996182 15.033100058 -5.909707262 0 0 1 # ob - 819 1 3 -1.050000 1.475374698 17.538377446 -6.147724732 0 0 1 # ob - 820 1 5 0.425000 6.448115929 15.331762013 -8.008509666 0 0 1 # ho - 821 1 1 1.575000 0.988902760 16.252524607 9.189872068 0 0 0 # ao + 801 1 1 1.575000 4.340101622 10.644943187 -9.189871776 0 0 1 # ao + 802 1 2 2.100000 4.932957348 -17.829737203 -6.510105182 0 1 1 # st + 803 1 2 2.100000 5.194626842 12.014671000 -6.503672300 0 0 1 # st + 804 1 3 -1.050000 4.908798697 9.142788159 -8.128441523 0 0 1 # ob + 805 1 3 -1.050000 5.348137681 11.887172019 -8.125684583 0 0 1 # ob + 806 1 4 -0.950000 2.748398366 10.855709216 -8.196446632 0 0 1 # oh + 807 1 3 -1.050000 1.423130278 12.570994121 -5.891626593 0 0 1 # ob + 808 1 3 -1.050000 4.895828725 10.550188747 -5.896221744 0 0 1 # ob + 809 1 3 -1.050000 4.027207241 13.055466135 -6.134239214 0 0 1 # ob + 810 1 5 0.425000 3.839948624 10.848850702 -7.995024148 0 0 1 # ho + 811 1 1 1.575000 6.948268927 15.127854498 -9.189871776 0 0 1 # ao + 812 1 2 2.100000 2.550128718 13.550643561 -6.510105182 0 0 1 # st + 813 1 2 2.100000 2.642794300 16.497582311 -6.503672300 0 0 1 # st + 814 1 3 -1.050000 2.356966154 13.625699470 -8.128441523 0 0 1 # ob + 815 1 3 -1.050000 2.796305138 16.370083330 -8.125684583 0 0 1 # ob + 816 1 4 -0.950000 5.356565671 15.338620527 -8.196446632 0 0 1 # oh + 817 1 3 -1.050000 4.031297583 17.053905432 -5.891626593 0 0 1 # ob + 818 1 3 -1.050000 2.343996182 15.033100058 -5.896221744 0 0 1 # ob + 819 1 3 -1.050000 1.475374698 17.538377446 -6.134239214 0 0 1 # ob + 820 1 5 0.425000 6.448115929 15.331762013 -7.995024148 0 0 1 # ho + 821 1 1 1.575000 4.382780508 16.616181130 -9.189871776 0 0 1 # ao 822 1 2 2.100000 0.170708359 8.863912922 6.510105475 0 0 0 # st 823 1 2 2.100000 0.134377539 14.882796794 6.503672592 0 0 0 # st 824 1 3 -1.050000 0.194867010 -18.108612440 8.128441816 0 1 0 # ob @@ -866,7 +866,7 @@ Atoms # full 828 1 3 -1.050000 0.433175657 16.347279047 5.896222036 0 0 0 # ob 829 1 3 -1.050000 1.301797141 13.842001659 6.134239507 0 0 0 # ob 830 1 5 0.425000 1.489055758 16.048617092 7.995024441 0 0 0 # ho - 831 1 1 1.575000 -1.619264545 11.769613296 9.189872068 0 0 0 # ao + 831 1 1 1.575000 1.774613203 12.133269819 -9.189871776 0 0 1 # ao 832 1 2 2.100000 2.778875664 13.346824233 6.510105475 0 0 0 # st 833 1 2 2.100000 2.686210082 10.399885483 6.503672592 0 0 0 # st 834 1 3 -1.050000 2.972038228 13.271768324 8.128441816 0 0 0 # ob @@ -876,27 +876,27 @@ Atoms # full 838 1 3 -1.050000 2.985008200 11.864367737 5.896222036 0 0 0 # ob 839 1 3 -1.050000 3.853629684 9.359090348 6.134239507 0 0 0 # ob 840 1 5 0.425000 -1.119111547 11.565705782 7.995024441 0 0 0 # ho - 841 1 1 1.575000 6.106223722 10.281286664 9.189872068 0 0 0 # ao - 842 1 2 2.100000 -10.547042805 -17.829737203 -6.523590700 1 1 1 # st - 843 1 2 2.100000 -10.285373310 12.014671000 -6.517157818 1 0 1 # st - 844 1 3 -1.050000 10.068798544 9.142788159 -8.141927041 0 0 1 # ob - 845 1 3 -1.050000 -10.131862472 11.887172019 -8.139170101 1 0 1 # ob - 846 1 4 -0.950000 7.908398214 10.855709216 -8.209932150 0 0 1 # oh - 847 1 3 -1.050000 6.583130126 12.570994121 -5.905112111 0 0 1 # ob - 848 1 3 -1.050000 -10.584171428 10.550188747 -5.909707262 1 0 1 # ob - 849 1 3 -1.050000 9.187207088 13.055466135 -6.147724732 0 0 1 # ob - 850 1 5 0.425000 8.999948471 10.848850702 -8.008509666 0 0 1 # ho - 851 1 1 1.575000 -11.925608974 14.764197975 9.189872068 1 0 0 # ao - 852 1 2 2.100000 7.710128565 13.550643561 -6.523590700 0 0 1 # st - 853 1 2 2.100000 7.802794147 16.497582311 -6.517157818 0 0 1 # st - 854 1 3 -1.050000 7.516966002 13.625699470 -8.141927041 0 0 1 # ob - 855 1 3 -1.050000 7.956304986 16.370083330 -8.139170101 0 0 1 # ob - 856 1 4 -0.950000 -10.123434482 15.338620527 -8.209932150 1 0 1 # oh - 857 1 3 -1.050000 9.191297430 17.053905432 -5.905112111 0 0 1 # ob - 858 1 3 -1.050000 7.503996030 15.033100058 -5.909707262 0 0 1 # ob - 859 1 3 -1.050000 6.635374545 17.538377446 -6.147724732 0 0 1 # ob - 860 1 5 0.425000 -9.031884224 15.331762013 -8.008509666 1 0 1 # ho - 861 1 1 1.575000 6.148902607 16.252524607 9.189872068 0 0 0 # ao + 841 1 1 1.575000 9.500101470 10.644943187 -9.189871776 0 0 1 # ao + 842 1 2 2.100000 -10.547042805 -17.829737203 -6.510105182 1 1 1 # st + 843 1 2 2.100000 -10.285373310 12.014671000 -6.503672300 1 0 1 # st + 844 1 3 -1.050000 10.068798544 9.142788159 -8.128441523 0 0 1 # ob + 845 1 3 -1.050000 -10.131862472 11.887172019 -8.125684583 1 0 1 # ob + 846 1 4 -0.950000 7.908398214 10.855709216 -8.196446632 0 0 1 # oh + 847 1 3 -1.050000 6.583130126 12.570994121 -5.891626593 0 0 1 # ob + 848 1 3 -1.050000 -10.584171428 10.550188747 -5.896221744 1 0 1 # ob + 849 1 3 -1.050000 9.187207088 13.055466135 -6.134239214 0 0 1 # ob + 850 1 5 0.425000 8.999948471 10.848850702 -7.995024148 0 0 1 # ho + 851 1 1 1.575000 -8.531731226 15.127854498 -9.189871776 1 0 1 # ao + 852 1 2 2.100000 7.710128565 13.550643561 -6.510105182 0 0 1 # st + 853 1 2 2.100000 7.802794147 16.497582311 -6.503672300 0 0 1 # st + 854 1 3 -1.050000 7.516966002 13.625699470 -8.128441523 0 0 1 # ob + 855 1 3 -1.050000 7.956304986 16.370083330 -8.125684583 0 0 1 # ob + 856 1 4 -0.950000 -10.123434482 15.338620527 -8.196446632 1 0 1 # oh + 857 1 3 -1.050000 9.191297430 17.053905432 -5.891626593 0 0 1 # ob + 858 1 3 -1.050000 7.503996030 15.033100058 -5.896221744 0 0 1 # ob + 859 1 3 -1.050000 6.635374545 17.538377446 -6.134239214 0 0 1 # ob + 860 1 5 0.425000 -9.031884224 15.331762013 -7.995024148 1 0 1 # ho + 861 1 1 1.575000 9.542780355 16.616181130 -9.189871776 0 0 1 # ao 862 1 2 2.100000 5.330708207 8.863912922 6.510105475 0 0 0 # st 863 1 2 2.100000 5.294377387 14.882796794 6.503672592 0 0 0 # st 864 1 3 -1.050000 5.354866857 -18.108612440 8.128441816 0 1 0 # ob @@ -906,7 +906,7 @@ Atoms # full 868 1 3 -1.050000 5.593175504 16.347279047 5.896222036 0 0 0 # ob 869 1 3 -1.050000 6.461796988 13.842001659 6.134239507 0 0 0 # ob 870 1 5 0.425000 6.649055605 16.048617092 7.995024441 0 0 0 # ho - 871 1 1 1.575000 3.540735302 11.769613296 9.189872068 0 0 0 # ao + 871 1 1 1.575000 6.934613050 12.133269819 -9.189871776 0 0 1 # ao 872 1 2 2.100000 -12.701124489 13.346824233 6.510105475 1 0 0 # st 873 1 2 2.100000 -12.793790070 10.399885483 6.503672592 1 0 0 # st 874 1 3 -1.050000 -12.507961925 13.271768324 8.128441816 1 0 0 # ob @@ -916,27 +916,27 @@ Atoms # full 878 1 3 -1.050000 -12.494991953 11.864367737 5.896222036 1 0 0 # ob 879 1 3 -1.050000 -11.626370469 9.359090348 6.134239507 1 0 0 # ob 880 1 5 0.425000 4.040888301 11.565705782 7.995024441 0 0 0 # ho - 881 1 1 1.575000 -9.373776431 10.281286664 9.189872068 1 0 0 # ao - 882 1 2 2.100000 -5.387042958 -17.829737203 -6.523590700 1 1 1 # st - 883 1 2 2.100000 -5.125373463 12.014671000 -6.517157818 1 0 1 # st - 884 1 3 -1.050000 -5.411201608 9.142788159 -8.141927041 1 0 1 # ob - 885 1 3 -1.050000 -4.971862624 11.887172019 -8.139170101 1 0 1 # ob - 886 1 4 -0.950000 -7.571601939 10.855709216 -8.209932150 1 0 1 # oh - 887 1 3 -1.050000 -8.896870027 12.570994121 -5.905112111 1 0 1 # ob - 888 1 3 -1.050000 -5.424171580 10.550188747 -5.909707262 1 0 1 # ob - 889 1 3 -1.050000 -6.292793064 13.055466135 -6.147724732 1 0 1 # ob - 890 1 5 0.425000 -6.480051681 10.848850702 -8.008509666 1 0 1 # ho - 891 1 1 1.575000 -6.765609126 14.764197975 9.189872068 1 0 0 # ao - 892 1 2 2.100000 -7.769871587 13.550643561 -6.523590700 1 0 1 # st - 893 1 2 2.100000 -7.677206006 16.497582311 -6.517157818 1 0 1 # st - 894 1 3 -1.050000 -7.963034151 13.625699470 -8.141927041 1 0 1 # ob - 895 1 3 -1.050000 -7.523695167 16.370083330 -8.139170101 1 0 1 # ob - 896 1 4 -0.950000 -4.963434634 15.338620527 -8.209932150 1 0 1 # oh - 897 1 3 -1.050000 -6.288702722 17.053905432 -5.905112111 1 0 1 # ob - 898 1 3 -1.050000 -7.976004123 15.033100058 -5.909707262 1 0 1 # ob - 899 1 3 -1.050000 -8.844625607 17.538377446 -6.147724732 1 0 1 # ob - 900 1 5 0.425000 -3.871884377 15.331762013 -8.008509666 1 0 1 # ho - 901 1 1 1.575000 -9.331097546 16.252524607 9.189872068 1 0 0 # ao + 881 1 1 1.575000 -5.979898683 10.644943187 -9.189871776 1 0 1 # ao + 882 1 2 2.100000 -5.387042958 -17.829737203 -6.510105182 1 1 1 # st + 883 1 2 2.100000 -5.125373463 12.014671000 -6.503672300 1 0 1 # st + 884 1 3 -1.050000 -5.411201608 9.142788159 -8.128441523 1 0 1 # ob + 885 1 3 -1.050000 -4.971862624 11.887172019 -8.125684583 1 0 1 # ob + 886 1 4 -0.950000 -7.571601939 10.855709216 -8.196446632 1 0 1 # oh + 887 1 3 -1.050000 -8.896870027 12.570994121 -5.891626593 1 0 1 # ob + 888 1 3 -1.050000 -5.424171580 10.550188747 -5.896221744 1 0 1 # ob + 889 1 3 -1.050000 -6.292793064 13.055466135 -6.134239214 1 0 1 # ob + 890 1 5 0.425000 -6.480051681 10.848850702 -7.995024148 1 0 1 # ho + 891 1 1 1.575000 -3.371731378 15.127854498 -9.189871776 1 0 1 # ao + 892 1 2 2.100000 -7.769871587 13.550643561 -6.510105182 1 0 1 # st + 893 1 2 2.100000 -7.677206006 16.497582311 -6.503672300 1 0 1 # st + 894 1 3 -1.050000 -7.963034151 13.625699470 -8.128441523 1 0 1 # ob + 895 1 3 -1.050000 -7.523695167 16.370083330 -8.125684583 1 0 1 # ob + 896 1 4 -0.950000 -4.963434634 15.338620527 -8.196446632 1 0 1 # oh + 897 1 3 -1.050000 -6.288702722 17.053905432 -5.891626593 1 0 1 # ob + 898 1 3 -1.050000 -7.976004123 15.033100058 -5.896221744 1 0 1 # ob + 899 1 3 -1.050000 -8.844625607 17.538377446 -6.134239214 1 0 1 # ob + 900 1 5 0.425000 -3.871884377 15.331762013 -7.995024148 1 0 1 # ho + 901 1 1 1.575000 -5.937219798 16.616181130 -9.189871776 1 0 1 # ao 902 1 2 2.100000 -10.149291946 8.863912922 6.510105475 1 0 0 # st 903 1 2 2.100000 -10.185622766 14.882796794 6.503672592 1 0 0 # st 904 1 3 -1.050000 -10.125133295 -18.108612440 8.128441816 1 1 0 # ob @@ -946,7 +946,7 @@ Atoms # full 908 1 3 -1.050000 -9.886824648 16.347279047 5.896222036 1 0 0 # ob 909 1 3 -1.050000 -9.018203164 13.842001659 6.134239507 1 0 0 # ob 910 1 5 0.425000 -8.830944547 16.048617092 7.995024441 1 0 0 # ho - 911 1 1 1.575000 -11.939264850 11.769613296 9.189872068 1 0 0 # ao + 911 1 1 1.575000 -8.545387102 12.133269819 -9.189871776 1 0 1 # ao 912 1 2 2.100000 -7.541124641 13.346824233 6.510105475 1 0 0 # st 913 1 2 2.100000 -7.633790223 10.399885483 6.503672592 1 0 0 # st 914 1 3 -1.050000 -7.347962077 13.271768324 8.128441816 1 0 0 # ob @@ -956,27 +956,27 @@ Atoms # full 918 1 3 -1.050000 -7.334992106 11.864367737 5.896222036 1 0 0 # ob 919 1 3 -1.050000 -6.466370621 9.359090348 6.134239507 1 0 0 # ob 920 1 5 0.425000 -11.439111852 11.565705782 7.995024441 1 0 0 # ho - 921 1 1 1.575000 -4.213776583 10.281286664 9.189872068 1 0 0 # ao - 922 1 2 2.100000 -0.227043110 -17.829737203 -6.523590700 1 1 1 # st - 923 1 2 2.100000 0.034626385 12.014671000 -6.517157818 1 0 1 # st - 924 1 3 -1.050000 -0.251201761 9.142788159 -8.141927041 1 0 1 # ob - 925 1 3 -1.050000 0.188137223 11.887172019 -8.139170101 1 0 1 # ob - 926 1 4 -0.950000 -2.411602091 10.855709216 -8.209932150 1 0 1 # oh - 927 1 3 -1.050000 -3.736870180 12.570994121 -5.905112111 1 0 1 # ob - 928 1 3 -1.050000 -0.264171733 10.550188747 -5.909707262 1 0 1 # ob - 929 1 3 -1.050000 -1.132793217 13.055466135 -6.147724732 1 0 1 # ob - 930 1 5 0.425000 -1.320051834 10.848850702 -8.008509666 1 0 1 # ho - 931 1 1 1.575000 -1.605609279 14.764197975 9.189872068 1 0 0 # ao - 932 1 2 2.100000 -2.609871740 13.550643561 -6.523590700 1 0 1 # st - 933 1 2 2.100000 -2.517206158 16.497582311 -6.517157818 1 0 1 # st - 934 1 3 -1.050000 -2.803034304 13.625699470 -8.141927041 1 0 1 # ob - 935 1 3 -1.050000 -2.363695320 16.370083330 -8.139170101 1 0 1 # ob - 936 1 4 -0.950000 0.196565213 15.338620527 -8.209932150 1 0 1 # oh - 937 1 3 -1.050000 -1.128702875 17.053905432 -5.905112111 1 0 1 # ob - 938 1 3 -1.050000 -2.816004275 15.033100058 -5.909707262 1 0 1 # ob - 939 1 3 -1.050000 -3.684625760 17.538377446 -6.147724732 1 0 1 # ob - 940 1 5 0.425000 1.288115471 15.331762013 -8.008509666 1 0 1 # ho - 941 1 1 1.575000 -4.171097698 16.252524607 9.189872068 1 0 0 # ao + 921 1 1 1.575000 -0.819898835 10.644943187 -9.189871776 1 0 1 # ao + 922 1 2 2.100000 -0.227043110 -17.829737203 -6.510105182 1 1 1 # st + 923 1 2 2.100000 0.034626385 12.014671000 -6.503672300 1 0 1 # st + 924 1 3 -1.050000 -0.251201761 9.142788159 -8.128441523 1 0 1 # ob + 925 1 3 -1.050000 0.188137223 11.887172019 -8.125684583 1 0 1 # ob + 926 1 4 -0.950000 -2.411602091 10.855709216 -8.196446632 1 0 1 # oh + 927 1 3 -1.050000 -3.736870180 12.570994121 -5.891626593 1 0 1 # ob + 928 1 3 -1.050000 -0.264171733 10.550188747 -5.896221744 1 0 1 # ob + 929 1 3 -1.050000 -1.132793217 13.055466135 -6.134239214 1 0 1 # ob + 930 1 5 0.425000 -1.320051834 10.848850702 -7.995024148 1 0 1 # ho + 931 1 1 1.575000 1.788268469 15.127854498 -9.189871776 1 0 1 # ao + 932 1 2 2.100000 -2.609871740 13.550643561 -6.510105182 1 0 1 # st + 933 1 2 2.100000 -2.517206158 16.497582311 -6.503672300 1 0 1 # st + 934 1 3 -1.050000 -2.803034304 13.625699470 -8.128441523 1 0 1 # ob + 935 1 3 -1.050000 -2.363695320 16.370083330 -8.125684583 1 0 1 # ob + 936 1 4 -0.950000 0.196565213 15.338620527 -8.196446632 1 0 1 # oh + 937 1 3 -1.050000 -1.128702875 17.053905432 -5.891626593 1 0 1 # ob + 938 1 3 -1.050000 -2.816004275 15.033100058 -5.896221744 1 0 1 # ob + 939 1 3 -1.050000 -3.684625760 17.538377446 -6.134239214 1 0 1 # ob + 940 1 5 0.425000 1.288115471 15.331762013 -7.995024148 1 0 1 # ho + 941 1 1 1.575000 -0.777219950 16.616181130 -9.189871776 1 0 1 # ao 942 1 2 2.100000 -4.989292099 8.863912922 6.510105475 1 0 0 # st 943 1 2 2.100000 -5.025622918 14.882796794 6.503672592 1 0 0 # st 944 1 3 -1.050000 -4.965133448 -18.108612440 8.128441816 1 1 0 # ob @@ -986,7 +986,7 @@ Atoms # full 948 1 3 -1.050000 -4.726824801 16.347279047 5.896222036 1 0 0 # ob 949 1 3 -1.050000 -3.858203317 13.842001659 6.134239507 1 0 0 # ob 950 1 5 0.425000 -3.670944700 16.048617092 7.995024441 1 0 0 # ho - 951 1 1 1.575000 -6.779265003 11.769613296 9.189872068 1 0 0 # ao + 951 1 1 1.575000 -3.385387255 12.133269819 -9.189871776 1 0 1 # ao 952 1 2 2.100000 -2.381124794 13.346824233 6.510105475 1 0 0 # st 953 1 2 2.100000 -2.473790376 10.399885483 6.503672592 1 0 0 # st 954 1 3 -1.050000 -2.187962230 13.271768324 8.128441816 1 0 0 # ob @@ -996,27 +996,27 @@ Atoms # full 958 1 3 -1.050000 -2.174992258 11.864367737 5.896222036 1 0 0 # ob 959 1 3 -1.050000 -1.306370774 9.359090348 6.134239507 1 0 0 # ob 960 1 5 0.425000 -6.279112005 11.565705782 7.995024441 1 0 0 # ho - 961 1 1 1.575000 0.777219961 -16.616182789 9.189872068 0 1 0 # ao - 962 1 2 2.100000 4.989292109 -8.863914582 -6.523590700 0 1 1 # st - 963 1 2 2.100000 5.025622929 -14.882798454 -6.517157818 0 1 1 # st - 964 1 3 -1.050000 4.739794784 -17.754681294 -8.141927041 0 1 1 # ob - 965 1 3 -1.050000 5.179133768 -15.010297434 -8.139170101 0 1 1 # ob - 966 1 4 -0.950000 2.579394453 -16.041760237 -8.209932150 0 1 1 # oh - 967 1 3 -1.050000 1.254126365 -14.326475333 -5.905112111 0 1 1 # ob - 968 1 3 -1.050000 4.726824812 -16.347280707 -5.909707262 0 1 1 # ob - 969 1 3 -1.050000 3.858203328 -13.842003318 -6.147724732 0 1 1 # ob - 970 1 5 0.425000 3.670944711 -16.048618752 -8.008509666 0 1 1 # ho - 971 1 1 1.575000 3.385387266 -12.133271479 9.189872068 0 1 0 # ao - 972 1 2 2.100000 2.381124805 -13.346825892 -6.523590700 0 1 1 # st - 973 1 2 2.100000 2.473790386 -10.399887143 -6.517157818 0 1 1 # st - 974 1 3 -1.050000 2.187962241 -13.271769983 -8.141927041 0 1 1 # ob - 975 1 3 -1.050000 2.627301225 -10.527386123 -8.139170101 0 1 1 # ob - 976 1 4 -0.950000 5.187561758 -11.558848927 -8.209932150 0 1 1 # oh - 977 1 3 -1.050000 3.862293670 -9.843564022 -5.905112111 0 1 1 # ob - 978 1 3 -1.050000 2.174992269 -11.864369396 -5.909707262 0 1 1 # ob - 979 1 3 -1.050000 1.306370785 -9.359092007 -6.147724732 0 1 1 # ob - 980 1 5 0.425000 6.279112015 -11.565707441 -8.008509666 0 1 1 # ho - 981 1 1 1.575000 0.819898846 -10.644944847 9.189872068 0 1 0 # ao + 961 1 1 1.575000 4.171097709 -16.252526266 -9.189871776 0 1 1 # ao + 962 1 2 2.100000 4.989292109 -8.863914582 -6.510105182 0 1 1 # st + 963 1 2 2.100000 5.025622929 -14.882798454 -6.503672300 0 1 1 # st + 964 1 3 -1.050000 4.739794784 -17.754681294 -8.128441523 0 1 1 # ob + 965 1 3 -1.050000 5.179133768 -15.010297434 -8.125684583 0 1 1 # ob + 966 1 4 -0.950000 2.579394453 -16.041760237 -8.196446632 0 1 1 # oh + 967 1 3 -1.050000 1.254126365 -14.326475333 -5.891626593 0 1 1 # ob + 968 1 3 -1.050000 4.726824812 -16.347280707 -5.896221744 0 1 1 # ob + 969 1 3 -1.050000 3.858203328 -13.842003318 -6.134239214 0 1 1 # ob + 970 1 5 0.425000 3.670944711 -16.048618752 -7.995024148 0 1 1 # ho + 971 1 1 1.575000 6.779265014 -11.769614956 -9.189871776 0 1 1 # ao + 972 1 2 2.100000 2.381124805 -13.346825892 -6.510105182 0 1 1 # st + 973 1 2 2.100000 2.473790386 -10.399887143 -6.503672300 0 1 1 # st + 974 1 3 -1.050000 2.187962241 -13.271769983 -8.128441523 0 1 1 # ob + 975 1 3 -1.050000 2.627301225 -10.527386123 -8.125684583 0 1 1 # ob + 976 1 4 -0.950000 5.187561758 -11.558848927 -8.196446632 0 1 1 # oh + 977 1 3 -1.050000 3.862293670 -9.843564022 -5.891626593 0 1 1 # ob + 978 1 3 -1.050000 2.174992269 -11.864369396 -5.896221744 0 1 1 # ob + 979 1 3 -1.050000 1.306370785 -9.359092007 -6.134239214 0 1 1 # ob + 980 1 5 0.425000 6.279112015 -11.565707441 -7.995024148 0 1 1 # ho + 981 1 1 1.575000 4.213776594 -10.281288324 -9.189871776 0 1 1 # ao 982 1 2 2.100000 0.001704446 -18.033556531 6.510105475 0 1 0 # st 983 1 2 2.100000 -0.034626374 -12.014672659 6.503672592 0 1 0 # st 984 1 3 -1.050000 0.251201772 -9.142789819 8.128441816 0 1 0 # ob @@ -1026,7 +1026,7 @@ Atoms # full 988 1 3 -1.050000 0.264171744 -10.550190406 5.896222036 0 1 0 # ob 989 1 3 -1.050000 1.132793228 -13.055467795 6.134239507 0 1 0 # ob 990 1 5 0.425000 1.320051845 -10.848852361 7.995024441 0 1 0 # ho - 991 1 1 1.575000 -1.788268458 -15.127856157 9.189872068 0 1 0 # ao + 991 1 1 1.575000 1.605609290 -14.764199634 -9.189871776 0 1 1 # ao 992 1 2 2.100000 2.609871751 -13.550645221 6.510105475 0 1 0 # st 993 1 2 2.100000 2.517206169 -16.497583970 6.503672592 0 1 0 # st 994 1 3 -1.050000 2.803034315 -13.625701130 8.128441816 0 1 0 # ob @@ -1036,27 +1036,27 @@ Atoms # full 998 1 3 -1.050000 2.816004286 -15.033101717 5.896222036 0 1 0 # ob 999 1 3 -1.050000 3.684625771 -17.538379106 6.134239507 0 1 0 # ob 1000 1 5 0.425000 -1.288115460 -15.331763672 7.995024441 0 1 0 # ho - 1001 1 1 1.575000 5.937219808 -16.616182789 9.189872068 0 1 0 # ao - 1002 1 2 2.100000 -10.490708043 -8.863914582 -6.523590700 1 1 1 # st - 1003 1 2 2.100000 -10.454377223 -14.882798454 -6.517157818 1 1 1 # st - 1004 1 3 -1.050000 9.899794631 -17.754681294 -8.141927041 0 1 1 # ob - 1005 1 3 -1.050000 -10.300866385 -15.010297434 -8.139170101 1 1 1 # ob - 1006 1 4 -0.950000 7.739394301 -16.041760237 -8.209932150 0 1 1 # oh - 1007 1 3 -1.050000 6.414126212 -14.326475333 -5.905112111 0 1 1 # ob - 1008 1 3 -1.050000 -10.753175341 -16.347280707 -5.909707262 1 1 1 # ob - 1009 1 3 -1.050000 9.018203175 -13.842003318 -6.147724732 0 1 1 # ob - 1010 1 5 0.425000 8.830944558 -16.048618752 -8.008509666 0 1 1 # ho - 1011 1 1 1.575000 -12.094612887 -12.133271479 9.189872068 1 1 0 # ao - 1012 1 2 2.100000 7.541124652 -13.346825892 -6.523590700 0 1 1 # st - 1013 1 2 2.100000 7.633790234 -10.399887143 -6.517157818 0 1 1 # st - 1014 1 3 -1.050000 7.347962088 -13.271769983 -8.141927041 0 1 1 # ob - 1015 1 3 -1.050000 7.787301072 -10.527386123 -8.139170101 0 1 1 # ob - 1016 1 4 -0.950000 -10.292438395 -11.558848927 -8.209932150 1 1 1 # oh - 1017 1 3 -1.050000 9.022293517 -9.843564022 -5.905112111 0 1 1 # ob - 1018 1 3 -1.050000 7.334992116 -11.864369396 -5.909707262 0 1 1 # ob - 1019 1 3 -1.050000 6.466370632 -9.359092007 -6.147724732 0 1 1 # ob - 1020 1 5 0.425000 -9.200888137 -11.565707441 -8.008509666 1 1 1 # ho - 1021 1 1 1.575000 5.979898694 -10.644944847 9.189872068 0 1 0 # ao + 1001 1 1 1.575000 9.331097556 -16.252526266 -9.189871776 0 1 1 # ao + 1002 1 2 2.100000 -10.490708043 -8.863914582 -6.510105182 1 1 1 # st + 1003 1 2 2.100000 -10.454377223 -14.882798454 -6.503672300 1 1 1 # st + 1004 1 3 -1.050000 9.899794631 -17.754681294 -8.128441523 0 1 1 # ob + 1005 1 3 -1.050000 -10.300866385 -15.010297434 -8.125684583 1 1 1 # ob + 1006 1 4 -0.950000 7.739394301 -16.041760237 -8.196446632 0 1 1 # oh + 1007 1 3 -1.050000 6.414126212 -14.326475333 -5.891626593 0 1 1 # ob + 1008 1 3 -1.050000 -10.753175341 -16.347280707 -5.896221744 1 1 1 # ob + 1009 1 3 -1.050000 9.018203175 -13.842003318 -6.134239214 0 1 1 # ob + 1010 1 5 0.425000 8.830944558 -16.048618752 -7.995024148 0 1 1 # ho + 1011 1 1 1.575000 -8.700735139 -11.769614956 -9.189871776 1 1 1 # ao + 1012 1 2 2.100000 7.541124652 -13.346825892 -6.510105182 0 1 1 # st + 1013 1 2 2.100000 7.633790234 -10.399887143 -6.503672300 0 1 1 # st + 1014 1 3 -1.050000 7.347962088 -13.271769983 -8.128441523 0 1 1 # ob + 1015 1 3 -1.050000 7.787301072 -10.527386123 -8.125684583 0 1 1 # ob + 1016 1 4 -0.950000 -10.292438395 -11.558848927 -8.196446632 1 1 1 # oh + 1017 1 3 -1.050000 9.022293517 -9.843564022 -5.891626593 0 1 1 # ob + 1018 1 3 -1.050000 7.334992116 -11.864369396 -5.896221744 0 1 1 # ob + 1019 1 3 -1.050000 6.466370632 -9.359092007 -6.134239214 0 1 1 # ob + 1020 1 5 0.425000 -9.200888137 -11.565707441 -7.995024148 1 1 1 # ho + 1021 1 1 1.575000 9.373776442 -10.281288324 -9.189871776 0 1 1 # ao 1022 1 2 2.100000 5.161704293 -18.033556531 6.510105475 0 1 0 # st 1023 1 2 2.100000 5.125373474 -12.014672659 6.503672592 0 1 0 # st 1024 1 3 -1.050000 5.411201619 -9.142789819 8.128441816 0 1 0 # ob @@ -1066,7 +1066,7 @@ Atoms # full 1028 1 3 -1.050000 5.424171591 -10.550190406 5.896222036 0 1 0 # ob 1029 1 3 -1.050000 6.292793075 -13.055467795 6.134239507 0 1 0 # ob 1030 1 5 0.425000 6.480051692 -10.848852361 7.995024441 0 1 0 # ho - 1031 1 1 1.575000 3.371731389 -15.127856157 9.189872068 0 1 0 # ao + 1031 1 1 1.575000 6.765609137 -14.764199634 -9.189871776 0 1 1 # ao 1032 1 2 2.100000 -12.870128402 -13.550645221 6.510105475 1 1 0 # st 1033 1 2 2.100000 -12.962793984 -16.497583970 6.503672592 1 1 0 # st 1034 1 3 -1.050000 -12.676965838 -13.625701130 8.128441816 1 1 0 # ob @@ -1076,27 +1076,27 @@ Atoms # full 1038 1 3 -1.050000 -12.663995866 -15.033101717 5.896222036 1 1 0 # ob 1039 1 3 -1.050000 -11.795374382 -17.538379106 6.134239507 1 1 0 # ob 1040 1 5 0.425000 3.871884387 -15.331763672 7.995024441 0 1 0 # ho - 1041 1 1 1.575000 -9.542780344 -16.616182789 9.189872068 1 1 0 # ao - 1042 1 2 2.100000 -5.330708196 -8.863914582 -6.523590700 1 1 1 # st - 1043 1 2 2.100000 -5.294377376 -14.882798454 -6.517157818 1 1 1 # st - 1044 1 3 -1.050000 -5.580205521 -17.754681294 -8.141927041 1 1 1 # ob - 1045 1 3 -1.050000 -5.140866537 -15.010297434 -8.139170101 1 1 1 # ob - 1046 1 4 -0.950000 -7.740605852 -16.041760237 -8.209932150 1 1 1 # oh - 1047 1 3 -1.050000 -9.065873940 -14.326475333 -5.905112111 1 1 1 # ob - 1048 1 3 -1.050000 -5.593175493 -16.347280707 -5.909707262 1 1 1 # ob - 1049 1 3 -1.050000 -6.461796978 -13.842003318 -6.147724732 1 1 1 # ob - 1050 1 5 0.425000 -6.649055594 -16.048618752 -8.008509666 1 1 1 # ho - 1051 1 1 1.575000 -6.934613039 -12.133271479 9.189872068 1 1 0 # ao - 1052 1 2 2.100000 -7.938875500 -13.346825892 -6.523590700 1 1 1 # st - 1053 1 2 2.100000 -7.846209919 -10.399887143 -6.517157818 1 1 1 # st - 1054 1 3 -1.050000 -8.132038064 -13.271769983 -8.141927041 1 1 1 # ob - 1055 1 3 -1.050000 -7.692699080 -10.527386123 -8.139170101 1 1 1 # ob - 1056 1 4 -0.950000 -5.132438547 -11.558848927 -8.209932150 1 1 1 # oh - 1057 1 3 -1.050000 -6.457706636 -9.843564022 -5.905112111 1 1 1 # ob - 1058 1 3 -1.050000 -8.145008036 -11.864369396 -5.909707262 1 1 1 # ob - 1059 1 3 -1.050000 -9.013629520 -9.359092007 -6.147724732 1 1 1 # ob - 1060 1 5 0.425000 -4.040888290 -11.565707441 -8.008509666 1 1 1 # ho - 1061 1 1 1.575000 -9.500101459 -10.644944847 9.189872068 1 1 0 # ao + 1041 1 1 1.575000 -6.148902596 -16.252526266 -9.189871776 1 1 1 # ao + 1042 1 2 2.100000 -5.330708196 -8.863914582 -6.510105182 1 1 1 # st + 1043 1 2 2.100000 -5.294377376 -14.882798454 -6.503672300 1 1 1 # st + 1044 1 3 -1.050000 -5.580205521 -17.754681294 -8.128441523 1 1 1 # ob + 1045 1 3 -1.050000 -5.140866537 -15.010297434 -8.125684583 1 1 1 # ob + 1046 1 4 -0.950000 -7.740605852 -16.041760237 -8.196446632 1 1 1 # oh + 1047 1 3 -1.050000 -9.065873940 -14.326475333 -5.891626593 1 1 1 # ob + 1048 1 3 -1.050000 -5.593175493 -16.347280707 -5.896221744 1 1 1 # ob + 1049 1 3 -1.050000 -6.461796978 -13.842003318 -6.134239214 1 1 1 # ob + 1050 1 5 0.425000 -6.649055594 -16.048618752 -7.995024148 1 1 1 # ho + 1051 1 1 1.575000 -3.540735291 -11.769614956 -9.189871776 1 1 1 # ao + 1052 1 2 2.100000 -7.938875500 -13.346825892 -6.510105182 1 1 1 # st + 1053 1 2 2.100000 -7.846209919 -10.399887143 -6.503672300 1 1 1 # st + 1054 1 3 -1.050000 -8.132038064 -13.271769983 -8.128441523 1 1 1 # ob + 1055 1 3 -1.050000 -7.692699080 -10.527386123 -8.125684583 1 1 1 # ob + 1056 1 4 -0.950000 -5.132438547 -11.558848927 -8.196446632 1 1 1 # oh + 1057 1 3 -1.050000 -6.457706636 -9.843564022 -5.891626593 1 1 1 # ob + 1058 1 3 -1.050000 -8.145008036 -11.864369396 -5.896221744 1 1 1 # ob + 1059 1 3 -1.050000 -9.013629520 -9.359092007 -6.134239214 1 1 1 # ob + 1060 1 5 0.425000 -4.040888290 -11.565707441 -7.995024148 1 1 1 # ho + 1061 1 1 1.575000 -6.106223711 -10.281288324 -9.189871776 1 1 1 # ao 1062 1 2 2.100000 -10.318295859 -18.033556531 6.510105475 1 1 0 # st 1063 1 2 2.100000 -10.354626679 -12.014672659 6.503672592 1 1 0 # st 1064 1 3 -1.050000 -10.068798533 -9.142789819 8.128441816 1 1 0 # ob @@ -1106,7 +1106,7 @@ Atoms # full 1068 1 3 -1.050000 -10.055828562 -10.550190406 5.896222036 1 1 0 # ob 1069 1 3 -1.050000 -9.187207077 -13.055467795 6.134239507 1 1 0 # ob 1070 1 5 0.425000 -8.999948461 -10.848852361 7.995024441 1 1 0 # ho - 1071 1 1 1.575000 -12.108268763 -15.127856157 9.189872068 1 1 0 # ao + 1071 1 1 1.575000 -8.714391015 -14.764199634 -9.189871776 1 1 1 # ao 1072 1 2 2.100000 -7.710128554 -13.550645221 6.510105475 1 1 0 # st 1073 1 2 2.100000 -7.802794136 -16.497583970 6.503672592 1 1 0 # st 1074 1 3 -1.050000 -7.516965991 -13.625701130 8.128441816 1 1 0 # ob @@ -1116,27 +1116,27 @@ Atoms # full 1078 1 3 -1.050000 -7.503996019 -15.033101717 5.896222036 1 1 0 # ob 1079 1 3 -1.050000 -6.635374534 -17.538379106 6.134239507 1 1 0 # ob 1080 1 5 0.425000 -11.608115765 -15.331763672 7.995024441 1 1 0 # ho - 1081 1 1 1.575000 -4.382780497 -16.616182789 9.189872068 1 1 0 # ao - 1082 1 2 2.100000 -0.170708348 -8.863914582 -6.523590700 1 1 1 # st - 1083 1 2 2.100000 -0.134377529 -14.882798454 -6.517157818 1 1 1 # st - 1084 1 3 -1.050000 -0.420205674 -17.754681294 -8.141927041 1 1 1 # ob - 1085 1 3 -1.050000 0.019133310 -15.010297434 -8.139170101 1 1 1 # ob - 1086 1 4 -0.950000 -2.580606005 -16.041760237 -8.209932150 1 1 1 # oh - 1087 1 3 -1.050000 -3.905874093 -14.326475333 -5.905112111 1 1 1 # ob - 1088 1 3 -1.050000 -0.433175646 -16.347280707 -5.909707262 1 1 1 # ob - 1089 1 3 -1.050000 -1.301797130 -13.842003318 -6.147724732 1 1 1 # ob - 1090 1 5 0.425000 -1.489055747 -16.048618752 -8.008509666 1 1 1 # ho - 1091 1 1 1.575000 -1.774613192 -12.133271479 9.189872068 1 1 0 # ao - 1092 1 2 2.100000 -2.778875653 -13.346825892 -6.523590700 1 1 1 # st - 1093 1 2 2.100000 -2.686210071 -10.399887143 -6.517157818 1 1 1 # st - 1094 1 3 -1.050000 -2.972038217 -13.271769983 -8.141927041 1 1 1 # ob - 1095 1 3 -1.050000 -2.532699233 -10.527386123 -8.139170101 1 1 1 # ob - 1096 1 4 -0.950000 0.027561300 -11.558848927 -8.209932150 1 1 1 # oh - 1097 1 3 -1.050000 -1.297706788 -9.843564022 -5.905112111 1 1 1 # ob - 1098 1 3 -1.050000 -2.985008189 -11.864369396 -5.909707262 1 1 1 # ob - 1099 1 3 -1.050000 -3.853629673 -9.359092007 -6.147724732 1 1 1 # ob - 1100 1 5 0.425000 1.119111558 -11.565707441 -8.008509666 1 1 1 # ho - 1101 1 1 1.575000 -4.340101611 -10.644944847 9.189872068 1 1 0 # ao + 1081 1 1 1.575000 -0.988902749 -16.252526266 -9.189871776 1 1 1 # ao + 1082 1 2 2.100000 -0.170708348 -8.863914582 -6.510105182 1 1 1 # st + 1083 1 2 2.100000 -0.134377529 -14.882798454 -6.503672300 1 1 1 # st + 1084 1 3 -1.050000 -0.420205674 -17.754681294 -8.128441523 1 1 1 # ob + 1085 1 3 -1.050000 0.019133310 -15.010297434 -8.125684583 1 1 1 # ob + 1086 1 4 -0.950000 -2.580606005 -16.041760237 -8.196446632 1 1 1 # oh + 1087 1 3 -1.050000 -3.905874093 -14.326475333 -5.891626593 1 1 1 # ob + 1088 1 3 -1.050000 -0.433175646 -16.347280707 -5.896221744 1 1 1 # ob + 1089 1 3 -1.050000 -1.301797130 -13.842003318 -6.134239214 1 1 1 # ob + 1090 1 5 0.425000 -1.489055747 -16.048618752 -7.995024148 1 1 1 # ho + 1091 1 1 1.575000 1.619264556 -11.769614956 -9.189871776 1 1 1 # ao + 1092 1 2 2.100000 -2.778875653 -13.346825892 -6.510105182 1 1 1 # st + 1093 1 2 2.100000 -2.686210071 -10.399887143 -6.503672300 1 1 1 # st + 1094 1 3 -1.050000 -2.972038217 -13.271769983 -8.128441523 1 1 1 # ob + 1095 1 3 -1.050000 -2.532699233 -10.527386123 -8.125684583 1 1 1 # ob + 1096 1 4 -0.950000 0.027561300 -11.558848927 -8.196446632 1 1 1 # oh + 1097 1 3 -1.050000 -1.297706788 -9.843564022 -5.891626593 1 1 1 # ob + 1098 1 3 -1.050000 -2.985008189 -11.864369396 -5.896221744 1 1 1 # ob + 1099 1 3 -1.050000 -3.853629673 -9.359092007 -6.134239214 1 1 1 # ob + 1100 1 5 0.425000 1.119111558 -11.565707441 -7.995024148 1 1 1 # ho + 1101 1 1 1.575000 -0.946223863 -10.281288324 -9.189871776 1 1 1 # ao 1102 1 2 2.100000 -5.158296012 -18.033556531 6.510105475 1 1 0 # st 1103 1 2 2.100000 -5.194626832 -12.014672659 6.503672592 1 1 0 # st 1104 1 3 -1.050000 -4.908798686 -9.142789819 8.128441816 1 1 0 # ob @@ -1146,7 +1146,7 @@ Atoms # full 1108 1 3 -1.050000 -4.895828714 -10.550190406 5.896222036 1 1 0 # ob 1109 1 3 -1.050000 -4.027207230 -13.055467795 6.134239507 1 1 0 # ob 1110 1 5 0.425000 -3.839948613 -10.848852361 7.995024441 1 1 0 # ho - 1111 1 1 1.575000 -6.948268916 -15.127856157 9.189872068 1 1 0 # ao + 1111 1 1 1.575000 -3.554391168 -14.764199634 -9.189871776 1 1 1 # ao 1112 1 2 2.100000 -2.550128707 -13.550645221 6.510105475 1 1 0 # st 1113 1 2 2.100000 -2.642794289 -16.497583970 6.503672592 1 1 0 # st 1114 1 3 -1.050000 -2.356966143 -13.625701130 8.128441816 1 1 0 # ob @@ -1156,27 +1156,27 @@ Atoms # full 1118 1 3 -1.050000 -2.343996171 -15.033101717 5.896222036 1 1 0 # ob 1119 1 3 -1.050000 -1.475374687 -17.538379106 6.134239507 1 1 0 # ob 1120 1 5 0.425000 -6.448115918 -15.331763672 7.995024441 1 1 0 # ho - 1121 1 1 1.575000 0.833554723 -7.650360168 9.189872068 0 1 0 # ao - 1122 1 2 2.100000 5.045626871 0.101908040 -6.523590700 0 1 1 # st - 1123 1 2 2.100000 5.081957691 -5.916975832 -6.517157818 0 1 1 # st - 1124 1 3 -1.050000 4.796129546 -8.788858673 -8.141927041 0 1 1 # ob - 1125 1 3 -1.050000 5.235468530 -6.044474812 -8.139170101 0 1 1 # ob - 1126 1 4 -0.950000 2.635729215 -7.075937616 -8.209932150 0 1 1 # oh - 1127 1 3 -1.050000 1.310461127 -5.360652711 -5.905112111 0 1 1 # ob - 1128 1 3 -1.050000 4.783159574 -7.381458085 -5.909707262 0 1 1 # ob - 1129 1 3 -1.050000 3.914538089 -4.876180697 -6.147724732 0 1 1 # ob - 1130 1 5 0.425000 3.727279473 -7.082796130 -8.008509666 0 1 1 # ho - 1131 1 1 1.575000 3.441722028 -3.167448857 9.189872068 0 1 0 # ao - 1132 1 2 2.100000 2.437459567 -4.381003271 -6.523590700 0 1 1 # st - 1133 1 2 2.100000 2.530125148 -1.434064521 -6.517157818 0 1 1 # st - 1134 1 3 -1.050000 2.244297003 -4.305947362 -8.141927041 0 1 1 # ob - 1135 1 3 -1.050000 2.683635987 -1.561563502 -8.139170101 0 1 1 # ob - 1136 1 4 -0.950000 5.243896520 -2.593026305 -8.209932150 0 1 1 # oh - 1137 1 3 -1.050000 3.918628431 -0.877741400 -5.905112111 0 1 1 # ob - 1138 1 3 -1.050000 2.231327031 -2.898546774 -5.909707262 0 1 1 # ob - 1139 1 3 -1.050000 1.362705547 -0.393269386 -6.147724732 0 1 1 # ob - 1140 1 5 0.425000 6.335446777 -2.599884819 -8.008509666 0 1 1 # ho - 1141 1 1 1.575000 0.876233608 -1.679122225 9.189872068 0 1 0 # ao + 1121 1 1 1.575000 4.227432471 -7.286703645 -9.189871776 0 1 1 # ao + 1122 1 2 2.100000 5.045626871 0.101908040 -6.510105182 0 1 1 # st + 1123 1 2 2.100000 5.081957691 -5.916975832 -6.503672300 0 1 1 # st + 1124 1 3 -1.050000 4.796129546 -8.788858673 -8.128441523 0 1 1 # ob + 1125 1 3 -1.050000 5.235468530 -6.044474812 -8.125684583 0 1 1 # ob + 1126 1 4 -0.950000 2.635729215 -7.075937616 -8.196446632 0 1 1 # oh + 1127 1 3 -1.050000 1.310461127 -5.360652711 -5.891626593 0 1 1 # ob + 1128 1 3 -1.050000 4.783159574 -7.381458085 -5.896221744 0 1 1 # ob + 1129 1 3 -1.050000 3.914538089 -4.876180697 -6.134239214 0 1 1 # ob + 1130 1 5 0.425000 3.727279473 -7.082796130 -7.995024148 0 1 1 # ho + 1131 1 1 1.575000 6.835599776 -2.803792334 -9.189871776 0 1 1 # ao + 1132 1 2 2.100000 2.437459567 -4.381003271 -6.510105182 0 1 1 # st + 1133 1 2 2.100000 2.530125148 -1.434064521 -6.503672300 0 1 1 # st + 1134 1 3 -1.050000 2.244297003 -4.305947362 -8.128441523 0 1 1 # ob + 1135 1 3 -1.050000 2.683635987 -1.561563502 -8.125684583 0 1 1 # ob + 1136 1 4 -0.950000 5.243896520 -2.593026305 -8.196446632 0 1 1 # oh + 1137 1 3 -1.050000 3.918628431 -0.877741400 -5.891626593 0 1 1 # ob + 1138 1 3 -1.050000 2.231327031 -2.898546774 -5.896221744 0 1 1 # ob + 1139 1 3 -1.050000 1.362705547 -0.393269386 -6.134239214 0 1 1 # ob + 1140 1 5 0.425000 6.335446777 -2.599884819 -7.995024148 0 1 1 # ho + 1141 1 1 1.575000 4.270111356 -1.315465702 -9.189871776 0 1 1 # ao 1142 1 2 2.100000 0.058039208 -9.067733910 6.510105475 0 1 0 # st 1143 1 2 2.100000 0.021708388 -3.048850038 6.503672592 0 1 0 # st 1144 1 3 -1.050000 0.307536534 -0.176967197 8.128441816 0 1 0 # ob @@ -1186,7 +1186,7 @@ Atoms # full 1148 1 3 -1.050000 0.320506505 -1.584367785 5.896222036 0 1 0 # ob 1149 1 3 -1.050000 1.189127990 -4.089645173 6.134239507 0 1 0 # ob 1150 1 5 0.425000 1.376386606 -1.883029740 7.995024441 0 1 0 # ho - 1151 1 1 1.575000 -1.731933696 -6.162033536 9.189872068 0 1 0 # ao + 1151 1 1 1.575000 1.661944052 -5.798377013 -9.189871776 0 1 1 # ao 1152 1 2 2.100000 2.666206512 -4.584822599 6.510105475 0 1 0 # st 1153 1 2 2.100000 2.573540931 -7.531761349 6.503672592 0 1 0 # st 1154 1 3 -1.050000 2.859369076 -4.659878508 8.128441816 0 1 0 # ob @@ -1196,27 +1196,27 @@ Atoms # full 1158 1 3 -1.050000 2.872339048 -6.067279095 5.896222036 0 1 0 # ob 1159 1 3 -1.050000 3.740960532 -8.572556484 6.134239507 0 1 0 # ob 1160 1 5 0.425000 -1.231780698 -6.365941050 7.995024441 0 1 0 # ho - 1161 1 1 1.575000 5.993554570 -7.650360168 9.189872068 0 1 0 # ao - 1162 1 2 2.100000 -10.434373281 0.101908040 -6.523590700 1 1 1 # st - 1163 1 2 2.100000 -10.398042462 -5.916975832 -6.517157818 1 1 1 # st - 1164 1 3 -1.050000 9.956129393 -8.788858673 -8.141927041 0 1 1 # ob - 1165 1 3 -1.050000 -10.244531623 -6.044474812 -8.139170101 1 1 1 # ob - 1166 1 4 -0.950000 7.795729062 -7.075937616 -8.209932150 0 1 1 # oh - 1167 1 3 -1.050000 6.470460974 -5.360652711 -5.905112111 0 1 1 # ob - 1168 1 3 -1.050000 -10.696840579 -7.381458085 -5.909707262 1 1 1 # ob - 1169 1 3 -1.050000 9.074537937 -4.876180697 -6.147724732 0 1 1 # ob - 1170 1 5 0.425000 8.887279320 -7.082796130 -8.008509666 0 1 1 # ho - 1171 1 1 1.575000 -12.038278125 -3.167448857 9.189872068 1 1 0 # ao - 1172 1 2 2.100000 7.597459414 -4.381003271 -6.523590700 0 1 1 # st - 1173 1 2 2.100000 7.690124996 -1.434064521 -6.517157818 0 1 1 # st - 1174 1 3 -1.050000 7.404296850 -4.305947362 -8.141927041 0 1 1 # ob - 1175 1 3 -1.050000 7.843635834 -1.561563502 -8.139170101 0 1 1 # ob - 1176 1 4 -0.950000 -10.236103633 -2.593026305 -8.209932150 1 1 1 # oh - 1177 1 3 -1.050000 9.078628279 -0.877741400 -5.905112111 0 1 1 # ob - 1178 1 3 -1.050000 7.391326878 -2.898546774 -5.909707262 0 1 1 # ob - 1179 1 3 -1.050000 6.522705394 -0.393269386 -6.147724732 0 1 1 # ob - 1180 1 5 0.425000 -9.144553375 -2.599884819 -8.008509666 1 1 1 # ho - 1181 1 1 1.575000 6.036233456 -1.679122225 9.189872068 0 1 0 # ao + 1161 1 1 1.575000 9.387432318 -7.286703645 -9.189871776 0 1 1 # ao + 1162 1 2 2.100000 -10.434373281 0.101908040 -6.510105182 1 1 1 # st + 1163 1 2 2.100000 -10.398042462 -5.916975832 -6.503672300 1 1 1 # st + 1164 1 3 -1.050000 9.956129393 -8.788858673 -8.128441523 0 1 1 # ob + 1165 1 3 -1.050000 -10.244531623 -6.044474812 -8.125684583 1 1 1 # ob + 1166 1 4 -0.950000 7.795729062 -7.075937616 -8.196446632 0 1 1 # oh + 1167 1 3 -1.050000 6.470460974 -5.360652711 -5.891626593 0 1 1 # ob + 1168 1 3 -1.050000 -10.696840579 -7.381458085 -5.896221744 1 1 1 # ob + 1169 1 3 -1.050000 9.074537937 -4.876180697 -6.134239214 0 1 1 # ob + 1170 1 5 0.425000 8.887279320 -7.082796130 -7.995024148 0 1 1 # ho + 1171 1 1 1.575000 -8.644400377 -2.803792334 -9.189871776 1 1 1 # ao + 1172 1 2 2.100000 7.597459414 -4.381003271 -6.510105182 0 1 1 # st + 1173 1 2 2.100000 7.690124996 -1.434064521 -6.503672300 0 1 1 # st + 1174 1 3 -1.050000 7.404296850 -4.305947362 -8.128441523 0 1 1 # ob + 1175 1 3 -1.050000 7.843635834 -1.561563502 -8.125684583 0 1 1 # ob + 1176 1 4 -0.950000 -10.236103633 -2.593026305 -8.196446632 1 1 1 # oh + 1177 1 3 -1.050000 9.078628279 -0.877741400 -5.891626593 0 1 1 # ob + 1178 1 3 -1.050000 7.391326878 -2.898546774 -5.896221744 0 1 1 # ob + 1179 1 3 -1.050000 6.522705394 -0.393269386 -6.134239214 0 1 1 # ob + 1180 1 5 0.425000 -9.144553375 -2.599884819 -7.995024148 1 1 1 # ho + 1181 1 1 1.575000 9.430111204 -1.315465702 -9.189871776 0 1 1 # ao 1182 1 2 2.100000 5.218039055 -9.067733910 6.510105475 0 1 0 # st 1183 1 2 2.100000 5.181708235 -3.048850038 6.503672592 0 1 0 # st 1184 1 3 -1.050000 5.467536381 -0.176967197 8.128441816 0 1 0 # ob @@ -1226,7 +1226,7 @@ Atoms # full 1188 1 3 -1.050000 5.480506353 -1.584367785 5.896222036 0 1 0 # ob 1189 1 3 -1.050000 6.349127837 -4.089645173 6.134239507 0 1 0 # ob 1190 1 5 0.425000 6.536386454 -1.883029740 7.995024441 0 1 0 # ho - 1191 1 1 1.575000 3.428066151 -6.162033536 9.189872068 0 1 0 # ao + 1191 1 1 1.575000 6.821943899 -5.798377013 -9.189871776 0 1 1 # ao 1192 1 2 2.100000 -12.813793640 -4.584822599 6.510105475 1 1 0 # st 1193 1 2 2.100000 -12.906459222 -7.531761349 6.503672592 1 1 0 # st 1194 1 3 -1.050000 -12.620631076 -4.659878508 8.128441816 1 1 0 # ob @@ -1236,27 +1236,27 @@ Atoms # full 1198 1 3 -1.050000 -12.607661104 -6.067279095 5.896222036 1 1 0 # ob 1199 1 3 -1.050000 -11.739039620 -8.572556484 6.134239507 1 1 0 # ob 1200 1 5 0.425000 3.928219149 -6.365941050 7.995024441 0 1 0 # ho - 1201 1 1 1.575000 -9.486445582 -7.650360168 9.189872068 1 1 0 # ao - 1202 1 2 2.100000 -5.274373434 0.101908040 -6.523590700 1 1 1 # st - 1203 1 2 2.100000 -5.238042614 -5.916975832 -6.517157818 1 1 1 # st - 1204 1 3 -1.050000 -5.523870760 -8.788858673 -8.141927041 1 1 1 # ob - 1205 1 3 -1.050000 -5.084531776 -6.044474812 -8.139170101 1 1 1 # ob - 1206 1 4 -0.950000 -7.684271090 -7.075937616 -8.209932150 1 1 1 # oh - 1207 1 3 -1.050000 -9.009539178 -5.360652711 -5.905112111 1 1 1 # ob - 1208 1 3 -1.050000 -5.536840731 -7.381458085 -5.909707262 1 1 1 # ob - 1209 1 3 -1.050000 -6.405462216 -4.876180697 -6.147724732 1 1 1 # ob - 1210 1 5 0.425000 -6.592720833 -7.082796130 -8.008509666 1 1 1 # ho - 1211 1 1 1.575000 -6.878278278 -3.167448857 9.189872068 1 1 0 # ao - 1212 1 2 2.100000 -7.882540739 -4.381003271 -6.523590700 1 1 1 # st - 1213 1 2 2.100000 -7.789875157 -1.434064521 -6.517157818 1 1 1 # st - 1214 1 3 -1.050000 -8.075703302 -4.305947362 -8.141927041 1 1 1 # ob - 1215 1 3 -1.050000 -7.636364318 -1.561563502 -8.139170101 1 1 1 # ob - 1216 1 4 -0.950000 -5.076103786 -2.593026305 -8.209932150 1 1 1 # oh - 1217 1 3 -1.050000 -6.401371874 -0.877741400 -5.905112111 1 1 1 # ob - 1218 1 3 -1.050000 -8.088673274 -2.898546774 -5.909707262 1 1 1 # ob - 1219 1 3 -1.050000 -8.957294759 -0.393269386 -6.147724732 1 1 1 # ob - 1220 1 5 0.425000 -3.984553528 -2.599884819 -8.008509666 1 1 1 # ho - 1221 1 1 1.575000 -9.443766697 -1.679122225 9.189872068 1 1 0 # ao + 1201 1 1 1.575000 -6.092567834 -7.286703645 -9.189871776 1 1 1 # ao + 1202 1 2 2.100000 -5.274373434 0.101908040 -6.510105182 1 1 1 # st + 1203 1 2 2.100000 -5.238042614 -5.916975832 -6.503672300 1 1 1 # st + 1204 1 3 -1.050000 -5.523870760 -8.788858673 -8.128441523 1 1 1 # ob + 1205 1 3 -1.050000 -5.084531776 -6.044474812 -8.125684583 1 1 1 # ob + 1206 1 4 -0.950000 -7.684271090 -7.075937616 -8.196446632 1 1 1 # oh + 1207 1 3 -1.050000 -9.009539178 -5.360652711 -5.891626593 1 1 1 # ob + 1208 1 3 -1.050000 -5.536840731 -7.381458085 -5.896221744 1 1 1 # ob + 1209 1 3 -1.050000 -6.405462216 -4.876180697 -6.134239214 1 1 1 # ob + 1210 1 5 0.425000 -6.592720833 -7.082796130 -7.995024148 1 1 1 # ho + 1211 1 1 1.575000 -3.484400530 -2.803792334 -9.189871776 1 1 1 # ao + 1212 1 2 2.100000 -7.882540739 -4.381003271 -6.510105182 1 1 1 # st + 1213 1 2 2.100000 -7.789875157 -1.434064521 -6.503672300 1 1 1 # st + 1214 1 3 -1.050000 -8.075703302 -4.305947362 -8.128441523 1 1 1 # ob + 1215 1 3 -1.050000 -7.636364318 -1.561563502 -8.125684583 1 1 1 # ob + 1216 1 4 -0.950000 -5.076103786 -2.593026305 -8.196446632 1 1 1 # oh + 1217 1 3 -1.050000 -6.401371874 -0.877741400 -5.891626593 1 1 1 # ob + 1218 1 3 -1.050000 -8.088673274 -2.898546774 -5.896221744 1 1 1 # ob + 1219 1 3 -1.050000 -8.957294759 -0.393269386 -6.134239214 1 1 1 # ob + 1220 1 5 0.425000 -3.984553528 -2.599884819 -7.995024148 1 1 1 # ho + 1221 1 1 1.575000 -6.049888949 -1.315465702 -9.189871776 1 1 1 # ao 1222 1 2 2.100000 -10.261961097 -9.067733910 6.510105475 1 1 0 # st 1223 1 2 2.100000 -10.298291917 -3.048850038 6.503672592 1 1 0 # st 1224 1 3 -1.050000 -10.012463772 -0.176967197 8.128441816 1 1 0 # ob @@ -1266,7 +1266,7 @@ Atoms # full 1228 1 3 -1.050000 -9.999493800 -1.584367785 5.896222036 1 1 0 # ob 1229 1 3 -1.050000 -9.130872315 -4.089645173 6.134239507 1 1 0 # ob 1230 1 5 0.425000 -8.943613699 -1.883029740 7.995024441 1 1 0 # ho - 1231 1 1 1.575000 -12.051934002 -6.162033536 9.189872068 1 1 0 # ao + 1231 1 1 1.575000 -8.658056254 -5.798377013 -9.189871776 1 1 1 # ao 1232 1 2 2.100000 -7.653793793 -4.584822599 6.510105475 1 1 0 # st 1233 1 2 2.100000 -7.746459374 -7.531761349 6.503672592 1 1 0 # st 1234 1 3 -1.050000 -7.460631229 -4.659878508 8.128441816 1 1 0 # ob @@ -1276,27 +1276,27 @@ Atoms # full 1238 1 3 -1.050000 -7.447661257 -6.067279095 5.896222036 1 1 0 # ob 1239 1 3 -1.050000 -6.579039773 -8.572556484 6.134239507 1 1 0 # ob 1240 1 5 0.425000 -11.551781003 -6.365941050 7.995024441 1 1 0 # ho - 1241 1 1 1.575000 -4.326445735 -7.650360168 9.189872068 1 1 0 # ao - 1242 1 2 2.100000 -0.114373587 0.101908040 -6.523590700 1 1 1 # st - 1243 1 2 2.100000 -0.078042767 -5.916975832 -6.517157818 1 1 1 # st - 1244 1 3 -1.050000 -0.363870912 -8.788858673 -8.141927041 1 1 1 # ob - 1245 1 3 -1.050000 0.075468072 -6.044474812 -8.139170101 1 1 1 # ob - 1246 1 4 -0.950000 -2.524271243 -7.075937616 -8.209932150 1 1 1 # oh - 1247 1 3 -1.050000 -3.849539331 -5.360652711 -5.905112111 1 1 1 # ob - 1248 1 3 -1.050000 -0.376840884 -7.381458085 -5.909707262 1 1 1 # ob - 1249 1 3 -1.050000 -1.245462368 -4.876180697 -6.147724732 1 1 1 # ob - 1250 1 5 0.425000 -1.432720985 -7.082796130 -8.008509666 1 1 1 # ho - 1251 1 1 1.575000 -1.718278430 -3.167448857 9.189872068 1 1 0 # ao - 1252 1 2 2.100000 -2.722540891 -4.381003271 -6.523590700 1 1 1 # st - 1253 1 2 2.100000 -2.629875310 -1.434064521 -6.517157818 1 1 1 # st - 1254 1 3 -1.050000 -2.915703455 -4.305947362 -8.141927041 1 1 1 # ob - 1255 1 3 -1.050000 -2.476364471 -1.561563502 -8.139170101 1 1 1 # ob - 1256 1 4 -0.950000 0.083896062 -2.593026305 -8.209932150 1 1 1 # oh - 1257 1 3 -1.050000 -1.241372026 -0.877741400 -5.905112111 1 1 1 # ob - 1258 1 3 -1.050000 -2.928673427 -2.898546774 -5.909707262 1 1 1 # ob - 1259 1 3 -1.050000 -3.797294911 -0.393269386 -6.147724732 1 1 1 # ob - 1260 1 5 0.425000 1.175446320 -2.599884819 -8.008509666 1 1 1 # ho - 1261 1 1 1.575000 -4.283766850 -1.679122225 9.189872068 1 1 0 # ao + 1241 1 1 1.575000 -0.932567987 -7.286703645 -9.189871776 1 1 1 # ao + 1242 1 2 2.100000 -0.114373587 0.101908040 -6.510105182 1 1 1 # st + 1243 1 2 2.100000 -0.078042767 -5.916975832 -6.503672300 1 1 1 # st + 1244 1 3 -1.050000 -0.363870912 -8.788858673 -8.128441523 1 1 1 # ob + 1245 1 3 -1.050000 0.075468072 -6.044474812 -8.125684583 1 1 1 # ob + 1246 1 4 -0.950000 -2.524271243 -7.075937616 -8.196446632 1 1 1 # oh + 1247 1 3 -1.050000 -3.849539331 -5.360652711 -5.891626593 1 1 1 # ob + 1248 1 3 -1.050000 -0.376840884 -7.381458085 -5.896221744 1 1 1 # ob + 1249 1 3 -1.050000 -1.245462368 -4.876180697 -6.134239214 1 1 1 # ob + 1250 1 5 0.425000 -1.432720985 -7.082796130 -7.995024148 1 1 1 # ho + 1251 1 1 1.575000 1.675599318 -2.803792334 -9.189871776 1 1 1 # ao + 1252 1 2 2.100000 -2.722540891 -4.381003271 -6.510105182 1 1 1 # st + 1253 1 2 2.100000 -2.629875310 -1.434064521 -6.503672300 1 1 1 # st + 1254 1 3 -1.050000 -2.915703455 -4.305947362 -8.128441523 1 1 1 # ob + 1255 1 3 -1.050000 -2.476364471 -1.561563502 -8.125684583 1 1 1 # ob + 1256 1 4 -0.950000 0.083896062 -2.593026305 -8.196446632 1 1 1 # oh + 1257 1 3 -1.050000 -1.241372026 -0.877741400 -5.891626593 1 1 1 # ob + 1258 1 3 -1.050000 -2.928673427 -2.898546774 -5.896221744 1 1 1 # ob + 1259 1 3 -1.050000 -3.797294911 -0.393269386 -6.134239214 1 1 1 # ob + 1260 1 5 0.425000 1.175446320 -2.599884819 -7.995024148 1 1 1 # ho + 1261 1 1 1.575000 -0.889889102 -1.315465702 -9.189871776 1 1 1 # ao 1262 1 2 2.100000 -5.101961250 -9.067733910 6.510105475 1 1 0 # st 1263 1 2 2.100000 -5.138292070 -3.048850038 6.503672592 1 1 0 # st 1264 1 3 -1.050000 -4.852463924 -0.176967197 8.128441816 1 1 0 # ob @@ -1306,7 +1306,7 @@ Atoms # full 1268 1 3 -1.050000 -4.839493952 -1.584367785 5.896222036 1 1 0 # ob 1269 1 3 -1.050000 -3.970872468 -4.089645173 6.134239507 1 1 0 # ob 1270 1 5 0.425000 -3.783613851 -1.883029740 7.995024441 1 1 0 # ho - 1271 1 1 1.575000 -6.891934154 -6.162033536 9.189872068 1 1 0 # ao + 1271 1 1 1.575000 -3.498056406 -5.798377013 -9.189871776 1 1 1 # ao 1272 1 2 2.100000 -2.493793945 -4.584822599 6.510105475 1 1 0 # st 1273 1 2 2.100000 -2.586459527 -7.531761349 6.503672592 1 1 0 # st 1274 1 3 -1.050000 -2.300631381 -4.659878508 8.128441816 1 1 0 # ob diff --git a/tools/msi2lmp/test/reference/PyAC_bulk-clayff.data2 b/tools/msi2lmp/test/reference/PyAC_bulk-clayff.data2 index 4ee3c34e08..c37bbbfb6e 100644 --- a/tools/msi2lmp/test/reference/PyAC_bulk-clayff.data2 +++ b/tools/msi2lmp/test/reference/PyAC_bulk-clayff.data2 @@ -1,18 +1,18 @@ -LAMMPS data file via write_data, version 5 Oct 2016, timestep = 97 +LAMMPS data file via write_data, version 29 Aug 2024, timestep = 94, units = real 1280 atoms 5 atom types 128 bonds 1 bond types --1.0320000000000000e+01 1.0320000000000000e+01 xlo xhi --1.7931646038000000e+01 1.7931646038000000e+01 ylo yhi --9.1966146809999998e+00 9.1966146809999998e+00 zlo zhi -2.2533867499999999e-01 -3.3938777480000000e+00 -3.6365652300000001e-01 xy xz yz +-10.32 10.32 xlo xhi +-17.931646038 17.931646038 ylo yhi +-9.189871922 9.189871922 zlo zhi +0.225338675 -3.393877748 -0.363656523 xy xz yz Masses -1 26.9815 +1 26.98154 2 28.0855 3 15.9994 4 15.9994 @@ -32,2697 +32,2697 @@ Bond Coeffs # harmonic Atoms # full -1 1 1 1.5750000000000000e+00 2.5999859887541152e+00 1.4895295600930361e+00 -3.2684095454396100e-03 0 0 0 -2 1 2 2.1000000000000001e+00 3.3890158510276365e+00 8.8633001207774171e+00 2.7539653683351801e+00 0 0 0 -3 1 2 2.1000000000000001e+00 3.4122910819528869e+00 2.8524994338649421e+00 2.7618119426027334e+00 0 0 0 -4 1 3 -1.0500000000000000e+00 3.1917106615190871e+00 -3.1338269933883112e-02 1.1357135267887219e+00 0 0 0 -5 1 3 -1.0500000000000000e+00 3.5469715140592335e+00 2.7595296221569008e+00 1.1370155152705124e+00 0 0 0 -6 1 4 -9.4999999999999996e-01 9.0629865585113478e-01 1.5632893985929819e+00 1.0069802353213007e+00 0 0 0 -7 1 3 -1.0500000000000000e+00 -4.4288757751145802e-01 3.5553420116799757e+00 3.2357631024135358e+00 0 0 0 -8 1 3 -1.0500000000000000e+00 3.3001891233613350e+00 1.3781620274833877e+00 3.2374587487515178e+00 0 0 0 -9 1 3 -1.0500000000000000e+00 2.1467877066985572e+00 3.7041759320173213e+00 3.0459627186065976e+00 0 0 0 -10 1 5 4.2499999999999999e-01 3.9940955153589464e-01 6.8440286676932871e-01 1.1507107600825695e+00 0 0 0 -11 1 1 1.5750000000000000e+00 5.2081610166521486e+00 5.9724603411204953e+00 -3.2678269427819373e-03 0 0 0 -12 1 2 2.1000000000000001e+00 7.8082390717283801e-01 4.3803873151640857e+00 2.7539573196414509e+00 0 0 0 -13 1 2 2.1000000000000001e+00 8.6049184758384811e-01 7.3353954630155727e+00 2.7618077229661608e+00 0 0 0 -14 1 3 -1.0500000000000000e+00 6.3985291874622341e-01 4.4515561398457919e+00 1.1357491950576897e+00 0 0 0 -15 1 3 -1.0500000000000000e+00 9.9516171983727020e-01 7.2424161873666044e+00 1.1369982112775414e+00 0 0 0 -16 1 4 -9.4999999999999996e-01 3.5145105035101025e+00 6.0462386370433165e+00 1.0069819170376704e+00 0 0 0 -17 1 3 -1.0500000000000000e+00 2.1653116942489294e+00 8.0382453753562579e+00 3.2357864576820852e+00 0 0 0 -18 1 3 -1.0500000000000000e+00 7.4835045014725310e-01 5.8610807683013810e+00 3.2374554227766854e+00 0 0 0 -19 1 3 -1.0500000000000000e+00 -4.0504297107989196e-01 8.1871235044640613e+00 3.0459446104666839e+00 0 0 0 -20 1 5 4.2499999999999999e-01 3.0075427813219715e+00 5.1673094182610200e+00 1.1507483385791737e+00 0 0 0 -21 1 1 1.5750000000000000e+00 2.6161048042733217e+00 7.4761708036165011e+00 -3.7559789002870048e-03 0 0 0 -22 1 2 2.1000000000000001e+00 1.8270583837568388e+00 1.0238224436981014e-01 -2.7609433636234240e+00 0 0 0 -23 1 2 2.1000000000000001e+00 1.8037926928806804e+00 6.1131912799914794e+00 -2.7688607211148550e+00 0 0 0 -24 1 3 -1.0500000000000000e+00 2.0245843840439779e+00 8.9971802013490674e+00 -1.1427990238002010e+00 0 0 0 -25 1 3 -1.0500000000000000e+00 1.6690794936693152e+00 6.2059206004470688e+00 -1.1439630092406396e+00 0 0 0 -26 1 4 -9.4999999999999996e-01 4.3099221099139733e+00 7.4024984100470839e+00 -1.0139954105990832e+00 0 0 0 -27 1 3 -1.0500000000000000e+00 5.6590031416114179e+00 5.4102611437460766e+00 -3.2425548174288927e+00 0 0 0 -28 1 3 -1.0500000000000000e+00 1.9161020068286181e+00 7.5874974627099085e+00 -3.2446533398602568e+00 0 0 0 -29 1 3 -1.0500000000000000e+00 3.0692592992822245e+00 5.2614642342074163e+00 -3.0529614390734992e+00 0 0 0 -30 1 5 4.2499999999999999e-01 4.8166943688168953e+00 8.2812214959912609e+00 -1.1575736167124671e+00 0 0 0 -31 1 1 1.5750000000000000e+00 7.9432589838539513e-03 2.9932322017580155e+00 -3.7548310874804258e-03 0 0 0 -32 1 2 2.1000000000000001e+00 4.4352567674819241e+00 4.5852778048151954e+00 -2.7609429803808379e+00 0 0 0 -33 1 2 2.1000000000000001e+00 4.3556162421312727e+00 1.6303072110574242e+00 -2.7688546110084076e+00 0 0 0 -34 1 3 -1.0500000000000000e+00 4.5764329813965201e+00 4.5142930965604897e+00 -1.1428117296192752e+00 0 0 0 -35 1 3 -1.0500000000000000e+00 4.2208908922051336e+00 1.7230220252737531e+00 -1.1439381753911206e+00 0 0 0 -36 1 4 -9.4999999999999996e-01 1.7016840076240793e+00 2.9195149987798672e+00 -1.0140049080257008e+00 0 0 0 -37 1 3 -1.0500000000000000e+00 3.0508094436907065e+00 9.2735955111261248e-01 -3.2425715481628181e+00 0 0 0 -38 1 3 -1.0500000000000000e+00 4.4679443003019212e+00 3.1046094096202950e+00 -3.2446642002284571e+00 0 0 0 -39 1 3 -1.0500000000000000e+00 5.6210980414275298e+00 7.7850985095940217e-01 -3.0529442198684507e+00 0 0 0 -40 1 5 4.2499999999999999e-01 2.2085508398324158e+00 3.7983231087392824e+00 -1.1577011829365311e+00 0 0 0 -41 1 1 1.5750000000000000e+00 7.7600001218919523e+00 1.4895196291109798e+00 -3.2657864259189040e-03 0 0 0 -42 1 2 2.1000000000000001e+00 -1.2091006019115589e+01 8.8632974450891417e+00 2.7539547041448795e+00 1 0 0 -43 1 2 2.1000000000000001e+00 -1.2067713232602157e+01 2.8525136078719164e+00 2.7618235199017409e+00 1 0 0 -44 1 3 -1.0500000000000000e+00 8.3516959569061555e+00 -3.1339532310223461e-02 1.1357433570971924e+00 0 0 0 -45 1 3 -1.0500000000000000e+00 -1.1933025492148120e+01 2.7595329973670104e+00 1.1370134112483044e+00 1 0 0 -46 1 4 -9.4999999999999996e-01 6.0662672751172373e+00 1.5632462792111497e+00 1.0069655351602584e+00 0 0 0 -47 1 3 -1.0500000000000000e+00 4.7171183489904180e+00 3.5553451756140646e+00 3.2357682722939334e+00 0 0 0 -48 1 3 -1.0500000000000000e+00 -1.2179814839759992e+01 1.3781454091287202e+00 3.2374743626679336e+00 1 0 0 -49 1 3 -1.0500000000000000e+00 7.3067998243476922e+00 3.7041714141887212e+00 3.0459588478344077e+00 0 0 0 -50 1 5 4.2499999999999999e-01 5.5593955964411492e+00 6.8439387532284712e-01 1.1505669005138230e+00 0 0 0 -51 1 1 1.5750000000000000e+00 -1.0271831701454774e+01 5.9724606597474157e+00 -3.2705090813571758e-03 1 0 0 -52 1 2 2.1000000000000001e+00 5.9408180554345194e+00 4.3804006042748469e+00 2.7539659364818760e+00 0 0 0 -53 1 2 2.1000000000000001e+00 6.0204684195903440e+00 7.3353880878252973e+00 2.7618080745736791e+00 0 0 0 -54 1 3 -1.0500000000000000e+00 5.7998593359670885e+00 4.4515526262705585e+00 1.1357348262919498e+00 0 0 0 -55 1 3 -1.0500000000000000e+00 6.1551595276671165e+00 7.2424262028151780e+00 1.1369916832629752e+00 0 0 0 -56 1 4 -9.4999999999999996e-01 -1.1965495382161963e+01 6.0462304220183150e+00 1.0070022736298210e+00 1 0 0 -57 1 3 -1.0500000000000000e+00 7.3253562399943561e+00 8.0382687380075382e+00 3.2357743586474470e+00 0 0 0 -58 1 3 -1.0500000000000000e+00 5.9083487186442269e+00 5.8610518812341148e+00 3.2374617422859089e+00 0 0 0 -59 1 3 -1.0500000000000000e+00 4.7549501783979871e+00 8.1871270499566329e+00 3.0459460044387185e+00 0 0 0 -60 1 5 4.2499999999999999e-01 8.1675777506518017e+00 5.1673452186951785e+00 1.1508566812238072e+00 0 0 0 -61 1 1 1.5750000000000000e+00 7.7761138336528575e+00 7.4761697781487406e+00 -3.7580555383147640e-03 0 0 0 -62 1 2 2.1000000000000001e+00 6.9870625419908770e+00 1.0236857881965378e-01 -2.7609530688361730e+00 0 0 0 -63 1 2 2.1000000000000001e+00 6.9638163429426783e+00 6.1131999232440997e+00 -2.7688597574900182e+00 0 0 0 -64 1 3 -1.0500000000000000e+00 7.1845768042068343e+00 8.9971837243373898e+00 -1.1427811518142867e+00 0 0 0 -65 1 3 -1.0500000000000000e+00 6.8290823812761374e+00 6.2059099045834571e+00 -1.1439562764296625e+00 0 0 0 -66 1 4 -9.4999999999999996e-01 -1.1170087733372744e+01 7.4024835932118371e+00 -1.0139778639834489e+00 1 0 0 -67 1 3 -1.0500000000000000e+00 -9.8209500322774037e+00 5.4102853287564159e+00 -3.2425657088525419e+00 1 0 0 -68 1 3 -1.0500000000000000e+00 7.0761041543125955e+00 7.5875255489076068e+00 -3.2446577662945764e+00 0 0 0 -69 1 3 -1.0500000000000000e+00 8.2292664263953057e+00 5.2614600888460927e+00 -3.0529632035400311e+00 0 0 0 -70 1 5 4.2499999999999999e-01 -1.0663272694379867e+01 8.2812544466164262e+00 -1.1574899906021443e+00 1 0 0 -71 1 1 1.5750000000000000e+00 5.1679291867752841e+00 2.9932421670148486e+00 -3.7577228510699001e-03 0 0 0 -72 1 2 2.1000000000000001e+00 -1.1044767300168616e+01 4.5852760408334774e+00 -2.7609521778782176e+00 1 0 0 -73 1 2 2.1000000000000001e+00 -1.1124388980911734e+01 1.6303195608669299e+00 -2.7688431292616507e+00 1 0 0 -74 1 3 -1.0500000000000000e+00 -1.0903581498310636e+01 4.5142906934311924e+00 -1.1427845473335605e+00 1 0 0 -75 1 3 -1.0500000000000000e+00 -1.1259106369033972e+01 1.7230268384806458e+00 -1.1439410995923396e+00 1 0 0 -76 1 4 -9.4999999999999996e-01 6.8617144958469076e+00 2.9195557673048818e+00 -1.0139879262950160e+00 0 0 0 -77 1 3 -1.0500000000000000e+00 8.2108057946072996e+00 9.2735729230230390e-01 -3.2425776499777719e+00 0 0 0 -78 1 3 -1.0500000000000000e+00 -1.1012059810070339e+01 3.1045919471971004e+00 -3.2446473870783468e+00 1 0 0 -79 1 3 -1.0500000000000000e+00 -9.8588900558710808e+00 7.7850518566728155e-01 -3.0529472339342547e+00 1 0 0 -80 1 5 4.2499999999999999e-01 7.3685681396951637e+00 3.7983364769353116e+00 -1.1575475830507376e+00 0 0 0 -81 1 1 1.5750000000000000e+00 -7.7200137563852609e+00 1.4895294530661403e+00 -3.2684599822623284e-03 1 0 0 -82 1 2 2.1000000000000001e+00 -6.9309835694285180e+00 8.8633000360003891e+00 2.7539655829756615e+00 1 0 0 -83 1 2 2.1000000000000001e+00 -6.9077088390904287e+00 2.8524991867344269e+00 2.7618117534379607e+00 1 0 0 -84 1 3 -1.0500000000000000e+00 -7.1282896122357791e+00 -3.1337790666402299e-02 1.1357138609993100e+00 1 0 0 -85 1 3 -1.0500000000000000e+00 -6.7730290070254648e+00 2.7595293114608452e+00 1.1370158767616427e+00 1 0 0 -86 1 4 -9.4999999999999996e-01 -9.4137011727461637e+00 1.5632889909165790e+00 1.0069804405775873e+00 1 0 0 -87 1 3 -1.0500000000000000e+00 -1.0762886927889904e+01 3.5553424385566323e+00 3.2357631758371692e+00 1 0 0 -88 1 3 -1.0500000000000000e+00 -7.0198114225359447e+00 1.3781627149599167e+00 3.2374581287983730e+00 1 0 0 -89 1 3 -1.0500000000000000e+00 -8.1732123893871496e+00 3.7041758941777481e+00 3.0459624211456457e+00 1 0 0 -90 1 5 4.2499999999999999e-01 -9.9205899642595909e+00 6.8440357171864363e-01 1.1507119739579768e+00 1 0 0 -91 1 1 1.5750000000000000e+00 -5.1118389155552801e+00 5.9724604992986876e+00 -3.2677938051328681e-03 1 0 0 -92 1 2 2.1000000000000001e+00 -9.5391764189832653e+00 4.3803869998831004e+00 2.7539574271080607e+00 1 0 0 -93 1 2 2.1000000000000001e+00 -9.4595081799096388e+00 7.3353965025317827e+00 2.7618078347600434e+00 1 0 0 -94 1 3 -1.0500000000000000e+00 -9.6801468113930103e+00 4.4515564521540760e+00 1.1357496055372582e+00 1 0 0 -95 1 3 -1.0500000000000000e+00 -9.3248381172301720e+00 7.2424157374410534e+00 1.1369982830380732e+00 1 0 0 -96 1 4 -9.4999999999999996e-01 -6.8054892996665686e+00 6.0462398159612256e+00 1.0069818364520042e+00 1 0 0 -97 1 3 -1.0500000000000000e+00 -8.1546879688645451e+00 8.0382456007117398e+00 3.2357858485300515e+00 1 0 0 -98 1 3 -1.0500000000000000e+00 -9.5716494128412961e+00 5.8610801354623092e+00 3.2374551881368738e+00 1 0 0 -99 1 3 -1.0500000000000000e+00 -1.0725043969209066e+01 8.1871237437456550e+00 3.0459446329304463e+00 1 0 0 -100 1 5 4.2499999999999999e-01 -7.3124574315238666e+00 5.1673091520186851e+00 1.1507497875855961e+00 1 0 0 -101 1 1 1.5750000000000000e+00 -7.7038948864236607e+00 7.4761709779946877e+00 -3.7563858194751276e-03 1 0 0 -102 1 2 2.1000000000000001e+00 -8.4929416250579237e+00 1.0238205190912097e-01 -2.7609433628825437e+00 1 0 0 -103 1 2 2.1000000000000001e+00 -8.5162068339533832e+00 6.1131914931820752e+00 -2.7688610988552806e+00 1 0 0 -104 1 3 -1.0500000000000000e+00 -8.2954155113210621e+00 8.9971804574221004e+00 -1.1427988389805961e+00 1 0 0 -105 1 3 -1.0500000000000000e+00 -8.6509205149498847e+00 6.2059203624978956e+00 -1.1439628590241284e+00 1 0 0 -106 1 4 -9.4999999999999996e-01 -6.0100779546322549e+00 7.4024979040990928e+00 -1.0139958673379255e+00 1 0 0 -107 1 3 -1.0500000000000000e+00 -4.6609961845666854e+00 5.4102617087963587e+00 -3.2425544229802377e+00 1 0 0 -108 1 3 -1.0500000000000000e+00 -8.4038980403496684e+00 7.5874972699614922e+00 -3.2446537367483241e+00 1 0 0 -109 1 3 -1.0500000000000000e+00 -7.2507418722833936e+00 5.2614645688107124e+00 -3.0529610822747220e+00 1 0 0 -110 1 5 4.2499999999999999e-01 -5.5033059365206407e+00 8.2812208311420328e+00 -1.1575765233774842e+00 1 0 0 -111 1 1 1.5750000000000000e+00 -1.0312056810203035e+01 2.9932322130065998e+00 -3.7546907983969646e-03 1 0 0 -112 1 2 2.1000000000000001e+00 -5.8847433874873287e+00 4.5852785579583113e+00 -2.7609429033193313e+00 1 0 0 -113 1 2 2.1000000000000001e+00 -5.9643839170466686e+00 1.6303066689684940e+00 -2.7688547216593093e+00 1 0 0 -114 1 3 -1.0500000000000000e+00 -5.7435669944029248e+00 4.5142929050558713e+00 -1.1428123357037983e+00 1 0 0 -115 1 3 -1.0500000000000000e+00 -6.0991091928443781e+00 1.7230226164423819e+00 -1.1439386957606192e+00 1 0 0 -116 1 4 -9.4999999999999996e-01 -8.6183165743253909e+00 2.9195138811823007e+00 -1.0140048055866231e+00 1 0 0 -117 1 3 -1.0500000000000000e+00 -7.2691903819614820e+00 9.2736020008046438e-01 -3.2425717834672385e+00 1 0 0 -118 1 3 -1.0500000000000000e+00 -5.8520558193569849e+00 3.1046084246173429e+00 -3.2446638893543165e+00 1 0 0 -119 1 3 -1.0500000000000000e+00 -4.6989020453283867e+00 7.7850970320779922e-01 -3.0529439927969300e+00 1 0 0 -120 1 5 4.2499999999999999e-01 -8.1114486366180678e+00 3.7983239523822867e+00 -1.1577012407700238e+00 1 0 0 -121 1 1 1.5750000000000000e+00 -2.5599994626479976e+00 1.4895195225863134e+00 -3.2660642944506435e-03 1 0 0 -122 1 2 2.1000000000000001e+00 -1.7710062286867227e+00 8.8632972747936982e+00 2.7539546373495405e+00 1 0 0 -123 1 2 2.1000000000000001e+00 -1.7477123009753157e+00 2.8525136185930755e+00 2.7618236550482624e+00 1 0 0 -124 1 3 -1.0500000000000000e+00 -1.9683041681687321e+00 -3.1339314943114260e-02 1.1357434005060227e+00 1 0 0 -125 1 3 -1.0500000000000000e+00 -1.6130256197699246e+00 2.7595328394810750e+00 1.1370135266718489e+00 1 0 0 -126 1 4 -9.4999999999999996e-01 -4.2537337856944379e+00 1.5632441680250189e+00 1.0069648786930525e+00 1 0 0 -127 1 3 -1.0500000000000000e+00 -5.6028806915798572e+00 3.5553457721911457e+00 3.2357688590305571e+00 1 0 0 -128 1 3 -1.0500000000000000e+00 -1.8598151617417997e+00 1.3781457768821710e+00 3.2374742127375917e+00 1 0 0 -129 1 3 -1.0500000000000000e+00 -3.0132009706882785e+00 3.7041715558434340e+00 3.0459588995882712e+00 1 0 0 -130 1 5 4.2499999999999999e-01 -4.7606046035337171e+00 6.8439349642540748e-01 1.1505607409996657e+00 1 0 0 -131 1 1 1.5750000000000000e+00 4.8168369057153271e-02 5.9724605712145085e+00 -3.2704117388746567e-03 1 0 0 -132 1 2 2.1000000000000001e+00 -4.3791817898634946e+00 4.3804013865484848e+00 2.7539658968809935e+00 1 0 0 -133 1 2 2.1000000000000001e+00 -4.2995319515097883e+00 7.3353882982958218e+00 2.7618078686262244e+00 1 0 0 -134 1 3 -1.0500000000000000e+00 -4.5201407292494871e+00 4.4515523522287275e+00 1.1357346289073345e+00 1 0 0 -135 1 3 -1.0500000000000000e+00 -4.1648406595123815e+00 7.2424265294413708e+00 1.1369912415882819e+00 1 0 0 -136 1 4 -9.4999999999999996e-01 -1.6454953945829232e+00 6.0462304571223804e+00 1.0070026477177905e+00 1 0 0 -137 1 3 -1.0500000000000000e+00 -2.9946439468920527e+00 8.0382690637231917e+00 3.2357743104080114e+00 1 0 0 -138 1 3 -1.0500000000000000e+00 -4.4116515205365854e+00 5.8610507068010520e+00 3.2374621599322246e+00 1 0 0 -139 1 3 -1.0500000000000000e+00 -5.5650494733788616e+00 8.1871266439263444e+00 3.0459458790032787e+00 1 0 0 -140 1 5 4.2499999999999999e-01 -2.1524218145509142e+00 5.1673462038601450e+00 1.1508591924041909e+00 1 0 0 -141 1 1 1.5750000000000000e+00 -2.5438859347542353e+00 7.4761697245415135e+00 -3.7582632092334478e-03 1 0 0 -142 1 2 2.1000000000000001e+00 -3.3329363804842851e+00 1.0236811376637078e-01 -2.7609530240071400e+00 1 0 0 -143 1 2 2.1000000000000001e+00 -3.3561829873008966e+00 6.1132000526679882e+00 -2.7688597295862918e+00 1 0 0 -144 1 3 -1.0500000000000000e+00 -3.1354235356298261e+00 8.9971842040066932e+00 -1.1427807792040543e+00 1 0 0 -145 1 3 -1.0500000000000000e+00 -3.4909182600583835e+00 6.2059094368932080e+00 -1.1439561958179105e+00 1 0 0 -146 1 4 -9.4999999999999996e-01 -8.5008735848989936e-01 7.4024836920448358e+00 -1.0139778123793981e+00 1 0 0 -147 1 3 -1.0500000000000000e+00 4.9904929440264922e-01 5.4102852955378324e+00 -3.2425656000684357e+00 1 0 0 -148 1 3 -1.0500000000000000e+00 -3.2438965163198175e+00 7.5875255784303768e+00 -3.2446584652783006e+00 1 0 0 -149 1 3 -1.0500000000000000e+00 -2.0907332304654513e+00 5.2614599131077355e+00 -3.0529635108663689e+00 1 0 0 -150 1 5 4.2499999999999999e-01 -3.4327252441785028e-01 8.2812545429943718e+00 -1.1574891817763771e+00 1 0 0 -151 1 1 1.5750000000000000e+00 -5.1520707526539180e+00 2.9932422696247407e+00 -3.7575710303681120e-03 1 0 0 -152 1 2 2.1000000000000001e+00 -7.2476725112305829e-01 4.5852758198773422e+00 -2.7609523624229535e+00 1 0 0 -153 1 2 2.1000000000000001e+00 -8.0438924000571177e-01 1.6303201218117742e+00 -2.7688428916587142e+00 1 0 0 -154 1 3 -1.0500000000000000e+00 -5.8358168128787469e-01 4.5142909571471250e+00 -1.1427842365077652e+00 1 0 0 -155 1 3 -1.0500000000000000e+00 -9.3910616162538574e-01 1.7230269705662700e+00 -1.1439410014752056e+00 1 0 0 -156 1 4 -9.4999999999999996e-01 -3.4582854395786136e+00 2.9195566902968508e+00 -1.0139875801681342e+00 1 0 0 -157 1 3 -1.0500000000000000e+00 -2.1091939503703152e+00 9.2735770730401157e-01 -3.2425784113786129e+00 1 0 0 -158 1 3 -1.0500000000000000e+00 -6.9205988720759315e-01 3.1045918731948028e+00 -3.2446474792644775e+00 1 0 0 -159 1 3 -1.0500000000000000e+00 4.6110929925033162e-01 7.7850537414041909e-01 -3.0529474813034367e+00 1 0 0 -160 1 5 4.2499999999999999e-01 -2.9514312473451580e+00 3.7983374737998545e+00 -1.1575435527823981e+00 1 0 0 -161 1 1 1.5750000000000000e+00 2.6563134001835174e+00 1.0455371516328153e+01 -3.2734775751421807e-03 0 0 0 -162 1 2 2.1000000000000001e+00 3.2200000793507915e+00 -1.8034168055802969e+01 2.7539699954278376e+00 0 1 0 -163 1 2 2.1000000000000001e+00 3.4686304351053021e+00 1.1818330371923647e+01 2.7618152520441335e+00 0 0 0 -164 1 3 -1.0500000000000000e+00 3.2480341177807297e+00 8.9344903893301542e+00 1.1357344410643542e+00 0 0 0 -165 1 3 -1.0500000000000000e+00 3.6033098122302398e+00 1.1725346434065575e+01 1.1370112044265888e+00 0 0 0 -166 1 4 -9.4999999999999996e-01 9.6267397491767959e-01 1.0529174885771052e+01 1.0070252189892397e+00 0 0 0 -167 1 3 -1.0500000000000000e+00 -3.8653877399151604e-01 1.2521163438190538e+01 3.2357641403694473e+00 0 0 0 -168 1 3 -1.0500000000000000e+00 3.3565301561723722e+00 1.0343985356367806e+01 3.2374269175278840e+00 0 0 0 -169 1 3 -1.0500000000000000e+00 2.2031200709181498e+00 1.2669998832466721e+01 3.0459640112402759e+00 0 0 0 -170 1 5 4.2499999999999999e-01 4.5576637197079073e-01 9.6503202047150296e+00 1.1510612204759685e+00 0 0 0 -171 1 1 1.5750000000000000e+00 5.2644962792255114e+00 1.4938261534530948e+01 -3.2647451325473753e-03 0 0 0 -172 1 2 2.1000000000000001e+00 8.3716356417033211e-01 1.3346218268802954e+01 2.7539470758802835e+00 0 0 0 -173 1 2 2.1000000000000001e+00 9.1681075011299562e-01 1.6301231345167661e+01 2.7618125766893566e+00 0 0 0 -174 1 3 -1.0500000000000000e+00 6.9620077398076852e-01 1.3417388047104328e+01 1.1357329589097631e+00 0 0 0 -175 1 3 -1.0500000000000000e+00 1.0514831822196271e+00 1.6208254021374852e+01 1.1370122634561355e+00 0 0 0 -176 1 4 -9.4999999999999996e-01 3.5707945950799811e+00 1.5012003258438757e+01 1.0069522165247839e+00 0 0 0 -177 1 3 -1.0500000000000000e+00 2.2216102376958187e+00 1.7004067428805609e+01 3.2357767642373751e+00 0 0 0 -178 1 3 -1.0500000000000000e+00 8.0468569905412757e-01 1.4826903246577299e+01 3.2374729366625967e+00 0 0 0 -179 1 3 -1.0500000000000000e+00 -3.4870265184444982e-01 1.7152922875565228e+01 3.0459529855636607e+00 0 0 0 -180 1 5 4.2499999999999999e-01 3.0638743761134464e+00 1.4133083814238685e+01 1.1505085237616779e+00 0 0 0 -181 1 1 1.5750000000000000e+00 2.6724321383913008e+00 1.6441984484756983e+01 -3.7572437476853793e-03 0 0 0 -182 1 2 2.1000000000000001e+00 1.8833962660382699e+00 9.0681931419489921e+00 -2.7609335407081872e+00 0 0 0 -183 1 2 2.1000000000000001e+00 1.8601111196809121e+00 1.5079040342628350e+01 -2.7688508235497418e+00 0 0 0 -184 1 3 -1.0500000000000000e+00 1.8555857070306878e+00 -1.7900270605410917e+01 -1.1427969927137482e+00 0 1 0 -185 1 3 -1.0500000000000000e+00 1.7253995479611604e+00 1.5171757634659638e+01 -1.1439490826924779e+00 0 0 0 -186 1 4 -9.4999999999999996e-01 4.3662322107158733e+00 1.6368309943641055e+01 -1.0139855229210077e+00 0 0 0 -187 1 3 -1.0500000000000000e+00 5.7153027190516923e+00 1.4376080986155142e+01 -3.2425652845281192e+00 0 0 0 -188 1 3 -1.0500000000000000e+00 1.9724442262540727e+00 1.6553320295057897e+01 -3.2446645540223695e+00 0 0 0 -189 1 3 -1.0500000000000000e+00 3.1255993997228746e+00 1.4227253671506265e+01 -3.0529479201541534e+00 0 0 0 -190 1 5 4.2499999999999999e-01 4.8730503872703981e+00 1.7247084738816252e+01 -1.1575108950696489e+00 0 0 0 -191 1 1 1.5750000000000000e+00 6.4287605771619738e-02 1.1959047499133955e+01 -3.7503865813821591e-03 0 0 0 -192 1 2 2.1000000000000001e+00 4.4915804029907438e+00 1.3551111831722395e+01 -2.7609471625592663e+00 0 0 0 -193 1 2 2.1000000000000001e+00 4.4119577432399595e+00 1.0596109686747351e+01 -2.7688628659227765e+00 0 0 0 -194 1 3 -1.0500000000000000e+00 4.6327720860930999e+00 1.3480101674103746e+01 -1.1428277031521787e+00 0 0 0 -195 1 3 -1.0500000000000000e+00 4.2772319797087590e+00 1.0688840900034439e+01 -1.1439426903633443e+00 0 0 0 -196 1 4 -9.4999999999999996e-01 1.7580042741312081e+00 1.1885300143491271e+01 -1.0140430923412715e+00 0 0 0 -197 1 3 -1.0500000000000000e+00 3.1071547577327969e+00 9.8931852268420180e+00 -3.2425655357851380e+00 0 0 0 -198 1 3 -1.0500000000000000e+00 4.5242699949370255e+00 1.2070431784027537e+01 -3.2446352562949325e+00 0 0 0 -199 1 3 -1.0500000000000000e+00 5.6774301856846563e+00 9.7443531193086770e+00 -3.0529533590117293e+00 0 0 0 -200 1 5 4.2499999999999999e-01 2.2648570458734767e+00 1.2764054876209290e+01 -1.1579888107521015e+00 0 0 0 -201 1 1 1.5750000000000000e+00 7.8163274667709004e+00 1.0455361822489916e+01 -3.2709891462765484e-03 0 0 0 -202 1 2 2.1000000000000001e+00 -1.2260022563792901e+01 -1.8034171036451074e+01 2.7539593838063130e+00 1 1 0 -203 1 2 2.1000000000000001e+00 -1.2011372927310228e+01 1.1818343457748362e+01 2.7618265468659775e+00 1 0 0 -204 1 3 -1.0500000000000000e+00 8.4080197705526096e+00 8.9344884845612391e+00 1.1357635616008466e+00 0 0 0 -205 1 3 -1.0500000000000000e+00 -1.1876687672220676e+01 1.1725350016313566e+01 1.1370089651291622e+00 1 0 0 -206 1 4 -9.4999999999999996e-01 6.1226432401957958e+00 1.0529133102795765e+01 1.0070115060204152e+00 0 0 0 -207 1 3 -1.0500000000000000e+00 4.7734668544665446e+00 1.2521166817291366e+01 3.2357690806651949e+00 0 0 0 -208 1 3 -1.0500000000000000e+00 -1.2123474030539958e+01 1.0343970332896109e+01 3.2374431734477387e+00 1 0 0 -209 1 3 -1.0500000000000000e+00 7.3631314638252157e+00 1.2669994182427597e+01 3.0459606244004132e+00 0 0 0 -210 1 5 4.2499999999999999e-01 5.6157533562485771e+00 9.6503133176461908e+00 1.1509245775060091e+00 0 0 0 -211 1 1 1.5750000000000000e+00 -1.0215496529349888e+01 1.4938261423331294e+01 -3.2671984669594423e-03 1 0 0 -212 1 2 2.1000000000000001e+00 5.9971582839890871e+00 1.3346232288807276e+01 2.7539563176022028e+00 0 0 0 -213 1 2 2.1000000000000001e+00 6.0767870017495582e+00 1.6301224009304729e+01 2.7618126124878195e+00 0 0 0 -214 1 3 -1.0500000000000000e+00 5.8562070155499164e+00 1.3417384395333375e+01 1.1357183501401593e+00 0 0 0 -215 1 3 -1.0500000000000000e+00 6.2114804261402661e+00 1.6208264386955651e+01 1.1370050309136168e+00 0 0 0 -216 1 4 -9.4999999999999996e-01 -1.1909211620817819e+01 1.5011994029862020e+01 1.0069718593232118e+00 1 0 0 -217 1 3 -1.0500000000000000e+00 7.3816555131360566e+00 1.7004091118074196e+01 3.2357656756583246e+00 0 0 0 -218 1 3 -1.0500000000000000e+00 5.9646835115051537e+00 1.4826873453180109e+01 3.2374785589618078e+00 0 0 0 -219 1 3 -1.0500000000000000e+00 4.8112906275483347e+00 1.7152926240598543e+01 3.0459544088802879e+00 0 0 0 -220 1 5 4.2499999999999999e-01 8.2239086021434531e+00 1.4133118218483940e+01 1.1506108499324537e+00 0 0 0 -221 1 1 1.5750000000000000e+00 7.8324408920161304e+00 1.6441983610717937e+01 -3.7594297909890884e-03 0 0 0 -222 1 2 2.1000000000000001e+00 7.0433997235143551e+00 9.0681792148270475e+00 -2.7609433793505778e+00 0 0 0 -223 1 2 2.1000000000000001e+00 7.0201340001296231e+00 1.5079048983075904e+01 -2.7688496626705303e+00 0 0 0 -224 1 3 -1.0500000000000000e+00 7.0155782305852874e+00 -1.7900266980861765e+01 -1.1427797504921990e+00 0 1 0 -225 1 3 -1.0500000000000000e+00 6.8854016068099639e+00 1.5171747073972536e+01 -1.1439426401780413e+00 0 0 0 -226 1 4 -9.4999999999999996e-01 -1.1113777147342798e+01 1.6368296182520734e+01 -1.0139673644246923e+00 1 0 0 -227 1 3 -1.0500000000000000e+00 -9.7646511702758900e+00 1.4376104836232383e+01 -3.2425769131107307e+00 1 0 0 -228 1 3 -1.0500000000000000e+00 7.1324461842806457e+00 1.6553349104877181e+01 -3.2446699530389926e+00 0 0 0 -229 1 3 -1.0500000000000000e+00 8.2856077950535507e+00 1.4227248777578755e+01 -3.0529496330623935e+00 0 0 0 -230 1 5 4.2499999999999999e-01 -1.0606916142948355e+01 1.7247118324243235e+01 -1.1574224546860155e+00 1 0 0 -231 1 1 1.5750000000000000e+00 5.2242739244354812e+00 1.1959056994618571e+01 -3.7532727914637576e-03 0 0 0 -232 1 2 2.1000000000000001e+00 -1.0988443129796577e+01 1.3551110560593809e+01 -2.7609569176995983e+00 1 0 0 -233 1 2 2.1000000000000001e+00 -1.1068048695702130e+01 1.0596121856381689e+01 -2.7688513474828484e+00 1 0 0 -234 1 3 -1.0500000000000000e+00 -1.0847241951081806e+01 1.3480099061382369e+01 -1.1428004053747500e+00 1 0 0 -235 1 3 -1.0500000000000000e+00 -1.1202765363241992e+01 1.0688845693686350e+01 -1.1439459591196393e+00 1 0 0 -236 1 4 -9.4999999999999996e-01 6.9180337353417016e+00 1.1885339729941098e+01 -1.0140270633946198e+00 0 0 0 -237 1 3 -1.0500000000000000e+00 8.2671524098729279e+00 9.8931836876833437e+00 -3.2425721304984254e+00 0 0 0 -238 1 3 -1.0500000000000000e+00 -1.0955734208517388e+01 1.2070414566453039e+01 -3.2446182476609398e+00 1 0 0 -239 1 3 -1.0500000000000000e+00 -9.8025577056732693e+00 9.7443480474548068e+00 -3.0529560570682035e+00 1 0 0 -240 1 5 4.2499999999999999e-01 7.4248734752605259e+00 1.2764066295177155e+01 -1.1578424655573620e+00 0 0 0 -241 1 1 1.5750000000000000e+00 -7.6636863980105723e+00 1.0455371549550875e+01 -3.2736966669304479e-03 1 0 0 -242 1 2 2.1000000000000001e+00 -7.0999990710355192e+00 -1.8034168111282145e+01 2.7539701102788019e+00 1 1 0 -243 1 2 2.1000000000000001e+00 -6.8513690426892451e+00 1.1818330417854160e+01 2.7618149786464521e+00 1 0 0 -244 1 3 -1.0500000000000000e+00 -7.0719662711101812e+00 8.9344903042783628e+00 1.1357345069924225e+00 1 0 0 -245 1 3 -1.0500000000000000e+00 -6.7166907540342233e+00 1.1725346382842613e+01 1.1370110473100272e+00 1 0 0 -246 1 4 -9.4999999999999996e-01 -9.3573260672622727e+00 1.0529174208841528e+01 1.0070252131964725e+00 1 0 0 -247 1 3 -1.0500000000000000e+00 -1.0706539610507846e+01 1.2521163280396088e+01 3.2357640814962956e+00 1 0 0 -248 1 3 -1.0500000000000000e+00 -6.9634703631137729e+00 1.0343985091037393e+01 3.2374266804707119e+00 1 0 0 -249 1 3 -1.0500000000000000e+00 -8.1168803339350379e+00 1.2669999097078030e+01 3.0459638003843619e+00 1 0 0 -250 1 5 4.2499999999999999e-01 -9.8642334722321223e+00 9.6503204443188402e+00 1.1510602007101145e+00 1 0 0 -251 1 1 1.5750000000000000e+00 -5.0555038517207738e+00 1.4938261738890343e+01 -3.2644360310367659e-03 1 0 0 -252 1 2 2.1000000000000001e+00 -9.4828364774811842e+00 1.3346217905042987e+01 2.7539473478098913e+00 1 0 0 -253 1 2 2.1000000000000001e+00 -9.4031892666074217e+00 1.6301231779632818e+01 2.7618124621169056e+00 1 0 0 -254 1 3 -1.0500000000000000e+00 -9.6237991655729793e+00 1.3417388438033317e+01 1.1357331457960171e+00 1 0 0 -255 1 3 -1.0500000000000000e+00 -9.2685168345328872e+00 1.6208253547145770e+01 1.1370123846061553e+00 1 0 0 -256 1 4 -9.4999999999999996e-01 -6.7492056915652885e+00 1.5012003321026935e+01 1.0069523554452928e+00 1 0 0 -257 1 3 -1.0500000000000000e+00 -8.0983893100633519e+00 1.7004067932473877e+01 3.2357766175726148e+00 1 0 0 -258 1 3 -1.0500000000000000e+00 -9.5153144179962954e+00 1.4826903279627327e+01 3.2374724255443947e+00 1 0 0 -259 1 3 -1.0500000000000000e+00 -1.0668703168553188e+01 1.7152922672989472e+01 3.0459531606477839e+00 1 0 0 -260 1 5 4.2499999999999999e-01 -7.2561252036506980e+00 1.4133084321951994e+01 1.1505098705128987e+00 1 0 0 -261 1 1 1.5750000000000000e+00 -7.6475676736905971e+00 1.6441984614323157e+01 -3.7576410911643876e-03 1 0 0 -262 1 2 2.1000000000000001e+00 -8.4366040275132406e+00 9.0681930278031473e+00 -2.7609335500569747e+00 1 0 0 -263 1 2 2.1000000000000001e+00 -8.4598890146513455e+00 1.5079040601080134e+01 -2.7688510489233167e+00 1 0 0 -264 1 3 -1.0500000000000000e+00 -8.4644143079304612e+00 -1.7900269957740477e+01 -1.1427967775321957e+00 1 1 0 -265 1 3 -1.0500000000000000e+00 -8.5946007116663132e+00 1.5171756827133724e+01 -1.1439485975510628e+00 1 0 0 -266 1 4 -9.4999999999999996e-01 -5.9537679681653151e+00 1.6368309168283670e+01 -1.0139856989316165e+00 1 0 0 -267 1 3 -1.0500000000000000e+00 -4.6046964494860898e+00 1.4376081286353607e+01 -3.2425649205705174e+00 1 0 0 -268 1 3 -1.0500000000000000e+00 -8.3475558754399124e+00 1.6553320859356912e+01 -3.2446655570405536e+00 1 0 0 -269 1 3 -1.0500000000000000e+00 -7.1944009052872069e+00 1.4227253415250768e+01 -3.0529479683150100e+00 1 0 0 -270 1 5 4.2499999999999999e-01 -5.4469496542482680e+00 1.7247084860834857e+01 -1.1575125267203532e+00 1 0 0 -271 1 1 1.5750000000000000e+00 -1.0255712633101528e+01 1.1959047249232842e+01 -3.7503693590110743e-03 1 0 0 -272 1 2 2.1000000000000001e+00 -5.8284201346147073e+00 1.3551112633249122e+01 -2.7609471419709433e+00 1 0 0 -273 1 2 2.1000000000000001e+00 -5.9080424941932153e+00 1.0596109220690689e+01 -2.7688628072186683e+00 1 0 0 -274 1 3 -1.0500000000000000e+00 -5.6872277599586996e+00 1.3480101435889090e+01 -1.1428283866518854e+00 1 0 0 -275 1 3 -1.0500000000000000e+00 -6.0427680579917293e+00 1.0688841214141384e+01 -1.1439433517717656e+00 1 0 0 -276 1 4 -9.4999999999999996e-01 -8.5619959665734147e+00 1.1885299915121873e+01 -1.0140429279795615e+00 1 0 0 -277 1 3 -1.0500000000000000e+00 -7.2128453343082271e+00 9.8931855774587198e+00 -3.2425657643378525e+00 1 0 0 -278 1 3 -1.0500000000000000e+00 -5.7957299312633053e+00 1.2070431551626321e+01 -3.2446350249445235e+00 1 0 0 -279 1 3 -1.0500000000000000e+00 -4.6425695661462196e+00 9.7443530477275679e+00 -3.0529532196506795e+00 1 0 0 -280 1 5 4.2499999999999999e-01 -8.0551425673563894e+00 1.2764055666864170e+01 -1.1579876909028854e+00 1 0 0 -281 1 1 1.5750000000000000e+00 -2.5036724751688171e+00 1.0455361759083811e+01 -3.2712711680531470e-03 1 0 0 -282 1 2 2.1000000000000001e+00 -1.9400228605798482e+00 -1.8034171454532189e+01 2.7539596865588258e+00 1 1 0 -283 1 2 2.1000000000000001e+00 -1.6913729123417731e+00 1.1818343618664318e+01 2.7618267327017616e+00 1 0 0 -284 1 3 -1.0500000000000000e+00 -1.9119803931372488e+00 8.9344892347650671e+00 1.1357639880848378e+00 1 0 0 -285 1 3 -1.0500000000000000e+00 -1.5566878690749917e+00 1.1725349553088837e+01 1.1370088549317554e+00 1 0 0 -286 1 4 -9.4999999999999996e-01 -4.1973568501655052e+00 1.0529132534062505e+01 1.0070110973834296e+00 1 0 0 -287 1 3 -1.0500000000000000e+00 -5.5465318119038987e+00 1.2521167504631986e+01 3.2357693370264009e+00 1 0 0 -288 1 3 -1.0500000000000000e+00 -1.8034741996403554e+00 1.0343970336471010e+01 3.2374423050401600e+00 1 0 0 -289 1 3 -1.0500000000000000e+00 -2.9568695567301644e+00 1.2669994183537906e+01 3.0459605033388062e+00 1 0 0 -290 1 5 4.2499999999999999e-01 -4.7042469088330439e+00 9.6503130783144044e+00 1.1509221001927727e+00 1 0 0 -291 1 1 1.5750000000000000e+00 1.0450346973463098e-01 1.4938261236297333e+01 -3.2670506730401172e-03 1 0 0 -292 1 2 2.1000000000000001e+00 -4.3228420481760716e+00 1.3346232732007316e+01 2.7539563932159634e+00 1 0 0 -293 1 2 2.1000000000000001e+00 -4.2432134692497367e+00 1.6301223752354527e+01 2.7618123881160574e+00 1 0 0 -294 1 3 -1.0500000000000000e+00 -4.4637927327409024e+00 1.3417383967610970e+01 1.1357180288639768e+00 1 0 0 -295 1 3 -1.0500000000000000e+00 -4.1085196585471646e+00 1.6208264626532635e+01 1.1370043708840640e+00 1 0 0 -296 1 4 -9.4999999999999996e-01 -1.5892118927513685e+00 1.5011993465855195e+01 1.0069717418888526e+00 1 0 0 -297 1 3 -1.0500000000000000e+00 -2.9383445989094135e+00 1.7004091419961096e+01 3.2357659595260095e+00 1 0 0 -298 1 3 -1.0500000000000000e+00 -4.3553166601485476e+00 1.4826873197424877e+01 3.2374790045700852e+00 1 0 0 -299 1 3 -1.0500000000000000e+00 -5.5087090978359239e+00 1.7152925908147093e+01 3.0459546197474001e+00 1 0 0 -300 1 5 4.2499999999999999e-01 -2.0960913924612612e+00 1.4133118310388799e+01 1.1506099517336104e+00 1 0 0 -301 1 1 1.5750000000000000e+00 -2.4875591017952310e+00 1.6441983631942183e+01 -3.7595151500315893e-03 1 0 0 -302 1 2 2.1000000000000001e+00 -3.2765996605939858e+00 9.0681789268622346e+00 -2.7609433563661456e+00 1 0 0 -303 1 2 2.1000000000000001e+00 -3.2998653023383682e+00 1.5079049184116290e+01 -2.7688496671533649e+00 1 0 0 -304 1 3 -1.0500000000000000e+00 -3.3044219890671753e+00 -1.7900266681096994e+01 -1.1427795585717835e+00 1 1 0 -305 1 3 -1.0500000000000000e+00 -3.4345989454937165e+00 1.5171746655803712e+01 -1.1439426919442308e+00 1 0 0 -306 1 4 -9.4999999999999996e-01 -7.9377665672300779e-01 1.6368296633100169e+01 -1.0139672617067319e+00 1 0 0 -307 1 3 -1.0500000000000000e+00 5.5534868438584084e-01 1.4376105151954103e+01 -3.2425775178456107e+00 1 0 0 -308 1 3 -1.0500000000000000e+00 -3.1875541544200496e+00 1.6553349368867583e+01 -3.2446705490554963e+00 1 0 0 -309 1 3 -1.0500000000000000e+00 -2.0343923260202423e+00 1.4227248534036743e+01 -3.0529497284009599e+00 1 0 0 -310 1 5 4.2499999999999999e-01 -2.8691619587030104e-01 1.7247118382062236e+01 -1.1574212565794415e+00 1 0 0 -311 1 1 1.5750000000000000e+00 -5.0957261453677205e+00 1.1959057139099524e+01 -3.7531547867057924e-03 1 0 0 -312 1 2 2.1000000000000001e+00 -6.6844354483350799e-01 1.3551110266998439e+01 -2.7609568234960040e+00 1 0 0 -313 1 2 2.1000000000000001e+00 -7.4804896223840167e-01 1.0596122230984061e+01 -2.7688515273933572e+00 1 0 0 -314 1 3 -1.0500000000000000e+00 -5.2724202123535946e-01 1.3480098969688658e+01 -1.1428001598979964e+00 1 0 0 -315 1 3 -1.0500000000000000e+00 -8.8276536122547178e-01 1.0688845631800483e+01 -1.1439460002810460e+00 1 0 0 -316 1 4 -9.4999999999999996e-01 -3.4019662726515918e+00 1.1885340094739142e+01 -1.0140272109664838e+00 1 0 0 -317 1 3 -1.0500000000000000e+00 -2.0528473081502625e+00 9.8931841810449264e+00 -3.2425722407459503e+00 1 0 0 -318 1 3 -1.0500000000000000e+00 -6.3573424619330154e-01 1.2070414396821146e+01 -3.2446180957081046e+00 1 0 0 -319 1 3 -1.0500000000000000e+00 5.1744185669619647e-01 9.7443480289127145e+00 -3.0529559039522471e+00 1 0 0 -320 1 5 4.2499999999999999e-01 -2.8951265260920414e+00 1.2764066156472012e+01 -1.1578424373010439e+00 1 0 0 -321 1 1 1.5750000000000000e+00 2.4873158312812595e+00 -1.6442085140542702e+01 -3.2731044767775330e-03 0 1 0 -322 1 2 2.1000000000000001e+00 3.2763303149493339e+00 -9.0683326576281793e+00 2.7539613504973826e+00 0 1 0 -323 1 2 2.1000000000000001e+00 3.2996440062323522e+00 -1.5079163855001152e+01 2.7618052351303000e+00 0 1 0 -324 1 3 -1.0500000000000000e+00 3.0790227247234743e+00 -1.7962996900519780e+01 1.1357369105052264e+00 0 1 0 -325 1 3 -1.0500000000000000e+00 3.4343217071143606e+00 -1.5172137633996615e+01 1.1369964612814574e+00 0 1 0 -326 1 4 -9.4999999999999996e-01 7.9370044014982000e-01 -1.6368273971208470e+01 1.0070225988534567e+00 0 1 0 -327 1 3 -1.0500000000000000e+00 -5.5550646979719431e-01 -1.4376303482612908e+01 3.2357750050409617e+00 0 1 0 -328 1 3 -1.0500000000000000e+00 3.1875194117149164e+00 -1.6553483052839894e+01 3.2374345381514082e+00 0 1 0 -329 1 3 -1.0500000000000000e+00 2.0341105779595932e+00 -1.4227436497588396e+01 3.0459506035312476e+00 0 1 0 -330 1 5 4.2499999999999999e-01 2.8674517218617801e-01 -1.7247173634562643e+01 1.1510526978509290e+00 0 1 0 -331 1 1 1.5750000000000000e+00 5.0954822332712713e+00 -1.1959202907500007e+01 -3.2689027687062833e-03 0 1 0 -332 1 2 2.1000000000000001e+00 6.6817149298760725e-01 -1.3551259854316488e+01 2.7539499370113383e+00 0 1 0 -333 1 2 2.1000000000000001e+00 7.4779844304577914e-01 -1.0596215429331199e+01 2.7618213942130811e+00 0 1 0 -334 1 3 -1.0500000000000000e+00 5.2719372455953284e-01 -1.3480064946544015e+01 1.1357459580603049e+00 0 1 0 -335 1 3 -1.0500000000000000e+00 8.8247034442780148e-01 -1.0689208474290135e+01 1.1370185048637591e+00 0 1 0 -336 1 4 -9.4999999999999996e-01 3.4017986335829793e+00 -1.1885434663339312e+01 1.0069865452366784e+00 0 1 0 -337 1 3 -1.0500000000000000e+00 2.0525899417440829e+00 -9.8934041355699218e+00 3.2357693155049283e+00 0 1 0 -338 1 3 -1.0500000000000000e+00 6.3569045021168691e-01 -1.2070565156037954e+01 3.2374462468578749e+00 0 1 0 -339 1 3 -1.0500000000000000e+00 -5.1770556733988826e-01 -9.7445696176577137e+00 3.0459634759630063e+00 0 1 0 -340 1 5 4.2499999999999999e-01 2.8948985199675210e+00 -1.2764300231969152e+01 1.1507672489080729e+00 0 1 0 -341 1 1 1.5750000000000000e+00 2.5034344422152106e+00 -1.0455505379844039e+01 -3.7523281344018500e-03 0 1 0 -342 1 2 2.1000000000000001e+00 1.7144048897053548e+00 -1.7829278827200582e+01 -2.7609375642366514e+00 0 1 0 -343 1 2 2.1000000000000001e+00 1.6910990452522778e+00 -1.1818431965120766e+01 -2.7688521544223557e+00 0 1 0 -344 1 3 -1.0500000000000000e+00 1.9119323284819547e+00 -8.9344496581989912e+00 -1.1428177382481586e+00 0 1 0 -345 1 3 -1.0500000000000000e+00 1.5563892707225317e+00 -1.1725703690663577e+01 -1.1439423397491009e+00 0 1 0 -346 1 4 -9.4999999999999996e-01 4.1971837724422230e+00 -1.0529223437421583e+01 -1.0140304498512833e+00 0 1 0 -347 1 3 -1.0500000000000000e+00 5.5462795339137028e+00 -1.2521387157719200e+01 -3.2425682558207303e+00 0 1 0 -348 1 3 -1.0500000000000000e+00 1.8034351269669298e+00 -1.0344148858506074e+01 -3.2446357157915351e+00 0 1 0 -349 1 3 -1.0500000000000000e+00 2.9565987372624374e+00 -1.2670221018382025e+01 -3.0529474743907752e+00 0 1 0 -350 1 5 4.2499999999999999e-01 4.7040264803948517e+00 -9.6504758402318025e+00 -1.1578593135248099e+00 0 1 0 -351 1 1 1.5750000000000000e+00 -1.0471558842234785e-01 -1.4938400364160536e+01 -3.7532330236462741e-03 0 1 0 -352 1 2 2.1000000000000001e+00 4.3225692029115947e+00 -1.3346363976966739e+01 -2.7609380283517364e+00 0 1 0 -353 1 2 2.1000000000000001e+00 4.2429709170616423e+00 -1.6301375789705347e+01 -2.7688688655989422e+00 0 1 0 -354 1 3 -1.0500000000000000e+00 4.4637558178452430e+00 -1.3417379075377282e+01 -1.1428141432543626e+00 0 1 0 -355 1 3 -1.0500000000000000e+00 4.1082428565530851e+00 -1.6208643768110964e+01 -1.1439575855412993e+00 0 1 0 -356 1 4 -9.4999999999999996e-01 1.5890483233411512e+00 -1.5012116338313390e+01 -1.0140187450303042e+00 0 1 0 -357 1 3 -1.0500000000000000e+00 2.9381893438004383e+00 -1.7004282362058166e+01 -3.2425562113891360e+00 0 1 0 -358 1 3 -1.0500000000000000e+00 4.3552644383759880e+00 -1.4827036483227031e+01 -3.2446472860660487e+00 0 1 0 -359 1 3 -1.0500000000000000e+00 5.5084200493482207e+00 -1.7153088410673128e+01 -3.0529633116519523e+00 0 1 0 -360 1 5 4.2499999999999999e-01 2.0958519709362449e+00 -1.4133378407095304e+01 -1.1577903583398630e+00 0 1 0 -361 1 1 1.5750000000000000e+00 7.6473300699624751e+00 -1.6442095286891750e+01 -3.2703635846598189e-03 0 1 0 -362 1 2 2.1000000000000001e+00 -1.2203692618505173e+01 -9.0683357616495428e+00 2.7539509521771546e+00 1 1 0 -363 1 2 2.1000000000000001e+00 -1.2180359496617088e+01 -1.5079150525191121e+01 2.7618176073756171e+00 1 1 0 -364 1 3 -1.0500000000000000e+00 8.2390082609686672e+00 -1.7962998453343072e+01 1.1357656996613876e+00 0 1 0 -365 1 3 -1.0500000000000000e+00 -1.2045675817277496e+01 -1.5172133958248716e+01 1.1369942170488319e+00 1 1 0 -366 1 4 -9.4999999999999996e-01 5.9536694527401863e+00 -1.6368316601029903e+01 1.0070080197153732e+00 0 1 0 -367 1 3 -1.0500000000000000e+00 4.6044999502781359e+00 -1.4376299637797334e+01 3.2357807367951334e+00 0 1 0 -368 1 3 -1.0500000000000000e+00 -1.2292484484628849e+01 -1.6553497884316052e+01 3.2374506520275279e+00 1 1 0 -369 1 3 -1.0500000000000000e+00 7.1941227993251466e+00 -1.4227441518171391e+01 3.0459466724115387e+00 0 1 0 -370 1 5 4.2499999999999999e-01 5.4467316809031381e+00 -1.7247181780075401e+01 1.1509108228447804e+00 0 1 0 -371 1 1 1.5750000000000000e+00 -1.0384509878063577e+01 -1.1959202847679125e+01 -3.2711064931607581e-03 1 1 0 -372 1 2 2.1000000000000001e+00 5.8281658705053552e+00 -1.3551245908771351e+01 2.7539592284405323e+00 0 1 0 -373 1 2 2.1000000000000001e+00 5.9077738247842859e+00 -1.0596222346036228e+01 2.7618212472175525e+00 0 1 0 -374 1 3 -1.0500000000000000e+00 5.6872004561341356e+00 -1.3480068502065599e+01 1.1357317122361454e+00 0 1 0 -375 1 3 -1.0500000000000000e+00 6.0424675752151202e+00 -1.0689198215110313e+01 1.1370119790707562e+00 0 1 0 -376 1 4 -9.4999999999999996e-01 -1.2078208028614750e+01 -1.1885444143137754e+01 1.0070061177644991e+00 1 1 0 -377 1 3 -1.0500000000000000e+00 7.2126361390250970e+00 -9.8933805239822377e+00 3.2357588745576784e+00 0 1 0 -378 1 3 -1.0500000000000000e+00 5.7956884111784390e+00 -1.2070595254996373e+01 3.2374511312518859e+00 0 1 0 -379 1 3 -1.0500000000000000e+00 4.6422879410256392e+00 -9.7445663758382555e+00 3.0459651484494685e+00 0 1 0 -380 1 5 4.2499999999999999e-01 8.0549327596562676e+00 -1.2764265216608282e+01 1.1508699292293620e+00 0 1 0 -381 1 1 1.5750000000000000e+00 7.6634431466777784e+00 -1.0455505708640878e+01 -3.7548033538037373e-03 0 1 0 -382 1 2 2.1000000000000001e+00 6.8744083301107217e+00 -1.7829293052197659e+01 -2.7609466521728914e+00 0 1 0 -383 1 2 2.1000000000000001e+00 6.8511227655710272e+00 -1.1818423654764077e+01 -2.7688514413745127e+00 0 1 0 -384 1 3 -1.0500000000000000e+00 7.0719252612919341e+00 -8.9344460915840020e+00 -1.1428009362290084e+00 0 1 0 -385 1 3 -1.0500000000000000e+00 6.7163919273608208e+00 -1.1725714227503657e+01 -1.1439356358725981e+00 0 1 0 -386 1 4 -9.4999999999999996e-01 -1.1282825542264309e+01 -1.0529236312045516e+01 -1.0140115555323934e+00 1 1 0 -387 1 3 -1.0500000000000000e+00 -9.9336734334620846e+00 -1.2521362616099530e+01 -3.2425798517804285e+00 1 1 0 -388 1 3 -1.0500000000000000e+00 6.9634372372059339e+00 -1.0344120541373844e+01 -3.2446411197658893e+00 0 1 0 -389 1 3 -1.0500000000000000e+00 8.1166063278059539e+00 -1.2670225192721546e+01 -3.0529487788076324e+00 0 1 0 -390 1 5 4.2499999999999999e-01 -1.0775939522237591e+01 -9.6504409144075929e+00 -1.1577656550448125e+00 1 1 0 -391 1 1 1.5750000000000000e+00 5.0552705213441183e+00 -1.4938390885101004e+01 -3.7556755525152141e-03 0 1 0 -392 1 2 2.1000000000000001e+00 -1.1157454505789488e+01 -1.3346365259602514e+01 -2.7609477580902304e+00 1 1 0 -393 1 2 2.1000000000000001e+00 -1.1237035180060985e+01 -1.6301363128204752e+01 -2.7688574109066444e+00 1 1 0 -394 1 3 -1.0500000000000000e+00 -1.1016258515593059e+01 -1.3417381597335801e+01 -1.1427868565141956e+00 1 1 0 -395 1 3 -1.0500000000000000e+00 -1.1371754569044754e+01 -1.6208638414131233e+01 -1.1439607996348045e+00 1 1 0 -396 1 4 -9.4999999999999996e-01 6.7490784560440211e+00 -1.5012076202167444e+01 -1.0140027578594140e+00 0 1 0 -397 1 3 -1.0500000000000000e+00 8.0981866850365734e+00 -1.7004283665969044e+01 -3.2425625386787402e+00 0 1 0 -398 1 3 -1.0500000000000000e+00 -1.1124739912558308e+01 -1.4827054551632816e+01 -3.2446301023047264e+00 1 1 0 -399 1 3 -1.0500000000000000e+00 -9.9715680099552539e+00 -1.7153093163802694e+01 -3.0529662797145232e+00 1 1 0 -400 1 5 4.2499999999999999e-01 7.2558685014983197e+00 -1.4133366923834902e+01 -1.1576429969303437e+00 0 1 0 -401 1 1 1.5750000000000000e+00 -7.8326838930931588e+00 -1.6442085371931373e+01 -3.2732823819223711e-03 1 1 0 -402 1 2 2.1000000000000001e+00 -7.0436687618137706e+00 -9.0683330137854199e+00 2.7539612939828899e+00 1 1 0 -403 1 2 2.1000000000000001e+00 -7.0203552020415820e+00 -1.5079163689271947e+01 2.7618054084239976e+00 1 1 0 -404 1 3 -1.0500000000000000e+00 -7.2409778107259708e+00 -1.7962996502787455e+01 1.1357372000778803e+00 1 1 0 -405 1 3 -1.0500000000000000e+00 -6.8856791733648324e+00 -1.5172137885807103e+01 1.1369963196178823e+00 1 1 0 -406 1 4 -9.4999999999999996e-01 -9.5262993670970957e+00 -1.6368274059361951e+01 1.0070224743079983e+00 1 1 0 -407 1 3 -1.0500000000000000e+00 -1.0875507123551024e+01 -1.4376303441124719e+01 3.2357750518877921e+00 1 1 0 -408 1 3 -1.0500000000000000e+00 -7.1324812203291952e+00 -1.6553483309654993e+01 3.2374341141377876e+00 1 1 0 -409 1 3 -1.0500000000000000e+00 -8.2858895255051763e+00 -1.4227436498303321e+01 3.0459500397149455e+00 1 1 0 -410 1 5 4.2499999999999999e-01 -1.0033255030691558e+01 -1.7247173624416206e+01 1.1510522172719124e+00 1 1 0 -411 1 1 1.5750000000000000e+00 -5.2245178771227252e+00 -1.1959202758526017e+01 -3.2686596132034396e-03 1 1 0 -412 1 2 2.1000000000000001e+00 -9.6518281984812564e+00 -1.3551260332238776e+01 2.7539503258911147e+00 1 1 0 -413 1 2 2.1000000000000001e+00 -9.5722019707608350e+00 -1.0596214958141957e+01 2.7618209577011115e+00 1 1 0 -414 1 3 -1.0500000000000000e+00 -9.7928062006518743e+00 -1.3480064638111777e+01 1.1357461718012836e+00 1 1 0 -415 1 3 -1.0500000000000000e+00 -9.4375295209633592e+00 -1.0689208902166378e+01 1.1370191291599561e+00 1 1 0 -416 1 4 -9.4999999999999996e-01 -6.9182015257625187e+00 -1.1885434141823438e+01 1.0069865076337194e+00 1 1 0 -417 1 3 -1.0500000000000000e+00 -8.2674096516605591e+00 -9.8934036664961500e+00 3.2357692780579193e+00 1 1 0 -418 1 3 -1.0500000000000000e+00 -9.6843094688930229e+00 -1.2070565339252298e+01 3.2374457243298291e+00 1 1 0 -419 1 3 -1.0500000000000000e+00 -1.0837706493502655e+01 -9.7445692971577635e+00 3.0459634859134095e+00 1 1 0 -420 1 5 4.2499999999999999e-01 -7.4251012846331328e+00 -1.2764299901878989e+01 1.1507685978831965e+00 1 1 0 -421 1 1 1.5750000000000000e+00 -7.8165653710802498e+00 -1.0455505239212570e+01 -3.7526247607146956e-03 1 1 0 -422 1 2 2.1000000000000001e+00 -8.6055950659194451e+00 -1.7829279483493142e+01 -2.7609372605772293e+00 1 1 0 -423 1 2 2.1000000000000001e+00 -8.6289008782796017e+00 -1.1818431879204407e+01 -2.7688521292950892e+00 1 1 0 -424 1 3 -1.0500000000000000e+00 -8.4080675550031589e+00 -8.9344488405749729e+00 -1.1428176752375947e+00 1 1 0 -425 1 3 -1.0500000000000000e+00 -8.7636107163403185e+00 -1.1725704386940036e+01 -1.1439420773679156e+00 1 1 0 -426 1 4 -9.4999999999999996e-01 -6.1228163916760510e+00 -1.0529224175237184e+01 -1.0140309851989482e+00 1 1 0 -427 1 3 -1.0500000000000000e+00 -4.7737195815235491e+00 -1.2521386711486187e+01 -3.2425678127633280e+00 1 1 0 -428 1 3 -1.0500000000000000e+00 -8.5165649126724521e+00 -1.0344149018842892e+01 -3.2446367291315585e+00 1 1 0 -429 1 3 -1.0500000000000000e+00 -7.3634018650483775e+00 -1.2670221015317008e+01 -3.0529473079508476e+00 1 1 0 -430 1 5 4.2499999999999999e-01 -5.6159739075346202e+00 -9.6504763623609211e+00 -1.1578626433938446e+00 1 1 0 -431 1 1 1.5750000000000000e+00 -1.0424715562756791e+01 -1.4938400553082197e+01 -3.7529812015879571e-03 1 1 0 -432 1 2 2.1000000000000001e+00 -5.9974311083098977e+00 -1.3346363613537441e+01 -2.7609379380798256e+00 1 1 0 -433 1 2 2.1000000000000001e+00 -6.0770293492200240e+00 -1.6301376203040785e+01 -2.7688686473689419e+00 1 1 0 -434 1 3 -1.0500000000000000e+00 -5.8562441201571032e+00 -1.3417379284137553e+01 -1.1428148565171732e+00 1 1 0 -435 1 3 -1.0500000000000000e+00 -6.2117573594784972e+00 -1.6208643250903787e+01 -1.1439581431602814e+00 1 1 0 -436 1 4 -9.4999999999999996e-01 -8.7309519339587123e+00 -1.5012116780663984e+01 -1.0140186145754715e+00 1 1 0 -437 1 3 -1.0500000000000000e+00 -7.3818111353884994e+00 -1.7004282131950792e+01 -3.2425561129342411e+00 1 1 0 -438 1 3 -1.0500000000000000e+00 -5.9647356400559168e+00 -1.4827036902064780e+01 -3.2446470576896891e+00 1 1 0 -439 1 3 -1.0500000000000000e+00 -4.8115794831903598e+00 -1.7153088674562756e+01 -3.0529634737335600e+00 1 1 0 -440 1 5 4.2499999999999999e-01 -8.2241476630143868e+00 -1.4133377854348987e+01 -1.1577899116091555e+00 1 1 0 -441 1 1 1.5750000000000000e+00 -2.6726699900750228e+00 -1.6442095184071334e+01 -3.2708152303708715e-03 1 1 0 -442 1 2 2.1000000000000001e+00 -1.8836926728028871e+00 -9.0683360706481988e+00 2.7539509370400470e+00 1 1 0 -443 1 2 2.1000000000000001e+00 -1.8603595713516334e+00 -1.5079150161517486e+01 2.7618175803065235e+00 1 1 0 -444 1 3 -1.0500000000000000e+00 -2.0809915940246260e+00 -1.7962997831100317e+01 1.1357659249768037e+00 1 1 0 -445 1 3 -1.0500000000000000e+00 -1.7256757375340950e+00 -1.5172134571584408e+01 1.1369946994743039e+00 1 1 0 -446 1 4 -9.4999999999999996e-01 -4.3663303959113087e+00 -1.6368316840061311e+01 1.0070078045087598e+00 1 1 0 -447 1 3 -1.0500000000000000e+00 -5.7154995299878735e+00 -1.4376299278351169e+01 3.2357812249751525e+00 1 1 0 -448 1 3 -1.0500000000000000e+00 -1.9724845002142448e+00 -1.6553498331239307e+01 3.2374496312659460e+00 1 1 0 -449 1 3 -1.0500000000000000e+00 -3.1258773791373198e+00 -1.4227441660105004e+01 3.0459467420251194e+00 1 1 0 -450 1 5 4.2499999999999999e-01 -4.8732684553684695e+00 -1.7247182150638707e+01 1.1509092295157224e+00 1 1 0 -451 1 1 1.5750000000000000e+00 -6.4509876999837346e-02 -1.1959203109449142e+01 -3.2708769273028793e-03 1 1 0 -452 1 2 2.1000000000000001e+00 -4.4918347776990135e+00 -1.3551245280844766e+01 2.7539590818090893e+00 1 1 0 -453 1 2 2.1000000000000001e+00 -4.4122264005535730e+00 -1.0596223265618471e+01 2.7618213123579540e+00 1 1 0 -454 1 3 -1.0500000000000000e+00 -4.6327993770775722e+00 -1.3480068776200241e+01 1.1357306843562007e+00 1 1 0 -455 1 3 -1.0500000000000000e+00 -4.2775323301208692e+00 -1.0689197415521184e+01 1.1370113492700824e+00 1 1 0 -456 1 4 -9.4999999999999996e-01 -1.7582085114615111e+00 -1.1885444828152252e+01 1.0070062173292218e+00 1 1 0 -457 1 3 -1.0500000000000000e+00 -3.1073643655971166e+00 -9.8933800969646732e+00 3.2357583287275880e+00 1 1 0 -458 1 3 -1.0500000000000000e+00 -4.5243114909096018e+00 -1.2070595204559629e+01 3.2374516197245775e+00 1 1 0 -459 1 3 -1.0500000000000000e+00 -5.6777118011680381e+00 -9.7445664568842254e+00 3.0459653648294243e+00 1 1 0 -460 1 5 4.2499999999999999e-01 -2.2650668296403058e+00 -1.2764264287005354e+01 1.1508705187769799e+00 1 1 0 -461 1 1 1.5750000000000000e+00 -2.6565565918664173e+00 -1.0455505879441525e+01 -3.7549348428154161e-03 1 1 0 -462 1 2 2.1000000000000001e+00 -3.4455908391566643e+00 -1.7829293092612534e+01 -2.7609464806422892e+00 1 1 0 -463 1 2 2.1000000000000001e+00 -3.4688767904129696e+00 -1.1818423511849518e+01 -2.7688516686671711e+00 1 1 0 -464 1 3 -1.0500000000000000e+00 -3.2480752505918087e+00 -8.9344459968549881e+00 -1.1428004913510801e+00 1 1 0 -465 1 3 -1.0500000000000000e+00 -3.6036086619536984e+00 -1.1725714425851610e+01 -1.1439355502562485e+00 1 1 0 -466 1 4 -9.4999999999999996e-01 -9.6282526002298496e-01 -1.0529236900614441e+01 -1.0140115755842860e+00 1 1 0 -467 1 3 -1.0500000000000000e+00 3.8632613444500308e-01 -1.2521362577138564e+01 -3.2425797939291590e+00 1 1 0 -468 1 3 -1.0500000000000000e+00 -3.3565633803144257e+00 -1.0344120627751945e+01 -3.2446417136325554e+00 1 1 0 -469 1 3 -1.0500000000000000e+00 -2.2033940096388758e+00 -1.2670225163556584e+01 -3.0529490801396841e+00 1 1 0 -470 1 5 4.2499999999999999e-01 -4.5593933850753388e-01 -9.6504406470385522e+00 -1.1577660591579200e+00 1 1 0 -471 1 1 1.5750000000000000e+00 -5.2647294099161668e+00 -1.4938390849710533e+01 -3.7554421477974387e-03 1 1 0 -472 1 2 2.1000000000000001e+00 -8.3745420972569029e-01 -1.3346365774570319e+01 -2.7609475596234478e+00 1 1 0 -473 1 2 2.1000000000000001e+00 -9.1703537310051608e-01 -1.6301362578024104e+01 -2.7688573923577673e+00 1 1 0 -474 1 3 -1.0500000000000000e+00 -6.9625852330998939e-01 -1.3417381412652670e+01 -1.1427865734610130e+00 1 1 0 -475 1 3 -1.0500000000000000e+00 -1.0517542431933027e+00 -1.6208638871829955e+01 -1.1439604905627423e+00 1 1 0 -476 1 4 -9.4999999999999996e-01 -3.5709214848472897e+00 -1.5012075671946061e+01 -1.0140027621155667e+00 1 1 0 -477 1 3 -1.0500000000000000e+00 -2.2218134642601797e+00 -1.7004283740992047e+01 -3.2425628740632551e+00 1 1 0 -478 1 3 -1.0500000000000000e+00 -8.0473984685049871e-01 -1.4827054452774018e+01 -3.2446303282137938e+00 1 1 0 -479 1 3 -1.0500000000000000e+00 3.4843154859986214e-01 -1.7153093111175764e+01 -3.0529662393152108e+00 1 1 0 -480 1 5 4.2499999999999999e-01 -3.0641314229533227e+00 -1.4133366897183697e+01 -1.1576420001890888e+00 1 1 0 -481 1 1 1.5750000000000000e+00 2.5436575698973183e+00 -7.4762807567511658e+00 -3.2681608649411942e-03 0 1 0 -482 1 2 2.1000000000000001e+00 3.3326771644182021e+00 -1.0251055584260627e-01 2.7539562495680912e+00 0 1 0 -483 1 2 2.1000000000000001e+00 3.3559732863378500e+00 -6.1133477231204605e+00 2.7618019815700912e+00 0 1 0 -484 1 3 -1.0500000000000000e+00 3.1353688973965141e+00 -8.9971784534458905e+00 1.1357161192366334e+00 0 1 0 -485 1 3 -1.0500000000000000e+00 3.4906521933711527e+00 -6.2063093440944606e+00 1.1370013682474660e+00 0 1 0 -486 1 4 -9.4999999999999996e-01 8.4999416594662414e-01 -7.4025141664959477e+00 1.0069772303784212e+00 0 1 0 -487 1 3 -1.0500000000000000e+00 -4.9918531211513084e-01 -5.4104789806646600e+00 3.2357748645072224e+00 0 1 0 -488 1 3 -1.0500000000000000e+00 3.2438478921430658e+00 -7.5876613926832288e+00 3.2374650513379368e+00 0 1 0 -489 1 3 -1.0500000000000000e+00 2.0904479338721824e+00 -5.2616143373361730e+00 3.0459494998857473e+00 0 1 0 -490 1 5 4.2499999999999999e-01 3.4305735839570417e-01 -8.2814451510232985e+00 1.1506997919603279e+00 0 1 0 -491 1 1 1.5750000000000000e+00 5.1518162806579664e+00 -2.9933577707057264e+00 -3.2719737650719338e-03 0 1 0 -492 1 2 2.1000000000000001e+00 7.2450056662052376e-01 -4.5854449159198332e+00 2.7539595529080376e+00 0 1 0 -493 1 2 2.1000000000000001e+00 8.0414918868178020e-01 -1.6304050196450568e+00 2.7618170330682865e+00 0 1 0 -494 1 3 -1.0500000000000000e+00 5.8351556926552206e-01 -4.5142509399890525e+00 1.1357618537192042e+00 0 1 0 -495 1 3 -1.0500000000000000e+00 9.3881877218889187e-01 -1.7234004054205592e+00 1.1370055641638572e+00 0 1 0 -496 1 4 -9.4999999999999996e-01 3.4581831713214264e+00 -2.9195538038595128e+00 1.0070161949531542e+00 0 1 0 -497 1 3 -1.0500000000000000e+00 2.1089597637650321e+00 -9.2758109333887262e-01 3.2357778931579837e+00 0 1 0 -498 1 3 -1.0500000000000000e+00 6.9202493621660821e-01 -3.1047407556425863e+00 3.2374286426884460e+00 0 1 0 -499 1 3 -1.0500000000000000e+00 -4.6137640541853386e-01 -7.7872267536189810e-01 3.0459549651529940e+00 0 1 0 -500 1 5 4.2499999999999999e-01 2.9512366629883733e+00 -3.7984283160022585e+00 1.1510066071998590e+00 0 1 0 -501 1 1 1.5750000000000000e+00 2.5597764890479056e+00 -1.4896728825261896e+00 -3.7510557474558226e-03 0 1 0 -502 1 2 2.1000000000000001e+00 1.7707367658906890e+00 -8.8634435099187865e+00 -2.7609471549488367e+00 0 1 0 -503 1 2 2.1000000000000001e+00 1.7474499480691374e+00 -2.8526347731487149e+00 -2.7688625207492397e+00 0 1 0 -504 1 3 -1.0500000000000000e+00 1.9682617548841872e+00 3.1354766712723858e-02 -1.1428194347213658e+00 0 1 0 -505 1 3 -1.0500000000000000e+00 1.6127391948302812e+00 -2.7598942364919772e+00 -1.1439556954086907e+00 0 1 0 -506 1 4 -9.4999999999999996e-01 4.2535424365009327e+00 -1.5633894774555195e+00 -1.0140400418681299e+00 0 1 0 -507 1 3 -1.0500000000000000e+00 5.6026491085120664e+00 -3.5555609449644461e+00 -3.2425576785307024e+00 0 1 0 -508 1 3 -1.0500000000000000e+00 1.8597625543053109e+00 -1.3783257788357659e+00 -3.2446235882093193e+00 0 1 0 -509 1 3 -1.0500000000000000e+00 3.0129281343278276e+00 -3.7043645719831666e+00 -3.0529605899078920e+00 0 1 0 -510 1 5 4.2499999999999999e-01 4.7603403166335863e+00 -6.8469223618015818e-01 -1.1579216441180478e+00 0 1 0 -511 1 1 1.5750000000000000e+00 -4.8390666169016328e-02 -5.9725694760793182e+00 -3.7574054098818976e-03 0 1 0 -512 1 2 2.1000000000000001e+00 4.3789145761620833e+00 -4.3805514632713773e+00 -2.7609339008297651e+00 0 1 0 -513 1 2 2.1000000000000001e+00 4.2992990506123103e+00 -7.3355316180595338e+00 -2.7688607932569447e+00 0 1 0 -514 1 3 -1.0500000000000000e+00 4.5200860118647945e+00 -4.4515414547653052e+00 -1.1427984036885626e+00 0 1 0 -515 1 3 -1.0500000000000000e+00 4.1645706838576562e+00 -7.2428167611125112e+00 -1.1439527343219709e+00 0 1 0 -516 1 4 -9.4999999999999996e-01 1.6453970630033830e+00 -6.0462561133443451e+00 -1.0139809143366438e+00 0 1 0 -517 1 3 -1.0500000000000000e+00 2.9945122334512657e+00 -8.0384625674130401e+00 -3.2425618392344440e+00 0 1 0 -518 1 3 -1.0500000000000000e+00 4.4116077983548383e+00 -5.8612132939321402e+00 -3.2446764319665711e+00 0 1 0 -519 1 3 -1.0500000000000000e+00 5.5647564535540042e+00 -8.1872858674545341e+00 -3.0529539697099937e+00 0 1 0 -520 1 5 4.2499999999999999e-01 2.1522145539965809e+00 -5.1674642083276847e+00 -1.1575048043055780e+00 0 1 0 -521 1 1 1.5750000000000000e+00 7.7036718214034785e+00 -7.4762910233615827e+00 -3.2653078128408453e-03 0 1 0 -522 1 2 2.1000000000000001e+00 -1.2147345593282450e+01 -1.0251359496978196e-01 2.7539461566052985e+00 1 1 0 -523 1 2 2.1000000000000001e+00 -1.2124030375241905e+01 -6.1133337616709902e+00 2.7618143580363075e+00 1 1 0 -524 1 3 -1.0500000000000000e+00 8.2953539893182153e+00 -8.9971801103008087e+00 1.1357452560675760e+00 0 1 0 -525 1 3 -1.0500000000000000e+00 -1.1989344710863094e+01 -6.2063052996612100e+00 1.1369992978851666e+00 1 1 0 -526 1 4 -9.4999999999999996e-01 6.0099622042933412e+00 -7.4025579776391464e+00 1.0069620216105442e+00 0 1 0 -527 1 3 -1.0500000000000000e+00 4.6608198109043748e+00 -5.4104755502326540e+00 3.2357801936372788e+00 0 1 0 -528 1 3 -1.0500000000000000e+00 -1.2236155841755377e+01 -7.5876771945797863e+00 3.2374811955831060e+00 1 1 0 -529 1 3 -1.0500000000000000e+00 7.2504604436044637e+00 -5.2616189118410208e+00 3.0459453948467168e+00 0 1 0 -530 1 5 4.2499999999999999e-01 5.5030432428799969e+00 -8.2814548631033578e+00 1.1505519475195651e+00 0 1 0 -531 1 1 1.5750000000000000e+00 -1.0328175895563996e+01 -2.9933575426158416e+00 -3.2744817930581149e-03 1 1 0 -532 1 2 2.1000000000000001e+00 5.8844947594629744e+00 -4.5854310172663979e+00 2.7539684166484335e+00 0 1 0 -533 1 2 2.1000000000000001e+00 5.9641241815446477e+00 -1.6304119441692926e+00 2.7618170105232309e+00 0 1 0 -534 1 3 -1.0500000000000000e+00 5.7435221593356864e+00 -4.5142545324410897e+00 1.1357475728004847e+00 0 1 0 -535 1 3 -1.0500000000000000e+00 6.0988162421821528e+00 -1.7233902325835047e+00 1.1369987706733902e+00 0 1 0 -536 1 4 -9.4999999999999996e-01 -1.2021823199294937e+01 -2.9195626861295096e+00 1.0070363114076599e+00 1 1 0 -537 1 3 -1.0500000000000000e+00 7.2690066204394697e+00 -9.2755674730927851e-01 3.2357668612914487e+00 0 1 0 -538 1 3 -1.0500000000000000e+00 5.8520231027928773e+00 -3.1047706349297179e+00 3.2374344835306346e+00 0 1 0 -539 1 3 -1.0500000000000000e+00 4.6986174638786373e+00 -7.7871980724010115e-01 3.0459566060165137e+00 0 1 0 -540 1 5 4.2499999999999999e-01 8.1112714877724414e+00 -3.7983924620060368e+00 1.1511131184559726e+00 0 1 0 -541 1 1 1.5750000000000000e+00 7.7197852579331645e+00 -1.4896736083571689e+00 -3.7533060240022564e-03 0 1 0 -542 1 2 2.1000000000000001e+00 6.9307402907651401e+00 -8.8634573665418070e+00 -2.7609563100003145e+00 0 1 0 -543 1 2 2.1000000000000001e+00 6.9074738694113726e+00 -2.8526269036832552e+00 -2.7688615983007780e+00 0 1 0 -544 1 3 -1.0500000000000000e+00 7.1282543967930359e+00 3.1358883413265204e-02 -1.1428023230370439e+00 0 1 0 -545 1 3 -1.0500000000000000e+00 6.7727419364633441e+00 -2.7599051276576141e+00 -1.1439490121146996e+00 0 1 0 -546 1 4 -9.4999999999999996e-01 -1.1226466741815884e+01 -1.5634024412045342e+00 -1.0140216083145610e+00 1 1 0 -547 1 3 -1.0500000000000000e+00 -9.8773043947366048e+00 -3.5555368621683208e+00 -3.2425683285331646e+00 1 1 0 -548 1 3 -1.0500000000000000e+00 7.0197645195179135e+00 -1.3782969003001959e+00 -3.2446289771148944e+00 0 1 0 -549 1 3 -1.0500000000000000e+00 8.1729347482067567e+00 -3.7043681527678913e+00 -3.0529625378704122e+00 0 1 0 -550 1 5 4.2499999999999999e-01 -1.0719626421899999e+01 -6.8465756426241953e-01 -1.1578295867776784e+00 1 1 0 -551 1 1 1.5750000000000000e+00 5.1115953590272625e+00 -5.9725597637293362e+00 -3.7601916249858647e-03 0 1 0 -552 1 2 2.1000000000000001e+00 -1.1101108931968247e+01 -4.3805528895496302e+00 -2.7609432872668886e+00 1 1 0 -553 1 2 2.1000000000000001e+00 -1.1180707067380455e+01 -7.3355188643798535e+00 -2.7688492591590554e+00 1 1 0 -554 1 3 -1.0500000000000000e+00 -1.0959928694497696e+01 -4.4515436898974556e+00 -1.1427711527976001e+00 1 1 0 -555 1 3 -1.0500000000000000e+00 -1.1315426415312240e+01 -7.2428113900070752e+00 -1.1439555106248189e+00 1 1 0 -556 1 4 -9.4999999999999996e-01 6.8054277571583519e+00 -6.0462150488380164e+00 -1.0139639895733374e+00 0 1 0 -557 1 3 -1.0500000000000000e+00 8.1545095181602107e+00 -8.0384640840914869e+00 -3.2425680420518717e+00 0 1 0 -558 1 3 -1.0500000000000000e+00 -1.1068396240802272e+01 -5.8612309436472234e+00 -3.2446597028975566e+00 1 1 0 -559 1 3 -1.0500000000000000e+00 -9.9152309072003355e+00 -8.1872904891822973e+00 -3.0529571692262092e+00 1 1 0 -560 1 5 4.2499999999999999e-01 7.3122321320503794e+00 -5.1674508614420542e+00 -1.1573511315660259e+00 0 1 0 -561 1 1 1.5750000000000000e+00 -7.7763421850555563e+00 -7.4762809230994502e+00 -3.2682934864940449e-03 1 1 0 -562 1 2 2.1000000000000001e+00 -6.9873219863206382e+00 -1.0251132671459473e-01 2.7539563597780923e+00 1 1 0 -563 1 2 2.1000000000000001e+00 -6.9640259840326628e+00 -6.1133472592188820e+00 2.7618022956295629e+00 1 1 0 -564 1 3 -1.0500000000000000e+00 -7.1846314193998664e+00 -8.9971779600544295e+00 1.1357163882947159e+00 1 1 0 -565 1 3 -1.0500000000000000e+00 -6.8293485880591112e+00 -6.2063096894111425e+00 1.1370012333877977e+00 1 1 0 -566 1 4 -9.4999999999999996e-01 -9.4700055755924701e+00 -7.4025139876644594e+00 1.0069773362883989e+00 1 1 0 -567 1 3 -1.0500000000000000e+00 -1.0819186074870123e+01 -5.4104790908412692e+00 3.2357742683187052e+00 1 1 0 -568 1 3 -1.0500000000000000e+00 -7.0761528036457531e+00 -7.5876609775127299e+00 3.2374644576831670e+00 1 1 0 -569 1 3 -1.0500000000000000e+00 -8.2295514763541018e+00 -5.2616148976108672e+00 3.0459489432022515e+00 1 1 0 -570 1 5 4.2499999999999999e-01 -9.9769424641830984e+00 -8.2814450142459481e+00 1.1507004566801982e+00 1 1 0 -571 1 1 1.5750000000000000e+00 -5.1681838127975688e+00 -2.9933576384022018e+00 -3.2717369706762867e-03 1 1 0 -572 1 2 2.1000000000000001e+00 -9.5954996993209818e+00 -4.5854449940775464e+00 2.7539595842160942e+00 1 1 0 -573 1 2 2.1000000000000001e+00 -9.5158507875170635e+00 -1.6304043820163336e+00 2.7618168255845852e+00 1 1 0 -574 1 3 -1.0500000000000000e+00 -9.7364845194737679e+00 -4.5142510709812989e+00 1.1357620952221374e+00 1 1 0 -575 1 3 -1.0500000000000000e+00 -9.3811811495596569e+00 -1.7234005945692772e+00 1.1370052607441838e+00 1 1 0 -576 1 4 -9.4999999999999996e-01 -6.8618165785256515e+00 -2.9195528214605435e+00 1.0070162671680265e+00 1 1 0 -577 1 3 -1.0500000000000000e+00 -8.2110400227350908e+00 -9.2758055861539646e-01 3.2357776111175447e+00 1 1 0 -578 1 3 -1.0500000000000000e+00 -9.6279751712075452e+00 -3.1047410652821092e+00 3.2374288782542173e+00 1 1 0 -579 1 3 -1.0500000000000000e+00 -1.0781377378976435e+01 -7.7872238917679937e-01 3.0459548222147177e+00 1 1 0 -580 1 5 4.2499999999999999e-01 -7.3687631344134621e+00 -3.7984280683325675e+00 1.1510087811947294e+00 1 1 0 -581 1 1 1.5750000000000000e+00 -7.7602231493103115e+00 -1.4896729773895174e+00 -3.7514049036762032e-03 1 1 0 -582 1 2 2.1000000000000001e+00 -8.5492636448235881e+00 -8.8634434759155383e+00 -2.7609469383151142e+00 1 1 0 -583 1 2 2.1000000000000001e+00 -8.5725493910960839e+00 -2.8526345568910330e+00 -2.7688621512718061e+00 1 1 0 -584 1 3 -1.0500000000000000e+00 -8.3517386022975746e+00 3.1355306993937404e-02 -1.1428188664021803e+00 1 1 0 -585 1 3 -1.0500000000000000e+00 -8.7072613660041132e+00 -2.7598948801617009e+00 -1.1439559119420721e+00 1 1 0 -586 1 4 -9.4999999999999996e-01 -6.0664578280469037e+00 -1.5633906786741285e+00 -1.0140407761717736e+00 1 1 0 -587 1 3 -1.0500000000000000e+00 -4.7173504441606600e+00 -3.5555605571846858e+00 -3.2425569990613576e+00 1 1 0 -588 1 3 -1.0500000000000000e+00 -8.4602377735195269e+00 -1.3783256930774925e+00 -3.2446245341017974e+00 1 1 0 -589 1 3 -1.0500000000000000e+00 -7.3070727313816795e+00 -3.7043646163271404e+00 -3.0529607277228852e+00 1 1 0 -590 1 5 4.2499999999999999e-01 -5.5596602828094399e+00 -6.8469307887884057e-01 -1.1579270767641230e+00 1 1 0 -591 1 1 1.5750000000000000e+00 -1.0368390725810965e+01 -5.9725695262430403e+00 -3.7573993430903840e-03 1 1 0 -592 1 2 2.1000000000000001e+00 -5.9410852260952272e+00 -4.3805507393552645e+00 -2.7609332752915812e+00 1 1 0 -593 1 2 2.1000000000000001e+00 -6.0207013841734955e+00 -7.3355318748997771e+00 -2.7688608337867908e+00 1 1 0 -594 1 3 -1.0500000000000000e+00 -5.7999138374145174e+00 -4.4515417632928145e+00 -1.1427994454172925e+00 1 1 0 -595 1 3 -1.0500000000000000e+00 -6.1554296040035208e+00 -7.2428163652707518e+00 -1.1439534513399927e+00 1 1 0 -596 1 4 -9.4999999999999996e-01 -8.6746031854828516e+00 -6.0462567207300957e+00 -1.0139806757747039e+00 1 1 0 -597 1 3 -1.0500000000000000e+00 -7.3254880189215017e+00 -8.0384622206913434e+00 -3.2425615735922868e+00 1 1 0 -598 1 3 -1.0500000000000000e+00 -5.9083924192090498e+00 -5.8612138215664249e+00 -3.2446762232977573e+00 1 1 0 -599 1 3 -1.0500000000000000e+00 -4.7552429311707556e+00 -8.1872863652617180e+00 -3.0529541602386461e+00 1 1 0 -600 1 5 4.2499999999999999e-01 -8.1677849706477055e+00 -5.1674634384285980e+00 -1.1575040236693965e+00 1 1 0 -601 1 1 1.5750000000000000e+00 -2.6163277838675221e+00 -7.4762909455420772e+00 -3.2656709391893912e-03 1 1 0 -602 1 2 2.1000000000000001e+00 -1.8273462383235461e+00 -1.0251424082924032e-01 2.7539460950975592e+00 1 1 0 -603 1 2 2.1000000000000001e+00 -1.8040299652667589e+00 -6.1133335430346563e+00 2.7618141317410618e+00 1 1 0 -604 1 3 -1.0500000000000000e+00 -2.0246462781465269e+00 -8.9971797593687484e+00 1.1357458882768405e+00 1 1 0 -605 1 3 -1.0500000000000000e+00 -1.6693450475600429e+00 -6.2063057861451725e+00 1.1369993464425061e+00 1 1 0 -606 1 4 -9.4999999999999996e-01 -4.3100379988542743e+00 -7.4025589029402692e+00 1.0069615315099991e+00 1 1 0 -607 1 3 -1.0500000000000000e+00 -5.6591796712508087e+00 -5.4104753627400228e+00 3.2357806674433647e+00 1 1 0 -608 1 3 -1.0500000000000000e+00 -1.9161562222272543e+00 -7.5876772803970987e+00 3.2374804258171608e+00 1 1 0 -609 1 3 -1.0500000000000000e+00 -3.0695406692448417e+00 -5.2616188661581340e+00 3.0459453864236909e+00 1 1 0 -610 1 5 4.2499999999999999e-01 -4.8169571538695717e+00 -8.2814553617741105e+00 1.1505481493262373e+00 1 1 0 -611 1 1 1.5750000000000000e+00 -8.1760772968380024e-03 -2.9933575181058600e+00 -3.2743711147666943e-03 1 1 0 -612 1 2 2.1000000000000001e+00 -4.4355051118200439e+00 -4.5854299392358087e+00 2.7539688922472791e+00 1 1 0 -613 1 2 2.1000000000000001e+00 -4.3558760344290208e+00 -1.6304124598534635e+00 2.7618174106720375e+00 1 1 0 -614 1 3 -1.0500000000000000e+00 -4.5764777419565466e+00 -4.5142548759855465e+00 1.1357463260141714e+00 1 1 0 -615 1 3 -1.0500000000000000e+00 -4.2211840342906868e+00 -1.7233895441759479e+00 1.1369977086180825e+00 1 1 0 -616 1 4 -9.4999999999999996e-01 -1.7018236124385560e+00 -2.9195635165858569e+00 1.0070367229964496e+00 1 1 0 -617 1 3 -1.0500000000000000e+00 -3.0509931277018758e+00 -9.2755589773917535e-01 3.2357665495488988e+00 1 1 0 -618 1 3 -1.0500000000000000e+00 -4.4679770346247647e+00 -3.1047713732493420e+00 3.2374347240366337e+00 1 1 0 -619 1 3 -1.0500000000000000e+00 -5.6213822534512161e+00 -7.7872002325319301e-01 3.0459565887809354e+00 1 1 0 -620 1 5 4.2499999999999999e-01 -2.2087277522865865e+00 -3.7983910799744223e+00 1.1511149260038867e+00 1 1 0 -621 1 1 1.5750000000000000e+00 -2.6002141654952915e+00 -1.4896737094533599e+00 -3.7533128050117881e-03 1 1 0 -622 1 2 2.1000000000000001e+00 -3.3892590053672063e+00 -8.8634574857208097e+00 -2.7609561680299493e+00 1 1 0 -623 1 2 2.1000000000000001e+00 -3.4125251930059894e+00 -2.8526268846259306e+00 -2.7688615286285891e+00 1 1 0 -624 1 3 -1.0500000000000000e+00 -3.1917462126351293e+00 3.1358788246325986e-02 -1.1428022026067133e+00 1 1 0 -625 1 3 -1.0500000000000000e+00 -3.5472590403252218e+00 -2.7599052235913142e+00 -1.1439491794483505e+00 1 1 0 -626 1 4 -9.4999999999999996e-01 -9.0646691514089461e-01 -1.5634032584722597e+00 -1.0140215315146257e+00 1 1 0 -627 1 3 -1.0500000000000000e+00 4.4269580016512577e-01 -3.5555364857703218e+00 -3.2425687501749536e+00 1 1 0 -628 1 3 -1.0500000000000000e+00 -3.3002363165323549e+00 -1.3782961327508190e+00 -3.2446289526978092e+00 1 1 0 -629 1 3 -1.0500000000000000e+00 -2.1470649566305173e+00 -3.7043686941940379e+00 -3.0529629239873710e+00 1 1 0 -630 1 5 4.2499999999999999e-01 -3.9962609031332441e-01 -6.8465733157457720e-01 -1.1578307953461699e+00 1 1 0 -631 1 1 1.5750000000000000e+00 -5.2084047404047134e+00 -5.9725595364899284e+00 -3.7600979616296826e-03 1 1 0 -632 1 2 2.1000000000000001e+00 -7.8110919308991456e-01 -4.3805529373242500e+00 -2.7609430555638124e+00 1 1 0 -633 1 2 2.1000000000000001e+00 -8.6070716056939567e-01 -7.3355179831783488e+00 -2.7688491805898519e+00 1 1 0 -634 1 3 -1.0500000000000000e+00 -6.3992886880595101e-01 -4.4515437816825045e+00 -1.1427704613142957e+00 1 1 0 -635 1 3 -1.0500000000000000e+00 -9.9542614064111312e-01 -7.2428116519511683e+00 -1.1439560424635076e+00 1 1 0 -636 1 4 -9.4999999999999996e-01 -3.5145719480547983e+00 -6.0462140630651522e+00 -1.0139637930845495e+00 1 1 0 -637 1 3 -1.0500000000000000e+00 -2.1654899354619133e+00 -8.0384635502983741e+00 -3.2425685873817418e+00 1 1 0 -638 1 3 -1.0500000000000000e+00 -7.4839646312622143e-01 -5.8612317329932946e+00 -3.2446596299773693e+00 1 1 0 -639 1 3 -1.0500000000000000e+00 4.0476806768967499e-01 -8.1872903970557633e+00 -3.0529571025848705e+00 1 1 0 -640 1 5 4.2499999999999999e-01 -3.0077675350384983e+00 -5.1674504112187361e+00 -1.1573483949331340e+00 1 1 0 -641 1 1 1.5750000000000000e+00 9.0327999603982079e-01 1.3078268179656156e+00 9.1936285392393344e+00 0 0 0 -642 1 2 2.1000000000000001e+00 5.0862246908167243e+00 9.0452767941395287e+00 -6.4424047165866876e+00 0 0 1 -643 1 2 2.1000000000000001e+00 5.1094714654176485e+00 3.0344442077888871e+00 -6.4345036943507274e+00 0 0 1 -644 1 3 -1.0500000000000000e+00 4.8887010421652999e+00 1.5046638157599901e-01 -8.0605839637767165e+00 0 0 1 -645 1 3 -1.0500000000000000e+00 5.2441927721705479e+00 2.9417321911529406e+00 -8.0593973812488873e+00 0 0 1 -646 1 4 -9.4999999999999996e-01 2.6033704126610484e+00 1.7451758067380290e+00 -8.1893676020018926e+00 0 0 1 -647 1 3 -1.0500000000000000e+00 1.2542455852135834e+00 3.7373752120048742e+00 -5.9607992485127665e+00 0 0 1 -648 1 3 -1.0500000000000000e+00 4.9971716802184414e+00 1.5601454347120267e+00 -5.9587058378165576e+00 0 0 1 -649 1 3 -1.0500000000000000e+00 3.8440041612115703e+00 3.8861931285291931e+00 -6.1503945630703374e+00 0 0 1 -650 1 5 4.2499999999999999e-01 2.0965664266306856e+00 8.6640571709351022e-01 -8.0457855564755221e+00 0 0 1 -651 1 1 1.5750000000000000e+00 3.5114550282895003e+00 5.7907578289563908e+00 9.1936291799320600e+00 0 0 0 -652 1 2 2.1000000000000001e+00 2.4780321755723715e+00 4.5623640127866523e+00 -6.4424127795872970e+00 0 0 1 -653 1 2 2.1000000000000001e+00 2.5576727978274061e+00 7.5173398896816757e+00 -6.4345086110749499e+00 0 0 1 -654 1 3 -1.0500000000000000e+00 2.3368431861690446e+00 4.6333600597891369e+00 -8.0605492211226508e+00 0 0 1 -655 1 3 -1.0500000000000000e+00 2.6923826235310759e+00 7.4246193194823391e+00 -8.0594146702702183e+00 0 0 1 -656 1 4 -9.4999999999999996e-01 5.2115829731287189e+00 6.2281267873758885e+00 -8.1893654320210807e+00 0 0 1 -657 1 3 -1.0500000000000000e+00 3.8624444953521344e+00 8.2202786364954399e+00 -5.9607758363894661e+00 0 0 1 -658 1 3 -1.0500000000000000e+00 2.4453330767289607e+00 6.0430641736627777e+00 -5.9587080529496408e+00 0 0 1 -659 1 3 -1.0500000000000000e+00 1.2921732996260165e+00 8.3691407396663671e+00 -6.1504119881455370e+00 0 0 1 -660 1 5 4.2499999999999999e-01 4.7046988428178977e+00 5.3493130177618120e+00 -8.0457432166301501e+00 0 0 1 -661 1 1 1.5750000000000000e+00 9.1939897374337853e-01 7.2944681040671533e+00 9.1931409599603455e+00 0 0 0 -662 1 2 2.1000000000000001e+00 1.3038993986497616e-01 -7.9297399937615864e-02 6.4359157158029880e+00 0 0 0 -663 1 2 2.1000000000000001e+00 1.0709548741821351e-01 5.9314795901314916e+00 6.4280530942119469e+00 0 0 0 -664 1 3 -1.0500000000000000e+00 3.2769702380019616e-01 8.8153278361017087e+00 8.0541328072809932e+00 0 0 0 -665 1 3 -1.0500000000000000e+00 -2.7577048002024540e-02 6.0244668918843125e+00 8.0528534019165114e+00 0 0 0 -666 1 4 -9.4999999999999996e-01 2.6131161534111662e+00 7.2207287036538688e+00 8.1828861539669902e+00 0 0 0 -667 1 3 -1.0500000000000000e+00 3.9622586469205352e+00 5.2286377281547125e+00 5.9541122763207728e+00 0 0 0 -668 1 3 -1.0500000000000000e+00 2.1920683743605807e-01 7.4058249891069572e+00 5.9524118713538332e+00 0 0 0 -669 1 3 -1.0500000000000000e+00 1.3725990807979294e+00 5.0798240702830135e+00 6.1439110162023720e+00 0 0 0 -670 1 5 4.2499999999999999e-01 3.1199732920356418e+00 8.0995675675041703e+00 8.0391592725870282e+00 0 0 0 -671 1 1 1.5750000000000000e+00 -1.6887626179515607e+00 2.8115295078010867e+00 9.1931424252045630e+00 0 0 0 -672 1 2 2.1000000000000001e+00 2.7385869519563499e+00 4.4035977810533353e+00 6.4359159181916219e+00 0 0 0 -673 1 2 2.1000000000000001e+00 2.6589194294892575e+00 1.4485953760994725e+00 6.4280582079700412e+00 0 0 0 -674 1 3 -1.0500000000000000e+00 2.8795450934696767e+00 4.3324405226142382e+00 8.0541191847946116e+00 0 0 0 -675 1 3 -1.0500000000000000e+00 2.5242342524813459e+00 1.5415689319063191e+00 8.0528783307282445e+00 0 0 0 -676 1 4 -9.4999999999999996e-01 4.8784689801895098e-03 2.7377462205787744e+00 8.1828769724994572e+00 0 0 0 -677 1 3 -1.0500000000000000e+00 1.3540645414120398e+00 7.4573621369630771e-01 5.9540951763794290e+00 0 0 0 -678 1 3 -1.0500000000000000e+00 2.7710487894445812e+00 2.9229363552675593e+00 5.9524016589185003e+00 0 0 0 -679 1 3 -1.0500000000000000e+00 3.9244363315488222e+00 5.9687068067378490e-01 6.1439283855687208e+00 0 0 0 -680 1 5 4.2499999999999999e-01 5.1182958888196950e-01 3.6166698539281406e+00 8.0390353352204258e+00 0 0 0 -681 1 1 1.5750000000000000e+00 6.0632942270537633e+00 1.3078169876851220e+00 9.1936311772266670e+00 0 0 0 -682 1 2 2.1000000000000001e+00 -1.0393798325235846e+01 9.0452739485367424e+00 -6.4424156068686536e+00 1 0 1 -683 1 2 2.1000000000000001e+00 -1.0370532688021308e+01 3.0344580928070393e+00 -6.4344922061203995e+00 1 0 1 -684 1 3 -1.0500000000000000e+00 1.0048686020539265e+01 1.5046462355047652e-01 -8.0605545916265591e+00 0 0 1 -685 1 3 -1.0500000000000000e+00 -1.0235804675645195e+01 2.9417358723974196e+00 -8.0593999402563039e+00 1 0 1 -686 1 4 -9.4999999999999996e-01 7.7633395990307577e+00 1.7451343070668237e+00 -8.1893820944806723e+00 0 0 1 -687 1 3 -1.0500000000000000e+00 6.4142512718313398e+00 3.7373784423628784e+00 -5.9607944539472024e+00 0 0 1 -688 1 3 -1.0500000000000000e+00 -1.0482832407337161e+01 1.5601299826680055e+00 -5.9586900611972622e+00 1 0 1 -689 1 3 -1.0500000000000000e+00 9.0040166486961724e+00 3.8861879123933356e+00 -6.1503979527282322e+00 0 0 1 -690 1 5 4.2499999999999999e-01 7.2565522149876038e+00 8.6639701182161843e-01 -8.0459259751794452e+00 0 0 1 -691 1 1 1.5750000000000000e+00 -1.1968537431183220e+01 5.7907580951124764e+00 9.1936264813234629e+00 1 0 0 -692 1 2 2.1000000000000001e+00 7.6380264848568480e+00 4.5623772756766172e+00 -6.4424042946661455e+00 0 0 1 -693 1 2 2.1000000000000001e+00 7.7176486578355963e+00 7.5173331294719183e+00 -6.4345083071021740e+00 0 0 1 -694 1 3 -1.0500000000000000e+00 7.4968492694646329e+00 4.6333567441294718e+00 -8.0605633819113667e+00 0 0 1 -695 1 3 -1.0500000000000000e+00 7.8523804276681837e+00 7.4246294275852094e+00 -8.0594213971891069e+00 0 0 1 -696 1 4 -9.4999999999999996e-01 -1.0268423694159754e+01 6.2281174442746980e+00 -8.1893456261947950e+00 1 0 1 -697 1 3 -1.0500000000000000e+00 9.0224907290535974e+00 8.2203025512221188e+00 -5.9607878799717344e+00 0 0 1 -698 1 3 -1.0500000000000000e+00 7.6053307981435196e+00 6.0430347893748895e+00 -5.9587019740450744e+00 0 0 1 -699 1 3 -1.0500000000000000e+00 6.4521656412247061e+00 8.3691447635715939e+00 -6.1504109506876619e+00 0 0 1 -700 1 5 4.2499999999999999e-01 9.8647336224214257e+00 5.3493476067839048e+00 -8.0456403223888646e+00 0 0 1 -701 1 1 1.5750000000000000e+00 6.0794078571688708e+00 7.2944672054170034e+00 9.1931387604710437e+00 0 0 0 -702 1 2 2.1000000000000001e+00 5.2903927590288387e+00 -7.9312034344852123e-02 6.4359061568910381e+00 0 0 0 -703 1 2 2.1000000000000001e+00 5.2671187145264451e+00 5.9314885138761895e+00 6.4280540558924795e+00 0 0 0 -704 1 3 -1.0500000000000000e+00 5.4876891838999047e+00 8.8153320262813786e+00 8.0541505226321348e+00 0 0 0 -705 1 3 -1.0500000000000000e+00 5.1324255766353062e+00 6.0244559010705814e+00 8.0528602469110595e+00 0 0 0 -706 1 4 -9.4999999999999996e-01 -1.2866893134241742e+01 7.2207151463837640e+00 8.1829043644805566e+00 1 0 0 -707 1 3 -1.0500000000000000e+00 -1.1517695582926537e+01 5.2286614618147631e+00 5.9541014619513177e+00 1 0 0 -708 1 3 -1.0500000000000000e+00 5.3792088967617762e+00 7.4058530000867115e+00 5.9524066869292191e+00 0 0 0 -709 1 3 -1.0500000000000000e+00 6.5326055526273592e+00 5.0798202391399414e+00 6.1439090309796480e+00 0 0 0 -710 1 5 4.2499999999999999e-01 -1.2359993555416519e+01 8.0996018552035594e+00 8.0392491603506926e+00 1 0 0 -711 1 1 1.5750000000000000e+00 3.4712234255278887e+00 2.8115394997158880e+00 9.1931391128052944e+00 0 0 0 -712 1 2 2.1000000000000001e+00 -1.2741436473488831e+01 4.4035966072164179e+00 6.4359068114368210e+00 1 0 0 -713 1 2 2.1000000000000001e+00 -1.2821086026369231e+01 1.4486074172151717e+00 6.4280700878493633e+00 1 0 0 -714 1 3 -1.0500000000000000e+00 -1.2600468968641490e+01 4.3324381244139616e+00 8.0541460499971507e+00 1 0 0 -715 1 3 -1.0500000000000000e+00 -1.2955762910609096e+01 1.5415738718932701e+00 8.0528750796115318e+00 1 0 0 -716 1 4 -9.4999999999999996e-01 5.1649091672213814e+00 2.7377878492092051e+00 8.1828935067407187e+00 0 0 0 -717 1 3 -1.0500000000000000e+00 6.5140624838503562e+00 7.4573449160736516e-01 5.9540890408837548e+00 0 0 0 -718 1 3 -1.0500000000000000e+00 -1.2708954990084692e+01 2.9229186261097801e+00 5.9524185176229256e+00 1 0 0 -719 1 3 -1.0500000000000000e+00 -1.1555552596604405e+01 5.9686666841561120e-01 6.1439252012806840e+00 1 0 0 -720 1 5 4.2499999999999999e-01 5.6718460531567594e+00 3.6166822258108873e+00 8.0391876250502783e+00 0 0 0 -721 1 1 1.5750000000000000e+00 -9.4167199060881881e+00 1.3078268191493692e+00 9.1936284569148015e+00 1 0 0 -722 1 2 2.1000000000000001e+00 -5.2337744657239433e+00 9.0452766042384738e+00 -6.4424045702369455e+00 1 0 1 -723 1 2 2.1000000000000001e+00 -5.2105281225591042e+00 3.0344444952698204e+00 -6.4345035089905984e+00 1 0 1 -724 1 3 -1.0500000000000000e+00 -5.4312992074936357e+00 1.5046681141750895e-01 -8.0605839113224356e+00 1 0 1 -725 1 3 -1.0500000000000000e+00 -5.0758078374764404e+00 2.9417318484454675e+00 -8.0593973266164873e+00 1 0 1 -726 1 4 -9.4999999999999996e-01 -7.7166293890810103e+00 1.7451757670354233e+00 -8.1893673368413982e+00 1 0 1 -727 1 3 -1.0500000000000000e+00 -9.0657538566382421e+00 3.7373757159528864e+00 -5.9607990251074803e+00 1 0 1 -728 1 3 -1.0500000000000000e+00 -5.3228288100664747e+00 1.5601455206964303e+00 -5.9587064079961714e+00 1 0 1 -729 1 3 -1.0500000000000000e+00 -6.4759962422743165e+00 3.8861930601011174e+00 -6.1503948993679884e+00 1 0 1 -730 1 5 4.2499999999999999e-01 -8.2234331102634997e+00 8.6640653809297419e-01 -8.0457837360048821e+00 1 0 1 -731 1 1 1.5750000000000000e+00 -6.8085449284088639e+00 5.7907577807183372e+00 9.1936293269548521e+00 1 0 0 -732 1 2 2.1000000000000001e+00 -7.8419680626851189e+00 4.5623634416592758e+00 -6.4424126333628751e+00 1 0 1 -733 1 2 2.1000000000000001e+00 -7.7623275299073544e+00 7.5173406513668297e+00 -6.4345089088641538e+00 1 0 1 -734 1 3 -1.0500000000000000e+00 -7.9831563836472403e+00 4.6333602950605197e+00 -8.0605491278584473e+00 1 0 1 -735 1 3 -1.0500000000000000e+00 -7.6276171712668432e+00 7.4246189825803306e+00 -8.0594145553904770e+00 1 0 1 -736 1 4 -9.4999999999999996e-01 -5.1084172118972777e+00 6.2281269736840663e+00 -8.1893656974078635e+00 1 0 1 -737 1 3 -1.0500000000000000e+00 -6.4575553159047985e+00 8.2202787726173803e+00 -5.9607759162796174e+00 1 0 1 -738 1 3 -1.0500000000000000e+00 -7.8746669235491940e+00 6.0430635684913305e+00 -5.9587081543805747e+00 1 0 1 -739 1 3 -1.0500000000000000e+00 -9.0278274510389611e+00 8.3691408883945471e+00 -6.1504119619142976e+00 1 0 1 -740 1 5 4.2499999999999999e-01 -5.6153013914286491e+00 5.3493123886781433e+00 -8.0457448175864990e+00 1 0 1 -741 1 1 1.5750000000000000e+00 -9.4006010736587182e+00 7.2944682033683108e+00 9.1931405770212429e+00 1 0 0 -742 1 2 2.1000000000000001e+00 -1.0189610402198802e+01 -7.9297605759123257e-02 6.4359160010201411e+00 1 0 0 -743 1 2 2.1000000000000001e+00 -1.0212904137937610e+01 5.9314797115273628e+00 6.4280531027538306e+00 1 0 0 -744 1 3 -1.0500000000000000e+00 -9.9923029717657226e+00 8.8153286205910888e+00 8.0541331394482896e+00 1 0 0 -745 1 3 -1.0500000000000000e+00 -1.0347577370841730e+01 6.0244660873837574e+00 8.0528534336309434e+00 1 0 0 -746 1 4 -9.4999999999999996e-01 -7.7068834885402087e+00 7.2207286744038370e+00 8.1828858968542733e+00 1 0 0 -747 1 3 -1.0500000000000000e+00 -6.3577402971397685e+00 5.2286383860826824e+00 5.9541124938145380e+00 1 0 0 -748 1 3 -1.0500000000000000e+00 -1.0100793183120766e+01 7.4058245081335947e+00 5.9524106541055115e+00 1 0 0 -749 1 3 -1.0500000000000000e+00 -8.9474022065604224e+00 5.0798241454221369e+00 6.1439110956024354e+00 1 0 0 -750 1 5 4.2499999999999999e-01 -7.2000270353828046e+00 8.0995672068003088e+00 8.0391580946381538e+00 1 0 0 -751 1 1 1.5750000000000000e+00 -1.2008762881451348e+01 2.8115295177180428e+00 9.1931425674069622e+00 1 0 0 -752 1 2 2.1000000000000001e+00 -7.5814135479309908e+00 4.4035983789351896e+00 6.4359165483385254e+00 1 0 0 -753 1 2 2.1000000000000001e+00 -7.6610808670997494e+00 1.4485945780712797e+00 6.4280582613292712e+00 1 0 0 -754 1 3 -1.0500000000000000e+00 -7.4404546055668366e+00 4.3324402056750237e+00 8.0541182772999065e+00 1 0 0 -755 1 3 -1.0500000000000000e+00 -7.7957660342353634e+00 1.5415692603738904e+00 8.0528775182214503e+00 1 0 0 -756 1 4 -9.4999999999999996e-01 -1.0315122227353797e+01 2.7377447118390101e+00 8.1828767909309512e+00 1 0 0 -757 1 3 -1.0500000000000000e+00 -8.9659352915333912e+00 7.4573683553695247e-01 5.9540956560325071e+00 1 0 0 -758 1 3 -1.0500000000000000e+00 -7.5489512806955084e+00 2.9229361730432970e+00 5.9524018601671909e+00 1 0 0 -759 1 3 -1.0500000000000000e+00 -6.3955632518685768e+00 5.9687042658164202e-01 6.1439287069185120e+00 1 0 0 -760 1 5 4.2499999999999999e-01 -9.8081700960310911e+00 3.6166702227703560e+00 8.0390328438422074e+00 1 0 0 -761 1 1 1.5750000000000000e+00 -4.2567053371850658e+00 1.3078168179231042e+00 9.1936310535964232e+00 1 0 0 -762 1 2 2.1000000000000001e+00 -7.3798358768387473e-02 9.0452733241225367e+00 -6.4424155682759778e+00 1 0 1 -763 1 2 2.1000000000000001e+00 -5.0532229357781233e-02 3.0344580784693349e+00 -6.4344918700685572e+00 1 0 1 -764 1 3 -1.0500000000000000e+00 -2.7131416236533745e-01 1.5046495859890285e-01 -8.0605544059037157e+00 1 0 1 -765 1 3 -1.0500000000000000e+00 8.4195332462293493e-02 2.9417357818207392e+00 -8.0593997996762017e+00 1 0 1 -766 1 4 -9.4999999999999996e-01 -2.5566610233707436e+00 1.7451330035208805e+00 -8.1893824664560277e+00 1 0 1 -767 1 3 -1.0500000000000000e+00 -3.9057480740250670e+00 3.7373787164792880e+00 -5.9607940658222685e+00 1 0 1 -768 1 3 -1.0500000000000000e+00 -1.6283268367977044e-01 1.5601301436753872e+00 -5.9586903754265217e+00 1 0 1 -769 1 3 -1.0500000000000000e+00 -1.3159834872646030e+00 3.8861877175565063e+00 -6.1503980963921077e+00 1 0 1 -770 1 5 4.2499999999999999e-01 -3.0634476704969611e+00 8.6639700750263771e-01 -8.0459289853123099e+00 1 0 1 -771 1 1 1.5750000000000000e+00 -1.6485375220706722e+00 5.7907579502462809e+00 9.1936265404422031e+00 1 0 0 -772 1 2 2.1000000000000001e+00 -2.6819735576082735e+00 4.5623781023095979e+00 -6.4424040572249073e+00 1 0 1 -773 1 2 2.1000000000000001e+00 -2.6023515605367979e+00 7.5173327298043446e+00 -6.4345082402300129e+00 1 0 1 -774 1 3 -1.0500000000000000e+00 -2.8231506835232665e+00 4.6333563194435925e+00 -8.0605641951789604e+00 1 0 1 -775 1 3 -1.0500000000000000e+00 -2.4676198319304250e+00 7.4246300333344308e+00 -8.0594222945481242e+00 1 0 1 -776 1 4 -9.4999999999999996e-01 5.1576495784171783e-02 6.2281174409833078e+00 -8.1893454451251166e+00 1 0 1 -777 1 3 -1.0500000000000000e+00 -1.2975095016776308e+00 8.2203029875449154e+00 -5.9607878139978627e+00 1 0 1 -778 1 3 -1.0500000000000000e+00 -2.7146694253441410e+00 6.0430341006248725e+00 -5.9587013238385174e+00 1 0 1 -779 1 3 -1.0500000000000000e+00 -3.8678341546705104e+00 8.3691444919325306e+00 -6.1504110733339727e+00 1 0 1 -780 1 5 4.2499999999999999e-01 -4.5526617430967775e-01 5.3493482680335944e+00 -8.0456383324324694e+00 1 0 1 -781 1 1 1.5750000000000000e+00 -4.2405919059825807e+00 7.2944670077944807e+00 9.1931388109336041e+00 1 0 0 -782 1 2 2.1000000000000001e+00 -5.0296064030418073e+00 -7.9312429721781541e-02 6.4359061250102680e+00 1 0 0 -783 1 2 2.1000000000000001e+00 -5.0528803208991677e+00 5.9314885847207393e+00 6.4280541425652125e+00 1 0 0 -784 1 3 -1.0500000000000000e+00 -4.8323113190408655e+00 8.8153320489722837e+00 8.0541507220343149e+00 1 0 0 -785 1 3 -1.0500000000000000e+00 -5.1875750890510588e+00 6.0244559180381110e+00 8.0528596115841111e+00 1 0 0 -786 1 4 -9.4999999999999996e-01 -2.5468930396501683e+00 7.2207149872186704e+00 8.1829042004208787e+00 1 0 0 -787 1 3 -1.0500000000000000e+00 -1.1976965541013911e+00 5.2286614070351156e+00 5.9541011082395521e+00 1 0 0 -788 1 3 -1.0500000000000000e+00 -4.9407917338772620e+00 7.4058524302343827e+00 5.9524067025542333e+00 1 0 0 -789 1 3 -1.0500000000000000e+00 -3.7873946085238082e+00 5.0798202478013827e+00 6.1439086823543967e+00 1 0 0 -790 1 5 4.2499999999999999e-01 -2.0399936634126092e+00 8.0996016485694859e+00 8.0392480188451927e+00 1 0 0 -791 1 1 1.5750000000000000e+00 -6.8487764459721472e+00 2.8115396349174162e+00 9.1931393353000779e+00 1 0 0 -792 1 2 2.1000000000000001e+00 -2.4214360684733940e+00 4.4035963531915776e+00 6.4359069157849582e+00 1 0 0 -793 1 2 2.1000000000000001e+00 -2.5010867592299606e+00 1.4486079821071627e+00 6.4280700334665895e+00 1 0 0 -794 1 3 -1.0500000000000000e+00 -2.2804693176190796e+00 4.3324382110458508e+00 8.0541466060331786e+00 1 0 0 -795 1 3 -1.0500000000000000e+00 -2.6357629333121757e+00 1.5415738251322431e+00 8.0528749502136669e+00 1 0 0 -796 1 4 -9.4999999999999996e-01 -5.1550909689645312e+00 2.7377879547736299e+00 8.1828937813504332e+00 1 0 0 -797 1 3 -1.0500000000000000e+00 -3.8059367645404496e+00 7.4573545262324359e-01 5.9540888558950602e+00 1 0 0 -798 1 3 -1.0500000000000000e+00 -2.3889553911064834e+00 2.9229182779601004e+00 5.9524183742338437e+00 1 0 0 -799 1 3 -1.0500000000000000e+00 -1.2355527417253249e+00 5.9686629625387155e-01 6.1439250256775200e+00 1 0 0 -800 1 5 4.2499999999999999e-01 -4.6481532735579094e+00 3.6166830920668787e+00 8.0391899192038352e+00 1 0 0 -801 1 1 1.5750000000000000e+00 9.5960721862191178e-01 1.0273669203704241e+01 9.1936235733136655e+00 0 0 0 -802 1 2 2.1000000000000001e+00 4.9172083055255325e+00 -1.7852191623671651e+01 -6.4424003148067897e+00 0 1 1 -803 1 2 2.1000000000000001e+00 5.1658109241490635e+00 1.2000275388808074e+01 -6.4345007360704409e+00 0 0 1 -804 1 3 -1.0500000000000000e+00 4.9450244688133118e+00 9.1162949204304589e+00 -8.0605632730520096e+00 0 0 1 -805 1 3 -1.0500000000000000e+00 5.3005308774925517e+00 1.1907548980836420e+01 -8.0594017059932295e+00 0 0 1 -806 1 4 -9.4999999999999996e-01 2.6597454135294925e+00 1.0711060731609876e+01 -8.1893222259048226e+00 0 0 1 -807 1 3 -1.0500000000000000e+00 1.3105929168482859e+00 1.2703195772710561e+01 -5.9607978618737851e+00 0 0 1 -808 1 3 -1.0500000000000000e+00 5.0535126422700269e+00 1.0525967976026514e+01 -5.9587374189296218e+00 0 0 1 -809 1 3 -1.0500000000000000e+00 3.9003367713006512e+00 1.2852015907184782e+01 -6.1503929107381827e+00 0 0 1 -810 1 5 4.2499999999999999e-01 2.1529230807864241e+00 9.8323236639573999e+00 -8.0454353340627449e+00 0 0 1 -811 1 1 1.5750000000000000e+00 3.5677901403638028e+00 1.4756558886709637e+01 9.1936320859504761e+00 0 0 0 -812 1 2 2.1000000000000001e+00 2.5343724058499628e+00 1.3528195803657599e+01 -6.4424233387050833e+00 0 0 1 -813 1 2 2.1000000000000001e+00 2.6139913107597703e+00 1.6483175576855384e+01 -6.4345033330073518e+00 0 0 1 -814 1 3 -1.0500000000000000e+00 2.3931907288388619e+00 1.3599192072250563e+01 -8.0605653726222926e+00 0 0 1 -815 1 3 -1.0500000000000000e+00 2.7487038780850757e+00 1.6390457170443742e+01 -8.0594014632146163e+00 0 0 1 -816 1 4 -9.4999999999999996e-01 5.2678674489775172e+00 1.5193891941576492e+01 -8.1893953522173568e+00 0 0 1 -817 1 3 -1.0500000000000000e+00 3.9187441878934699e+00 1.7186101345028060e+01 -5.9607852712427771e+00 0 0 1 -818 1 3 -1.0500000000000000e+00 2.5016682244761341e+00 1.5008886897788546e+01 -5.9586911872320503e+00 0 0 1 -819 1 3 -1.0500000000000000e+00 1.3485131765279306e+00 1.7334940064883479e+01 -6.1504041699538501e+00 0 0 1 -820 1 5 4.2499999999999999e-01 4.7610305469518792e+00 1.4315086371947789e+01 -8.0459836447046609e+00 0 0 1 -821 1 1 1.5750000000000000e+00 9.7572650104669378e-01 1.6260281732774981e+01 9.1931398694629891e+00 0 0 0 -822 1 2 2.1000000000000001e+00 1.8672671622704407e-01 8.8865134574184275e+00 6.4359252403327680e+00 0 0 0 -823 1 2 2.1000000000000001e+00 1.6341323909156813e-01 1.4897327838108385e+01 6.4280628738807160e+00 0 0 0 -824 1 3 -1.0500000000000000e+00 1.5869811845495363e-01 -1.8082123015369124e+01 8.0541340213658152e+00 0 1 0 -825 1 3 -1.0500000000000000e+00 2.8742433885017959e-02 1.4990304244778233e+01 8.0528666545587271e+00 0 0 0 -826 1 4 -9.4999999999999996e-01 2.6694272128344245e+00 1.6186542002547892e+01 8.1828957582626032e+00 0 0 0 -827 1 3 -1.0500000000000000e+00 4.0185585050563635e+00 1.4194457856414292e+01 5.9541011149118788e+00 0 0 0 -828 1 3 -1.0500000000000000e+00 2.7554898326217625e-01 1.6371647903721165e+01 5.9524005485591456e+00 0 0 0 -829 1 3 -1.0500000000000000e+00 1.4289385783169752e+00 1.4045613821719037e+01 6.1439242276787418e+00 0 0 0 -830 1 5 4.2499999999999999e-01 3.1763286179058490e+00 1.7065430306293440e+01 8.0392248483087627e+00 0 0 0 -831 1 1 1.5750000000000000e+00 -1.6324184683740341e+00 1.1777344934266068e+01 9.1931465772030379e+00 0 0 0 -832 1 2 2.1000000000000001e+00 2.7949109368093250e+00 1.3369431615951214e+01 6.4359123446196520e+00 0 0 0 -833 1 2 2.1000000000000001e+00 2.7152603396729695e+00 1.0414397731227350e+01 6.4280500078867284e+00 0 0 0 -834 1 3 -1.0500000000000000e+00 2.9358844870702256e+00 1.3298249254921139e+01 8.0541035265692571e+00 0 0 0 -835 1 3 -1.0500000000000000e+00 2.5805749833761542e+00 1.0507387417059693e+01 8.0528735429538472e+00 0 0 0 -836 1 4 -9.4999999999999996e-01 6.1197499880652373e-02 1.1703528856756993e+01 8.1828384666384260e+00 0 0 0 -837 1 3 -1.0500000000000000e+00 1.4104102567525914e+00 9.7115620528564612e+00 5.9541021771064706e+00 0 0 0 -838 1 3 -1.0500000000000000e+00 2.8273745913960777e+00 1.1888758720918936e+01 5.9524302538497906e+00 0 0 0 -839 1 3 -1.0500000000000000e+00 3.9807696072751568e+00 9.5627134385235948e+00 6.1439195726972784e+00 0 0 0 -840 1 5 4.2499999999999999e-01 5.6813568547824111e-01 1.2582401681601350e+01 8.0387418936318475e+00 0 0 0 -841 1 1 1.5750000000000000e+00 6.1196215253814046e+00 1.0273659065047806e+01 9.1936258533248534e+00 0 0 0 -842 1 2 2.1000000000000001e+00 -1.0562814009027809e+01 -1.7852194770053313e+01 -6.4424105685276851e+00 1 1 1 -843 1 2 2.1000000000000001e+00 -1.0314192648491979e+01 1.2000288960951057e+01 -6.4344887365136625e+00 1 0 1 -844 1 3 -1.0500000000000000e+00 1.0105009678123249e+01 9.1162929018207564e+00 -8.0605338552440937e+00 0 0 1 -845 1 3 -1.0500000000000000e+00 -1.0179466880668443e+01 1.1907552881889412e+01 -8.0594043468605676e+00 1 0 1 -846 1 4 -9.4999999999999996e-01 7.8197150885211819e+00 1.0711020034930083e+01 -8.1893365530719642e+00 0 0 1 -847 1 3 -1.0500000000000000e+00 6.4705998763924484e+00 1.2703199920926114e+01 -5.9607930505693743e+00 0 0 1 -848 1 3 -1.0500000000000000e+00 -1.0426491548728604e+01 1.0525953700197832e+01 -5.9587210876857588e+00 1 0 1 -849 1 3 -1.0500000000000000e+00 9.0603500318690493e+00 1.2852009950045630e+01 -6.1503965426825715e+00 0 0 1 -850 1 5 4.2499999999999999e-01 7.3129093231943401e+00 9.8323158297765794e+00 -8.0455729433718481e+00 0 0 1 -851 1 1 1.5750000000000000e+00 -1.1912201911242379e+01 1.4756558626125500e+01 9.1936299374457917e+00 1 0 0 -852 1 2 2.1000000000000001e+00 7.6943659531364794e+00 1.3528208886055431e+01 -6.4424143301466863e+00 0 0 1 -853 1 2 2.1000000000000001e+00 7.7739676680323946e+00 1.6483168696691120e+01 -6.4345034954359610e+00 0 0 1 -854 1 3 -1.0500000000000000e+00 7.5531973024030030e+00 1.3599188471640346e+01 -8.0605797041230307e+00 0 0 1 -855 1 3 -1.0500000000000000e+00 7.9087020351309256e+00 1.6390467445460896e+01 -8.0594079096168336e+00 0 0 1 -856 1 4 -9.4999999999999996e-01 -1.0212139335865229e+01 1.5193882091436695e+01 -8.1893761679918828e+00 1 0 1 -857 1 3 -1.0500000000000000e+00 9.0787892522491873e+00 1.7186124575197912e+01 -5.9607974326211624e+00 0 0 1 -858 1 3 -1.0500000000000000e+00 7.6616656495931785e+00 1.5008857806803714e+01 -5.9586855554315239e+00 0 0 1 -859 1 3 -1.0500000000000000e+00 6.5085065607252339e+00 1.7334943758700970e+01 -6.1504023223690254e+00 0 0 1 -860 1 5 4.2499999999999999e-01 9.9210652194241220e+00 1.4315120680602522e+01 -8.0458834643735155e+00 0 0 1 -861 1 1 1.5750000000000000e+00 6.1357349670429358e+00 1.6260281068792370e+01 9.1931373680824571e+00 0 0 0 -862 1 2 2.1000000000000001e+00 5.3467301429260417e+00 8.8864991034834802e+00 6.4359154980254800e+00 0 0 0 -863 1 2 2.1000000000000001e+00 5.3234375680067387e+00 1.4897337020707621e+01 6.4280633305033579e+00 0 0 0 -864 1 3 -1.0500000000000000e+00 5.3186906165474923e+00 -1.8082119281913194e+01 8.0541512151208217e+00 0 1 0 -865 1 3 -1.0500000000000000e+00 5.1887452446427620e+00 1.4990293685008570e+01 8.0528738710979937e+00 0 0 0 -866 1 4 -9.4999999999999996e-01 -1.2810582246898260e+01 1.6186528254419503e+01 8.1829142774136940e+00 1 0 0 -867 1 3 -1.0500000000000000e+00 -1.1461395078265998e+01 1.4194482279531240e+01 5.9540899004490573e+00 1 0 0 -868 1 3 -1.0500000000000000e+00 5.4355508226374880e+00 1.6371676240781067e+01 5.9523953371586007e+00 0 0 0 -869 1 3 -1.0500000000000000e+00 6.5889448393182057e+00 1.4045610487796125e+01 6.1439231486978052e+00 0 0 0 -870 1 5 4.2499999999999999e-01 -1.2303637921787351e+01 1.7065464446927333e+01 8.0393139102372757e+00 1 0 0 -871 1 1 1.5750000000000000e+00 3.5275677694768159e+00 1.1777354695333322e+01 9.1931437178279722e+00 0 0 0 -872 1 2 2.1000000000000001e+00 -1.2685112265527499e+01 1.3369430390314744e+01 6.4359024875393231e+00 1 0 0 -873 1 2 2.1000000000000001e+00 -1.2764745750720230e+01 1.0414410392944081e+01 6.4280618196758432e+00 1 0 0 -874 1 3 -1.0500000000000000e+00 -1.2544129418050623e+01 1.3298246737339653e+01 8.0541308893949868e+00 1 0 0 -875 1 3 -1.0500000000000000e+00 -1.2899422299851542e+01 1.0507392314703441e+01 8.0528703655478253e+00 1 0 0 -876 1 4 -9.4999999999999996e-01 5.2212278834502932e+00 1.1703569772888418e+01 8.1828544574580064e+00 0 0 0 -877 1 3 -1.0500000000000000e+00 6.5704071848659780e+00 9.7115602039361448e+00 5.9540954146707854e+00 0 0 0 -878 1 3 -1.0500000000000000e+00 -1.2652629524673211e+01 1.1888740289825776e+01 5.9524475845137914e+00 1 0 0 -879 1 3 -1.0500000000000000e+00 -1.1499218746205949e+01 9.5627087106832143e+00 6.1439160615276585e+00 1 0 0 -880 1 5 4.2499999999999999e-01 5.7281515933265581e+00 1.2582412438419141e+01 8.0388892666496652e+00 0 0 0 -881 1 1 1.5750000000000000e+00 -9.3603927864488465e+00 1.0273669083913415e+01 9.1936233661194393e+00 1 0 0 -882 1 2 2.1000000000000001e+00 -5.4027908311748014e+00 -1.7852191591920860e+01 -6.4423999875116174e+00 1 1 1 -883 1 2 2.1000000000000001e+00 -5.1541886950179352e+00 1.2000275601569015e+01 -6.4345007553289859e+00 1 0 1 -884 1 3 -1.0500000000000000e+00 -5.3749756973895453e+00 9.1162952266749038e+00 -8.0605627427916939e+00 1 0 1 -885 1 3 -1.0500000000000000e+00 -5.0194697033740354e+00 1.1907548341371790e+01 -8.0594018260737599e+00 1 0 1 -886 1 4 -9.4999999999999996e-01 -7.6602542409070491e+00 1.0711060750080897e+01 -8.1893221273874310e+00 1 0 1 -887 1 3 -1.0500000000000000e+00 -9.0094074701008555e+00 1.2703195909859126e+01 -5.9607981827342975e+00 1 0 1 -888 1 3 -1.0500000000000000e+00 -5.2664879046879927e+00 1.0525968292949354e+01 -5.9587382228044579e+00 1 0 1 -889 1 3 -1.0500000000000000e+00 -6.4196629439277020e+00 1.2852015502374297e+01 -6.1503932553102407e+00 1 0 1 -890 1 5 4.2499999999999999e-01 -8.1670767718813568e+00 9.8323240619096737e+00 -8.0454342284319758e+00 1 0 1 -891 1 1 1.5750000000000000e+00 -6.7522099413499017e+00 1.4756558947084972e+01 9.1936323727388007e+00 1 0 0 -892 1 2 2.1000000000000001e+00 -7.7856279740588574e+00 1.3528195363213435e+01 -6.4424232658091753e+00 1 0 1 -893 1 2 2.1000000000000001e+00 -7.7060087959671275e+00 1.6483175890169566e+01 -6.4345031930632031e+00 1 0 1 -894 1 3 -1.0500000000000000e+00 -7.9268092601655393e+00 1.3599192115246709e+01 -8.0605653924195604e+00 1 0 1 -895 1 3 -1.0500000000000000e+00 -7.5712960116532937e+00 1.6390457132414308e+01 -8.0594014597887931e+00 1 0 1 -896 1 4 -9.4999999999999996e-01 -5.0521325823369825e+00 1.5193892557836794e+01 -8.1893952534646299e+00 1 0 1 -897 1 3 -1.0500000000000000e+00 -6.4012557391469294e+00 1.7186101532233774e+01 -5.9607858793978696e+00 1 0 1 -898 1 3 -1.0500000000000000e+00 -7.8183317428747330e+00 1.5008887211419324e+01 -5.9586911269344274e+00 1 0 1 -899 1 3 -1.0500000000000000e+00 -8.9714872285006528e+00 1.7334939869012782e+01 -6.1504040245545895e+00 1 0 1 -900 1 5 4.2499999999999999e-01 -5.5589691759804651e+00 1.4315086850375383e+01 -8.0459819775647716e+00 1 0 1 -901 1 1 1.5750000000000000e+00 -9.3442733480072278e+00 1.6260281622445302e+01 9.1931395426557110e+00 1 0 0 -902 1 2 2.1000000000000001e+00 -1.0133273070639682e+01 8.8865135585351283e+00 6.4359254506516130e+00 1 0 0 -903 1 2 2.1000000000000001e+00 -1.0156586250533065e+01 1.4897327970275054e+01 6.4280630778184857e+00 1 0 0 -904 1 3 -1.0500000000000000e+00 -1.0161302019375981e+01 -1.8082122656764607e+01 8.0541343934514202e+00 1 1 0 -905 1 3 -1.0500000000000000e+00 -1.0291257777350937e+01 1.4990303857072181e+01 8.0528666793281509e+00 1 0 0 -906 1 4 -9.4999999999999996e-01 -7.6505730793458735e+00 1.6186540928105540e+01 8.1828953469210077e+00 1 0 0 -907 1 3 -1.0500000000000000e+00 -6.3014405501587794e+00 1.4194458390634342e+01 5.9541017585236222e+00 1 0 0 -908 1 3 -1.0500000000000000e+00 -1.0044451276249209e+01 1.6371648291125627e+01 5.9523999323485963e+00 1 0 0 -909 1 3 -1.0500000000000000e+00 -8.8910624691465792e+00 1.4045613984800305e+01 6.1439241727047040e+00 1 0 0 -910 1 5 4.2499999999999999e-01 -7.1436715781015101e+00 1.7065429938006378e+01 8.0392210249142231e+00 1 0 0 -911 1 1 1.5750000000000000e+00 -1.1952418365405634e+01 1.1777344769910933e+01 9.1931467279769166e+00 1 0 0 -912 1 2 2.1000000000000001e+00 -7.5250893067069100e+00 1.3369431895710402e+01 6.4359125458494333e+00 1 0 0 -913 1 2 2.1000000000000001e+00 -7.6047401369908787e+00 1.0414397698876499e+01 6.4280497411191835e+00 1 0 0 -914 1 3 -1.0500000000000000e+00 -7.3841152575290465e+00 1.3298249173792914e+01 8.0541030584957483e+00 1 0 0 -915 1 3 -1.0500000000000000e+00 -7.7394250224018784e+00 1.0507387430609697e+01 8.0528732915954180e+00 1 0 0 -916 1 4 -9.4999999999999996e-01 -1.0258802640316311e+01 1.1703528516691946e+01 8.1828385357148221e+00 1 0 0 -917 1 3 -1.0500000000000000e+00 -8.9095901142621763e+00 9.7115620830072906e+00 5.9541024500382438e+00 1 0 0 -918 1 3 -1.0500000000000000e+00 -7.4926254257397229e+00 1.1888758199297200e+01 5.9524304645907566e+00 1 0 0 -919 1 3 -1.0500000000000000e+00 -6.3392300077947583e+00 9.5627130728697161e+00 6.1439197965438819e+00 1 0 0 -920 1 5 4.2499999999999999e-01 -9.7518639894871963e+00 1.2582402105100961e+01 8.0387424963826071e+00 1 0 0 -921 1 1 1.5750000000000000e+00 -4.2003781666602471e+00 1.0273659178062957e+01 9.1936255865073093e+00 1 0 0 -922 1 2 2.1000000000000001e+00 -2.4281380657306251e-01 -1.7852194978795438e+01 -6.4424104817889924e+00 1 1 1 -923 1 2 2.1000000000000001e+00 5.8073311176265463e-03 1.2000289091306779e+01 -6.4344887684447798e+00 1 0 1 -924 1 3 -1.0500000000000000e+00 -2.1499032318097377e-01 9.1162934469930086e+00 -8.0605336122239901e+00 1 0 1 -925 1 3 -1.0500000000000000e+00 1.4053305155494300e-01 1.1907552348135759e+01 -8.0594038296133501e+00 1 0 1 -926 1 4 -9.4999999999999996e-01 -2.5002851790322218e+00 1.0711019049960040e+01 -8.1893367336811629e+00 1 0 1 -927 1 3 -1.0500000000000000e+00 -3.8493992000608142e+00 1.2703200254186580e+01 -5.9607924527654337e+00 1 0 1 -928 1 3 -1.0500000000000000e+00 -1.0649173895659203e-01 1.0525953880245513e+01 -5.9587217128014212e+00 1 0 1 -929 1 3 -1.0500000000000000e+00 -1.2596509514345406e+00 1.2852010139898166e+01 -6.1503965479066123e+00 1 0 1 -930 1 5 4.2499999999999999e-01 -3.0070906737129794e+00 9.8323157767275227e+00 -8.0455750813439302e+00 1 0 1 -931 1 1 1.5750000000000000e+00 -1.5922020057366204e+00 1.4756558606205918e+01 9.1936300371528645e+00 1 0 0 -932 1 2 2.1000000000000001e+00 -2.6256342849090215e+00 1.3528209535884709e+01 -6.4424139428101448e+00 1 0 1 -933 1 2 2.1000000000000001e+00 -2.5460327371080291e+00 1.6483168361853000e+01 -6.4345035627546698e+00 1 0 1 -934 1 3 -1.0500000000000000e+00 -2.7668025513118506e+00 1.3599188282117982e+01 -8.0605804580563216e+00 1 0 1 -935 1 3 -1.0500000000000000e+00 -2.4112982996207268e+00 1.6390467789148698e+01 -8.0594086153186755e+00 1 0 1 -936 1 4 -9.4999999999999996e-01 1.0786065194175976e-01 1.5193881944029133e+01 -8.1893757702455225e+00 1 0 1 -937 1 3 -1.0500000000000000e+00 -1.2412111852687584e+00 1.7186124642348755e+01 -5.9607969511890113e+00 1 0 1 -938 1 3 -1.0500000000000000e+00 -2.6583342475974394e+00 1.5008857192020724e+01 -5.9586852469727489e+00 1 0 1 -939 1 3 -1.0500000000000000e+00 -3.8114931308841973e+00 1.7334943467465425e+01 -6.1504023276487931e+00 1 0 1 -940 1 5 4.2499999999999999e-01 -3.9893427220104982e-01 1.4315121673056158e+01 -8.0458809439058001e+00 1 0 1 -941 1 1 1.5750000000000000e+00 -4.1842647733189811e+00 1.6260280900738014e+01 9.1931373541656640e+00 1 0 0 -942 1 2 2.1000000000000001e+00 -4.9732694000809214e+00 8.8864994991107871e+00 6.4359156339852426e+00 1 0 0 -943 1 2 2.1000000000000001e+00 -4.9965619586163417e+00 1.4897336869865573e+01 6.4280633746036724e+00 1 0 0 -944 1 3 -1.0500000000000000e+00 -5.0013096301578557e+00 -1.8082119246981069e+01 8.0541515174107730e+00 1 1 0 -945 1 3 -1.0500000000000000e+00 -5.1312553567957622e+00 1.4990293360305930e+01 8.0528735880481079e+00 1 0 0 -946 1 4 -9.4999999999999996e-01 -2.4905823373432447e+00 1.6186527481653730e+01 8.1829144834701140e+00 1 0 0 -947 1 3 -1.0500000000000000e+00 -1.1413951190011318e+00 1.4194482448426054e+01 5.9540897749393551e+00 1 0 0 -948 1 3 -1.0500000000000000e+00 -4.8844497340440238e+00 1.6371676351109574e+01 5.9523950906844671e+00 1 0 0 -949 1 3 -1.0500000000000000e+00 -3.7310550651778556e+00 1.4045610398815395e+01 6.1439228472924778e+00 1 0 0 -950 1 5 4.2499999999999999e-01 -1.9836375134124715e+00 1.7065464974264582e+01 8.0393139158871101e+00 1 0 0 -951 1 1 1.5750000000000000e+00 -6.7924322972263633e+00 1.1777354850443714e+01 9.1931438146612265e+00 1 0 0 -952 1 2 2.1000000000000001e+00 -2.3651126781701990e+00 1.3369430006310449e+01 6.4359026051072608e+00 1 0 0 -953 1 2 2.1000000000000001e+00 -2.4447460827353300e+00 1.0414411083296347e+01 6.4280619889271122e+00 1 0 0 -954 1 3 -1.0500000000000000e+00 -2.2241294262454936e+00 1.3298247110263322e+01 8.0541315514418770e+00 1 0 0 -955 1 3 -1.0500000000000000e+00 -2.5794223333527002e+00 1.0507391785141490e+01 8.0528704188601807e+00 1 0 0 -956 1 4 -9.4999999999999996e-01 -5.0987720093367859e+00 1.1703570724197846e+01 8.1828547460418974e+00 1 0 0 -957 1 3 -1.0500000000000000e+00 -3.7495921260073386e+00 9.7115606887493051e+00 5.9540950468016760e+00 1 0 0 -958 1 3 -1.0500000000000000e+00 -2.3326296115329681e+00 1.1888740063197147e+01 5.9524471808153692e+00 1 0 0 -959 1 3 -1.0500000000000000e+00 -1.1792192073374927e+00 9.5627085299782664e+00 6.1439162617713929e+00 1 0 0 -960 1 5 4.2499999999999999e-01 -4.5918481348798545e+00 1.2582412837426194e+01 8.0388923615312642e+00 1 0 0 -961 1 1 1.5750000000000000e+00 7.9060983098709947e-01 -1.6623787873959273e+01 9.1936241221863249e+00 0 1 0 -962 1 2 2.1000000000000001e+00 4.9735388822158324e+00 -8.8863555261994307e+00 -6.4424092998091940e+00 0 1 1 -963 1 2 2.1000000000000001e+00 4.9968241249244869e+00 -1.4897218761397980e+01 -6.4345103916532667e+00 0 1 1 -964 1 3 -1.0500000000000000e+00 4.7760131551751499e+00 -1.7781192163992994e+01 -8.0605609776657161e+00 0 1 1 -965 1 3 -1.0500000000000000e+00 5.1315425565977346e+00 -1.4989934535773086e+01 -8.0594167673316317e+00 0 1 1 -966 1 4 -9.4999999999999996e-01 2.4907718354025317e+00 -1.6186388039551588e+01 -8.1893254397424453e+00 0 1 1 -967 1 3 -1.0500000000000000e+00 1.1416263133331963e+00 -1.4194270381621900e+01 -5.9607865702829335e+00 0 1 1 -968 1 3 -1.0500000000000000e+00 4.8845019877675924e+00 -1.6371500937997865e+01 -5.9587293889869883e+00 0 1 1 -969 1 3 -1.0500000000000000e+00 3.7313268130514974e+00 -1.4045419052787359e+01 -6.1504066950524141e+00 0 1 1 -970 1 5 4.2499999999999999e-01 1.9839009717795477e+00 -1.7065170720648808e+01 -8.0454457650585169e+00 0 1 1 -971 1 1 1.5750000000000000e+00 3.3987763835280393e+00 -1.2140905346190326e+01 9.1936279670263232e+00 0 1 0 -972 1 2 2.1000000000000001e+00 2.3653801838590205e+00 -1.3369283232827510e+01 -6.4424200206570612e+00 0 1 1 -973 1 2 2.1000000000000001e+00 2.4449786524018275e+00 -1.0414270762708139e+01 -6.4344947097414282e+00 0 1 1 -974 1 3 -1.0500000000000000e+00 2.2241844110169264e+00 -1.3298260551948676e+01 -8.0605520411220617e+00 0 1 1 -975 1 3 -1.0500000000000000e+00 2.5796912969422721e+00 -1.0507005922241635e+01 -8.0593940590064257e+00 0 1 1 -976 1 4 -9.4999999999999996e-01 5.0988702527267655e+00 -1.1703548043198262e+01 -8.1893609630806132e+00 0 1 1 -977 1 3 -1.0500000000000000e+00 3.7497226337578446e+00 -9.7113711982098554e+00 -5.9607926003920886e+00 0 1 1 -978 1 3 -1.0500000000000000e+00 2.3326731922370776e+00 -1.1888581465336951e+01 -5.9587182867267821e+00 0 1 1 -979 1 3 -1.0500000000000000e+00 1.1795119362153041e+00 -9.5625531841926961e+00 -6.1503935088776673e+00 0 1 1 -980 1 5 4.2499999999999999e-01 4.5920550844469084e+00 -1.2582296526462123e+01 -8.0457276875216497e+00 0 1 1 -981 1 1 1.5750000000000000e+00 8.0672847412836290e-01 -1.0637207792244846e+01 9.1931446898855285e+00 0 1 0 -982 1 2 2.1000000000000001e+00 1.7735241745661767e-02 -1.8010958050662659e+01 6.4359214102136661e+00 0 1 0 -983 1 2 2.1000000000000001e+00 -5.5984692701720462e-03 -1.2000144101042064e+01 6.4280608641863495e+00 0 1 0 -984 1 3 -1.0500000000000000e+00 2.1504497388601607e-01 -9.1163020892610103e+00 8.0541133501916313e+00 0 1 0 -985 1 3 -1.0500000000000000e+00 -1.4026752501513329e-01 -1.1907157403873917e+01 8.0528737619875344e+00 0 1 0 -986 1 4 -9.4999999999999996e-01 2.5003778817693600e+00 -1.0710992981939540e+01 8.1828509244580552e+00 0 1 0 -987 1 3 -1.0500000000000000e+00 3.8495354817159484e+00 -1.2703010397069693e+01 5.9540985576838814e+00 0 1 0 -988 1 3 -1.0500000000000000e+00 1.0654000383107132e-01 -1.0525822550974517e+01 5.9524296977026996e+00 0 1 0 -989 1 3 -1.0500000000000000e+00 1.2599376891911795e+00 -1.2851860677111500e+01 6.1439254063881670e+00 0 1 0 -990 1 5 4.2499999999999999e-01 3.0073045113687797e+00 -9.8321299051036668e+00 8.0388731267178173e+00 0 1 0 -991 1 1 1.5750000000000000e+00 -1.8014219144703780e+00 -1.5120102745243090e+01 9.1931438625465880e+00 0 1 0 -992 1 2 2.1000000000000001e+00 2.6258996467147959e+00 -1.3528044251547879e+01 6.4359209604334673e+00 0 1 0 -993 1 2 2.1000000000000001e+00 2.5462735712870828e+00 -1.6483086989741455e+01 6.4280448059299271e+00 0 1 0 -994 1 3 -1.0500000000000000e+00 2.7668677793957492e+00 -1.3599231581151475e+01 8.0541173845552336e+00 0 1 0 -995 1 3 -1.0500000000000000e+00 2.4115859888696161e+00 -1.6390097180934195e+01 8.0528587154913431e+00 0 1 0 -996 1 4 -9.4999999999999996e-01 -1.0775774466886645e-01 -1.5193886699232316e+01 8.1828630796662409e+00 0 1 0 -997 1 3 -1.0500000000000000e+00 1.2414435679215039e+00 -1.7185906236511268e+01 5.9541111590081126e+00 0 1 0 -998 1 3 -1.0500000000000000e+00 2.6583690581402628e+00 -1.5008709077371243e+01 5.9524182019502625e+00 0 1 0 -999 1 3 -1.0500000000000000e+00 3.8117604092858510e+00 -1.7334728765347329e+01 6.1439089845392907e+00 0 1 0 -1000 1 5 4.2499999999999999e-01 3.9913087790997537e-01 -1.4315031645600069e+01 8.0389424860193159e+00 0 1 0 -1001 1 1 1.5750000000000000e+00 5.9506242267994338e+00 -1.6623797722718635e+01 9.1936266671202027e+00 0 1 0 -1002 1 2 2.1000000000000001e+00 -1.0506484231044222e+01 -8.8863590027846140e+00 -6.4424197062906847e+00 1 1 1 -1003 1 2 2.1000000000000001e+00 -1.0483178876911868e+01 -1.4897205772908450e+01 -6.4344990737011551e+00 1 1 1 -1004 1 3 -1.0500000000000000e+00 9.9359983241624121e+00 -1.7781194811616796e+01 -8.0605324246202574e+00 0 1 1 -1005 1 3 -1.0500000000000000e+00 -1.0348454886651519e+01 -1.4989930517170308e+01 -8.0594191130608888e+00 1 1 1 -1006 1 4 -9.4999999999999996e-01 7.6507412164599700e+00 -1.6186429673609464e+01 -8.1893398094371470e+00 0 1 1 -1007 1 3 -1.0500000000000000e+00 6.3016333555911750e+00 -1.4194266019203811e+01 -5.9607817823241254e+00 0 1 1 -1008 1 3 -1.0500000000000000e+00 -1.0595502565248184e+01 -1.6371514961221607e+01 -5.9587127227690981e+00 1 1 1 -1009 1 3 -1.0500000000000000e+00 8.8913398738443519e+00 -1.4045424689210986e+01 -6.1504098107569085e+00 0 1 1 -1010 1 5 4.2499999999999999e-01 7.1438876889407545e+00 -1.7065178919134084e+01 -8.0455854917667171e+00 0 1 1 -1011 1 1 1.5750000000000000e+00 -1.2081215850500879e+01 -1.2140905395609227e+01 9.1936259420414075e+00 1 1 0 -1012 1 2 2.1000000000000001e+00 7.5253738692339525e+00 -1.3369269642659075e+01 -6.4424111597687768e+00 0 1 1 -1013 1 2 2.1000000000000001e+00 7.6049545385687836e+00 -1.0414276974615465e+01 -6.4344945980992394e+00 0 1 1 -1014 1 3 -1.0500000000000000e+00 7.3841902361699852e+00 -1.3298264178152394e+01 -8.0605659001293244e+00 0 1 1 -1015 1 3 -1.0500000000000000e+00 7.7396886594995777e+00 -1.0506995362793919e+01 -8.0594009666794690e+00 0 1 1 -1016 1 4 -9.4999999999999996e-01 -1.0381136033782756e+01 -1.1703557162467805e+01 -8.1893415275727754e+00 1 1 1 -1017 1 3 -1.0500000000000000e+00 8.9097683875275777e+00 -9.7113477429998554e+00 -5.9608036880169948e+00 0 1 1 -1018 1 3 -1.0500000000000000e+00 7.4926707750249442e+00 -1.1888611603990626e+01 -5.9587129622138315e+00 0 1 1 -1019 1 3 -1.0500000000000000e+00 6.3395050264705226e+00 -9.5625498048806605e+00 -6.1503917722438839e+00 0 1 1 -1020 1 5 4.2499999999999999e-01 9.7520894232513022e+00 -1.2582261952400280e+01 -8.0456251567187103e+00 0 1 1 -1021 1 1 1.5750000000000000e+00 5.9667370778486841e+00 -1.0637208378655330e+01 9.1931422048264544e+00 0 1 0 -1022 1 2 2.1000000000000001e+00 5.1777388423707791e+00 -1.8010972751178073e+01 6.4359121754500244e+00 0 1 0 -1023 1 2 2.1000000000000001e+00 5.1544257741572128e+00 -1.2000135136612140e+01 6.4280617964993638e+00 0 1 0 -1024 1 3 -1.0500000000000000e+00 5.3750375393141656e+00 -9.1162982390217753e+00 8.0541305365780431e+00 0 1 0 -1025 1 3 -1.0500000000000000e+00 5.0197352902290149e+00 -1.1907167532088971e+01 8.0528807818657455e+00 0 1 0 -1026 1 4 -9.4999999999999996e-01 -1.2979631380919937e+01 -1.0711006291129422e+01 8.1828700503208935e+00 1 1 0 -1027 1 3 -1.0500000000000000e+00 -1.1630417926343309e+01 -1.2702985659105673e+01 5.9540877407865125e+00 1 1 0 -1028 1 3 -1.0500000000000000e+00 5.2665416753772529e+00 -1.0525794189955786e+01 5.9524244742663583e+00 0 1 0 -1029 1 3 -1.0500000000000000e+00 6.4199440092225899e+00 -1.2851863874618857e+01 6.1439235679236717e+00 0 1 0 -1030 1 5 4.2499999999999999e-01 -1.2472661329901149e+01 -9.8320942016287756e+00 8.0389673105729180e+00 1 1 0 -1031 1 1 1.5750000000000000e+00 3.3585649047189889e+00 -1.5120093348845725e+01 9.1931411954480566e+00 0 1 0 -1032 1 2 2.1000000000000001e+00 -1.2854123594330217e+01 -1.3528045164039147e+01 6.4359116103016181e+00 1 1 0 -1033 1 2 2.1000000000000001e+00 -1.2933732590309141e+01 -1.6483074437729339e+01 6.4280564286910398e+00 1 1 0 -1034 1 3 -1.0500000000000000e+00 -1.2713145906083197e+01 -1.3599233632746742e+01 8.0541449495269859e+00 1 1 0 -1035 1 3 -1.0500000000000000e+00 -1.3068411221795856e+01 -1.6390092450304788e+01 8.0528554659863651e+00 1 1 0 -1036 1 4 -9.4999999999999996e-01 5.0522727200298299e+00 -1.5193845531977976e+01 8.1828789851171209e+00 0 1 0 -1037 1 3 -1.0500000000000000e+00 6.4014411247152445e+00 -1.7185907439712917e+01 5.9541046118211618e+00 0 1 0 -1038 1 3 -1.0500000000000000e+00 -1.2821635126045146e+01 -1.5008727883675213e+01 5.9524348860327301e+00 1 1 0 -1039 1 3 -1.0500000000000000e+00 -1.1668227901039566e+01 -1.7334733486964044e+01 6.1439059255523709e+00 1 1 0 -1040 1 5 4.2499999999999999e-01 5.5591473737227073e+00 -1.4315020006199346e+01 8.0390921650199161e+00 0 1 0 -1041 1 1 1.5750000000000000e+00 -9.5293899139307694e+00 -1.6623787874027308e+01 9.1936237921326978e+00 1 1 0 -1042 1 2 2.1000000000000001e+00 -5.3464608308947765e+00 -8.8863556911962096e+00 -6.4424092176216048e+00 1 1 1 -1043 1 2 2.1000000000000001e+00 -5.3231748952036835e+00 -1.4897218973116527e+01 -6.4345104241940962e+00 1 1 1 -1044 1 3 -1.0500000000000000e+00 -5.5439872108319319e+00 -1.7781192038243685e+01 -8.0605608257717840e+00 1 1 1 -1045 1 3 -1.0500000000000000e+00 -5.1884582357209057e+00 -1.4989934983843813e+01 -8.0594168014332030e+00 1 1 1 -1046 1 4 -9.4999999999999996e-01 -7.8292281421606535e+00 -1.6186388852721340e+01 -8.1893254252454835e+00 1 1 1 -1047 1 3 -1.0500000000000000e+00 -9.1783739996627851e+00 -1.4194270057895784e+01 -5.9607866851716160e+00 1 1 1 -1048 1 3 -1.0500000000000000e+00 -5.4354986326112078e+00 -1.6371500383854073e+01 -5.9587300155577916e+00 1 1 1 -1049 1 3 -1.0500000000000000e+00 -6.5886729673149071e+00 -1.4045419390766746e+01 -6.1504069109579946e+00 1 1 1 -1050 1 5 4.2499999999999999e-01 -8.3360989250281836e+00 -1.7065170615191157e+01 -8.0454468626928328e+00 1 1 1 -1051 1 1 1.5750000000000000e+00 -6.9212237057752120e+00 -1.2140905279613698e+01 9.1936281507656687e+00 1 1 0 -1052 1 2 2.1000000000000001e+00 -7.9546199637027923e+00 -1.3369283212241633e+01 -6.4424198458964543e+00 1 1 1 -1053 1 2 2.1000000000000001e+00 -7.8750220126689445e+00 -1.0414269957845629e+01 -6.4344945451348980e+00 1 1 1 -1054 1 3 -1.0500000000000000e+00 -8.0958159273297188e+00 -1.3298260211663301e+01 -8.0605513382597493e+00 1 1 1 -1055 1 3 -1.0500000000000000e+00 -7.7403088366973201e+00 -1.0507006356603398e+01 -8.0593941765754753e+00 1 1 1 -1056 1 4 -9.4999999999999996e-01 -5.2211297865863031e+00 -1.1703547420839435e+01 -8.1893607408242381e+00 1 1 1 -1057 1 3 -1.0500000000000000e+00 -6.5702769425775092e+00 -9.7113707796203723e+00 -5.9607925028876929e+00 1 1 1 -1058 1 3 -1.0500000000000000e+00 -7.9873270257999014e+00 -1.1888581912789562e+01 -5.9587188809513618e+00 1 1 1 -1059 1 3 -1.0500000000000000e+00 -9.1404883090905678e+00 -9.5625534027958778e+00 -6.1503936739305480e+00 1 1 1 -1060 1 5 4.2499999999999999e-01 -5.7279445458000602e+00 -1.2582296132873992e+01 -8.0457254720891491e+00 1 1 1 -1061 1 1 1.5750000000000000e+00 -9.5132712414377334e+00 -1.0637207901225382e+01 9.1931444515859475e+00 1 1 0 -1062 1 2 2.1000000000000001e+00 -1.0302264392719938e+01 -1.8010958511740707e+01 6.4359215057736137e+00 1 1 0 -1063 1 2 2.1000000000000001e+00 -1.0325597763836218e+01 -1.2000143885660425e+01 6.4280610801444311e+00 1 1 0 -1064 1 3 -1.0500000000000000e+00 -1.0104955208427846e+01 -9.1163013593801878e+00 8.0541136736620658e+00 1 1 0 -1065 1 3 -1.0500000000000000e+00 -1.0460267735536464e+01 -1.1907157783691902e+01 8.0528740633627187e+00 1 1 0 -1066 1 4 -9.4999999999999996e-01 -7.8196223206297599e+00 -1.0710993626792270e+01 8.1828507388406777e+00 1 1 0 -1067 1 3 -1.0500000000000000e+00 -6.4704642052545438e+00 -1.2703010171579383e+01 5.9540992478015298e+00 1 1 0 -1068 1 3 -1.0500000000000000e+00 -1.0213460429886737e+01 -1.0525822438026575e+01 5.9524290073249873e+00 1 1 0 -1069 1 3 -1.0500000000000000e+00 -9.0600631078363385e+00 -1.2851860507306093e+01 6.1439252136403280e+00 1 1 0 -1070 1 5 4.2499999999999999e-01 -7.3126955303015109e+00 -9.8321299462400891e+00 8.0388711780317124e+00 1 1 0 -1071 1 1 1.5750000000000000e+00 -1.2121421966983748e+01 -1.5120103097951539e+01 9.1931440500472021e+00 1 1 0 -1072 1 2 2.1000000000000001e+00 -7.6941002854421603e+00 -1.3528043511188180e+01 6.4359209951073471e+00 1 1 0 -1073 1 2 2.1000000000000001e+00 -7.7737266980076587e+00 -1.6483087090498845e+01 6.4280445509300250e+00 1 1 0 -1074 1 3 -1.0500000000000000e+00 -7.5531320715693777e+00 -1.3599231720429650e+01 8.0541168058333739e+00 1 1 0 -1075 1 3 -1.0500000000000000e+00 -7.9084140951184896e+00 -1.6390096710853786e+01 8.0528583515780205e+00 1 1 0 -1076 1 4 -9.4999999999999996e-01 -1.0427757546752302e+01 -1.5193886230508655e+01 8.1828631556698568e+00 1 1 0 -1077 1 3 -1.0500000000000000e+00 -9.0785565111582986e+00 -1.7185905911303450e+01 5.9541108650454166e+00 1 1 0 -1078 1 3 -1.0500000000000000e+00 -7.6616310609012928e+00 -1.5008709807568991e+01 5.9524186852294534e+00 1 1 0 -1079 1 3 -1.0500000000000000e+00 -6.5082396808725838e+00 -1.7334728922656321e+01 6.1439092326832387e+00 1 1 0 -1080 1 5 4.2499999999999999e-01 -9.9208689362280111e+00 -1.4315031144537746e+01 8.0389449231468681e+00 1 1 0 -1081 1 1 1.5750000000000000e+00 -4.3693757223617666e+00 -1.6623797501862640e+01 9.1936263177833482e+00 1 1 0 -1082 1 2 2.1000000000000001e+00 -1.8648460984142190e-01 -8.8863586813278168e+00 -6.4424195624530487e+00 1 1 1 -1083 1 2 2.1000000000000001e+00 -1.6317858587872180e-01 -1.4897205481208472e+01 -6.4344990010154151e+00 1 1 1 -1084 1 3 -1.0500000000000000e+00 -3.8400153394278114e-01 -1.7781193820588967e+01 -8.0605319542434177e+00 1 1 1 -1085 1 3 -1.0500000000000000e+00 -2.8454999893785526e-02 -1.4989931453633501e+01 -8.0594185181939455e+00 1 1 1 -1086 1 4 -9.4999999999999996e-01 -2.6692591084942503e+00 -1.6186430683271997e+01 -8.1893402866282834e+00 1 1 1 -1087 1 3 -1.0500000000000000e+00 -4.0183661906291688e+00 -1.4194265831610833e+01 -5.9607808745353807e+00 1 1 1 -1088 1 3 -1.0500000000000000e+00 -2.7550238935744531e-01 -1.6371514908008283e+01 -5.9587140310484852e+00 1 1 1 -1089 1 3 -1.0500000000000000e+00 -1.4286614237111728e+00 -1.4045424230641748e+01 -6.1504096183736543e+00 1 1 1 -1090 1 5 4.2499999999999999e-01 -3.1761126419061068e+00 -1.7065179317613428e+01 -8.0455892156983246e+00 1 1 1 -1091 1 1 1.5750000000000000e+00 -1.7612158961272968e+00 -1.2140905479144390e+01 9.1936260759968853e+00 1 1 0 -1092 1 2 2.1000000000000001e+00 -2.7946263215985852e+00 -1.3369269256921584e+01 -6.4424110744123801e+00 1 1 1 -1093 1 2 2.1000000000000001e+00 -2.7150458550199357e+00 -1.0414277514160078e+01 -6.4344944256095680e+00 1 1 1 -1094 1 3 -1.0500000000000000e+00 -2.9358094427693269e+00 -1.3298264285990225e+01 -8.0605669808735332e+00 1 1 1 -1095 1 3 -1.0500000000000000e+00 -2.5803112238951149e+00 -1.0506994842385364e+01 -8.0594011087445736e+00 1 1 1 -1096 1 4 -9.4999999999999996e-01 -6.1136511004701077e-02 -1.1703557808529808e+01 -8.1893413821177354e+00 1 1 1 -1097 1 3 -1.0500000000000000e+00 -1.4102319921708553e+00 -9.7113476086937851e+00 -5.9608039429212827e+00 1 1 1 -1098 1 3 -1.0500000000000000e+00 -2.8273291376600058e+00 -1.1888611910680980e+01 -5.9587126204693064e+00 1 1 1 -1099 1 3 -1.0500000000000000e+00 -3.9804942634357019e+00 -9.5625498131225903e+00 -6.1503916166810431e+00 1 1 1 -1100 1 5 4.2499999999999999e-01 -5.6791014020577890e-01 -1.2582261570234339e+01 -8.0456254549334609e+00 1 1 1 -1101 1 1 1.5750000000000000e+00 -4.3532626822440168e+00 -1.0637208536663195e+01 9.1931420264587729e+00 1 1 0 -1102 1 2 2.1000000000000001e+00 -5.1422605340029284e+00 -1.8010972814526962e+01 6.4359120870863116e+00 1 1 0 -1103 1 2 2.1000000000000001e+00 -5.1655741403261368e+00 -1.2000135207445506e+01 6.4280620600064111e+00 1 1 0 -1104 1 3 -1.0500000000000000e+00 -4.9449629476468537e+00 -9.1162979298605773e+00 8.0541307780712827e+00 1 1 0 -1105 1 3 -1.0500000000000000e+00 -5.3002653908317328e+00 -1.1907167772463211e+01 8.0528808659252675e+00 1 1 0 -1106 1 4 -9.4999999999999996e-01 -2.6596311317213690e+00 -1.0711006131470690e+01 8.1828701429922646e+00 1 1 0 -1107 1 3 -1.0500000000000000e+00 -1.3104180489574517e+00 -1.2702985515202105e+01 5.9540876691461300e+00 1 1 0 -1108 1 3 -1.0500000000000000e+00 -5.0534589320363521e+00 -1.0525793717166195e+01 5.9524239638193972e+00 1 1 0 -1109 1 3 -1.0500000000000000e+00 -3.9000552799467680e+00 -1.2851864283020131e+01 6.1439229758272287e+00 1 1 0 -1110 1 5 4.2499999999999999e-01 -2.1526612288429927e+00 -9.8320937887400692e+00 8.0389686940673108e+00 1 1 0 -1111 1 1 1.5750000000000000e+00 -6.9614351741271125e+00 -1.5120093227433923e+01 9.1931413794662760e+00 1 1 0 -1112 1 2 2.1000000000000001e+00 -2.5341240788726989e+00 -1.3528045681933817e+01 6.4359119500026907e+00 1 1 0 -1113 1 2 2.1000000000000001e+00 -2.6137328955640973e+00 -1.6483073671230674e+01 6.4280561366629687e+00 1 1 0 -1114 1 3 -1.0500000000000000e+00 -2.3931455622464295e+00 -1.3599233318386894e+01 8.0541451348176771e+00 1 1 0 -1115 1 3 -1.0500000000000000e+00 -2.7484109330614652e+00 -1.6390092942449684e+01 8.0528560015686210e+00 1 1 0 -1116 1 4 -9.4999999999999996e-01 -5.2677274043188298e+00 -1.5193844862391190e+01 8.1828790257998492e+00 1 1 0 -1117 1 3 -1.0500000000000000e+00 -3.9185585465782733e+00 -1.7185907339500744e+01 5.9541042049943371e+00 1 1 0 -1118 1 3 -1.0500000000000000e+00 -2.5016349383751777e+00 -1.5008727970228067e+01 5.9524344787992991e+00 1 1 0 -1119 1 3 -1.0500000000000000e+00 -1.3482285748874521e+00 -1.7334733258778282e+01 6.1439062228621797e+00 1 1 0 -1120 1 5 4.2499999999999999e-01 -4.7608525391156977e+00 -1.4315020002600260e+01 8.0390931457615267e+00 1 1 0 -1121 1 1 1.5750000000000000e+00 8.4695165366353464e-01 -7.6579835812050305e+00 9.1936288874475025e+00 0 1 0 -1122 1 2 2.1000000000000001e+00 5.0298854047814761e+00 7.9466019669347077e-02 -6.4424144556152356e+00 0 1 1 -1123 1 2 2.1000000000000001e+00 5.0531536696119623e+00 -5.9314030709104628e+00 -6.4345137045491718e+00 0 1 1 -1124 1 3 -1.0500000000000000e+00 4.8323591387051597e+00 -8.8153742682486840e+00 -8.0605820239111772e+00 0 1 1 -1125 1 3 -1.0500000000000000e+00 5.1878732372825311e+00 -6.0241061595734156e+00 -8.0594120212256826e+00 0 1 1 -1126 1 4 -9.4999999999999996e-01 2.5470666548004353e+00 -7.2206258319811312e+00 -8.1893702843091258e+00 0 1 1 -1127 1 3 -1.0500000000000000e+00 1.1979474982824225e+00 -5.2284455720511929e+00 -5.9607876425440542e+00 0 1 1 -1128 1 3 -1.0500000000000000e+00 4.9408304873956261e+00 -7.4056780595905938e+00 -5.9586989539517790e+00 0 1 1 -1129 1 3 -1.0500000000000000e+00 3.7876635127476206e+00 -5.0795967839315637e+00 -6.1504077701680906e+00 0 1 1 -1130 1 5 4.2499999999999999e-01 2.0402139399280124e+00 -8.0994421271782215e+00 -8.0457925512527595e+00 0 1 1 -1131 1 1 1.5750000000000000e+00 3.4551102318040119e+00 -3.1750602373809240e+00 9.1936249963033703e+00 0 1 0 -1132 1 2 2.1000000000000001e+00 2.4217092647353429e+00 -4.4034682343922888e+00 -6.4424100556567545e+00 0 1 1 -1133 1 2 2.1000000000000001e+00 2.5013293209638849e+00 -1.4484603202585618e+00 -6.4344992392404317e+00 0 1 1 -1134 1 3 -1.0500000000000000e+00 2.2805060226959757e+00 -4.3324466752627728e+00 -8.0605363775723244e+00 0 1 1 -1135 1 3 -1.0500000000000000e+00 2.6360394328354282e+00 -1.5411974066626648e+00 -8.0594077778299429e+00 0 1 1 -1136 1 4 -9.4999999999999996e-01 5.1552544755530079e+00 -2.7376679909019241e+00 -8.1893317299450903e+00 0 1 1 -1137 1 3 -1.0500000000000000e+00 3.8060930080128710e+00 -7.4554775156575559e-01 -5.9607837224071307e+00 0 1 1 -1138 1 3 -1.0500000000000000e+00 2.3890075299204767e+00 -2.9227581668061351e+00 -5.9587353346909673e+00 0 1 1 -1139 1 3 -1.0500000000000000e+00 1.2358408994011736e+00 -5.9670616076288141e-01 -6.1504018482632379e+00 0 1 1 -1140 1 5 4.2499999999999999e-01 4.6483926264102795e+00 -3.6164252934885788e+00 -8.0454920049899243e+00 0 1 1 -1141 1 1 1.5750000000000000e+00 8.6307055672640232e-01 -1.6713754640994978e+00 9.1931460949904640e+00 0 1 0 -1142 1 2 2.1000000000000001e+00 7.4067440539106855e-02 -9.0451227689768317e+00 6.4359123217975327e+00 0 1 0 -1143 1 2 2.1000000000000001e+00 5.0752316497217009e-02 -3.0343466932277092e+00 6.4280512560994687e+00 0 1 0 -1144 1 3 -1.0500000000000000e+00 2.7137419103710414e-01 -1.5049744182525160e-01 8.0541123492163607e+00 0 1 0 -1145 1 3 -1.0500000000000000e+00 -8.3917914878398392e-02 -2.9413479949048895e+00 8.0528600947866131e+00 0 1 0 -1146 1 4 -9.4999999999999996e-01 2.5567365503950334e+00 -1.7451597138855846e+00 8.1828414199204254e+00 0 1 0 -1147 1 3 -1.0500000000000000e+00 3.9059034396848951e+00 -3.7371848336857560e+00 5.9541096293006248e+00 0 1 0 -1148 1 3 -1.0500000000000000e+00 1.6286724521224549e-01 -1.5599986393757455e+00 5.9524414687461746e+00 0 1 0 -1149 1 3 -1.0500000000000000e+00 1.3162680069554646e+00 -3.8860046896279545e+00 6.1439117370450713e+00 0 1 0 -1150 1 5 4.2499999999999999e-01 3.0636187093141718e+00 -8.6634582863043264e-01 8.0388105803397210e+00 0 1 0 -1151 1 1 1.5750000000000000e+00 -1.7450965412416704e+00 -6.1542721885858267e+00 9.1931396400753584e+00 0 1 0 -1152 1 2 2.1000000000000001e+00 2.6822454390238182e+00 -4.5622313652435196e+00 6.4359253215799903e+00 0 1 0 -1153 1 2 2.1000000000000001e+00 2.6026017072422256e+00 -7.5172435230657051e+00 6.4280525353786011e+00 0 1 0 -1154 1 3 -1.0500000000000000e+00 2.8231982980173314e+00 -4.6333936871729211e+00 8.0541324435706265e+00 0 1 0 -1155 1 3 -1.0500000000000000e+00 2.4679139242312864e+00 -7.4242702203153303e+00 8.0528635321919779e+00 0 1 0 -1156 1 4 -9.4999999999999996e-01 -5.1408619376051234e-02 -6.2280255545507099e+00 8.1829007040250481e+00 0 1 0 -1157 1 3 -1.0500000000000000e+00 1.2977674624764681e+00 -8.2200857847518538e+00 5.9541052800705856e+00 0 1 0 -1158 1 3 -1.0500000000000000e+00 2.7147125497670821e+00 -6.0428853524192228e+00 5.9523886568029081e+00 0 1 0 -1159 1 3 -1.0500000000000000e+00 3.8680955259932048e+00 -8.3689256292345569e+00 6.1439186514543209e+00 0 1 0 -1160 1 5 4.2499999999999999e-01 4.5549352909885421e-01 -5.3491180364217001e+00 8.0392291387924644e+00 0 1 0 -1161 1 1 1.5750000000000000e+00 6.0069661936035175e+00 -7.6579937548320185e+00 9.1936316044666739e+00 0 1 0 -1162 1 2 2.1000000000000001e+00 -1.0450137639744804e+01 7.9463299035463564e-02 -6.4424243710353402e+00 1 1 1 -1163 1 2 2.1000000000000001e+00 -1.0426849451533693e+01 -5.9313896376259745e+00 -6.4345018460644283e+00 1 1 1 -1164 1 3 -1.0500000000000000e+00 9.9923438028197751e+00 -8.8153761390063448e+00 -8.0605530520838684e+00 0 1 1 -1165 1 3 -1.0500000000000000e+00 -1.0292123773060068e+01 -6.0241018369519264e+00 -8.0594139253470427e+00 1 1 1 -1166 1 4 -9.4999999999999996e-01 7.7070346980525173e+00 -7.2206693221354694e+00 -8.1893857246142900e+00 0 1 1 -1167 1 3 -1.0500000000000000e+00 6.3579542845899226e+00 -5.2284417436908193e+00 -5.9607824168769161e+00 0 1 1 -1168 1 3 -1.0500000000000000e+00 -1.0539173651568435e+01 -7.4056923085044541e+00 -5.9586827688544748e+00 1 1 1 -1169 1 3 -1.0500000000000000e+00 8.9476763873501461e+00 -5.0796014856025877e+00 -6.1504115174662424e+00 0 1 1 -1170 1 5 4.2499999999999999e-01 7.2001993237605930e+00 -8.0994521615003521e+00 -8.0459408726587203e+00 0 1 1 -1171 1 1 1.5750000000000000e+00 -1.2024881927933214e+01 -3.1750599741083469e+00 9.1936226503397407e+00 1 1 0 -1172 1 2 2.1000000000000001e+00 7.5817028306539775e+00 -4.4034548242472553e+00 -6.4424012953316998e+00 0 1 1 -1173 1 2 2.1000000000000001e+00 7.6613050161260396e+00 -1.4484663840709260e+00 -6.4344990879805639e+00 0 1 1 -1174 1 3 -1.0500000000000000e+00 7.4405122110527309e+00 -4.3324502105469040e+00 -8.0605503307031601e+00 0 1 1 -1175 1 3 -1.0500000000000000e+00 7.7960372596729002e+00 -1.5411873078722387e+00 -8.0594145656169474e+00 0 1 1 -1176 1 4 -9.4999999999999996e-01 -1.0324751332420679e+01 -2.7376760680379526e+00 -8.1893113790367398e+00 1 1 1 -1177 1 3 -1.0500000000000000e+00 8.9661392654718526e+00 -7.4552372525409538e-01 -5.9607953656302595e+00 0 1 1 -1178 1 3 -1.0500000000000000e+00 7.5490052861507984e+00 -2.9227882817179367e+00 -5.9587292162986722e+00 0 1 1 -1179 1 3 -1.0500000000000000e+00 6.3958341876680791e+00 -5.9670249615731663e-01 -6.1504001903853247e+00 0 1 1 -1180 1 5 4.2499999999999999e-01 9.8084275444973414e+00 -3.6163895221434412e+00 -8.0453831689662785e+00 0 1 1 -1181 1 1 1.5750000000000000e+00 6.0230793220357306e+00 -1.6713760727027740e+00 9.1931436640286570e+00 0 1 0 -1182 1 2 2.1000000000000001e+00 5.2340703084782234e+00 -9.0451373900601055e+00 6.4359026509421398e+00 0 1 0 -1183 1 2 2.1000000000000001e+00 5.2107768285475249e+00 -3.0343378220597543e+00 6.4280520030326400e+00 0 1 0 -1184 1 3 -1.0500000000000000e+00 5.4313667981565832e+00 -1.5049347755671505e-01 8.0541295280698009e+00 0 1 0 -1185 1 3 -1.0500000000000000e+00 5.0760850477762016e+00 -2.9413590110961252e+00 8.0528672520399454e+00 0 1 0 -1186 1 4 -9.4999999999999996e-01 -1.2923273102973829e+01 -1.7451732121810899e+00 8.1828599921332490e+00 1 1 0 -1187 1 3 -1.0500000000000000e+00 -1.1574049043750753e+01 -3.7371601802106404e+00 5.9540991225733642e+00 1 1 0 -1188 1 3 -1.0500000000000000e+00 5.3228691356732281e+00 -1.5599701988768047e+00 5.9524365669383243e+00 0 1 0 -1189 1 3 -1.0500000000000000e+00 6.4762747623866446e+00 -3.8860082222617720e+00 6.1439098279782520e+00 0 1 0 -1190 1 5 4.2499999999999999e-01 -1.2416347906588287e+01 -8.6631108188533545e-01 8.0389014904005194e+00 1 1 0 -1191 1 1 1.5750000000000000e+00 3.4148894200107200e+00 -6.1542622930241908e+00 9.1931366055821719e+00 0 1 0 -1192 1 2 2.1000000000000001e+00 -1.2797778702965626e+01 -4.5622320761539967e+00 6.4359157700181306e+00 1 1 0 -1193 1 2 2.1000000000000001e+00 -1.2877404237061196e+01 -7.5172309934459047e+00 6.4280643167095981e+00 1 1 0 -1194 1 3 -1.0500000000000000e+00 -1.2656816171316713e+01 -4.6333960070141416e+00 8.0541603707338680e+00 1 1 0 -1195 1 3 -1.0500000000000000e+00 -1.3012083101506889e+01 -7.4242649986939213e+00 8.0528602947442778e+00 1 1 0 -1196 1 4 -9.4999999999999996e-01 5.1086228485452754e+00 -6.2279825781387714e+00 8.1829178979826871e+00 0 1 0 -1197 1 3 -1.0500000000000000e+00 6.4577656205449188e+00 -8.2200870263303347e+00 5.9540987494082156e+00 0 1 0 -1198 1 3 -1.0500000000000000e+00 -1.2765291524992206e+01 -6.0429045661158707e+00 5.9524054565834668e+00 1 1 0 -1199 1 3 -1.0500000000000000e+00 -1.1611893334617134e+01 -8.3689294997385222e+00 6.1439150437810142e+00 1 1 0 -1200 1 5 4.2499999999999999e-01 5.6155110306614677e+00 -5.3491040803435190e+00 8.0393878066564533e+00 0 1 0 -1201 1 1 1.5750000000000000e+00 -9.4730482558538363e+00 -7.6579837804608353e+00 9.1936288584421817e+00 1 1 0 -1202 1 2 2.1000000000000001e+00 -5.2901137812505343e+00 7.9465578875971943e-02 -6.4424141224911704e+00 1 1 1 -1203 1 2 2.1000000000000001e+00 -5.2668457657427714e+00 -5.9314030152575619e+00 -6.4345136025435696e+00 1 1 1 -1204 1 3 -1.0500000000000000e+00 -5.4876411141658021e+00 -8.8153737446390359e+00 -8.0605818622866803e+00 1 1 1 -1205 1 3 -1.0500000000000000e+00 -5.1321272527986546e+00 -6.0241062466034769e+00 -8.0594120618712797e+00 1 1 1 -1206 1 4 -9.4999999999999996e-01 -7.7729334170461382e+00 -7.2206262093781639e+00 -8.1893704172959332e+00 1 1 1 -1207 1 3 -1.0500000000000000e+00 -9.1220532114999084e+00 -5.2284458130184035e+00 -5.9607879501683279e+00 1 1 1 -1208 1 3 -1.0500000000000000e+00 -5.3791700396304432e+00 -7.4056785499597986e+00 -5.9586994192034970e+00 1 1 1 -1209 1 3 -1.0500000000000000e+00 -6.5323364101775097e+00 -5.0795968883872256e+00 -6.1504080690006111e+00 1 1 1 -1210 1 5 4.2499999999999999e-01 -8.2797860458884607e+00 -8.0994421096420997e+00 -8.0457936049874998e+00 1 1 1 -1211 1 1 1.5750000000000000e+00 -6.8648895692884251e+00 -3.1750601185026568e+00 9.1936250796126728e+00 1 1 0 -1212 1 2 2.1000000000000001e+00 -7.8982904263320277e+00 -4.4034684490191758e+00 -6.4424103941693547e+00 1 1 1 -1213 1 2 2.1000000000000001e+00 -7.8186708591875442e+00 -1.4484597541953050e+00 -6.4344993359968523e+00 1 1 1 -1214 1 3 -1.0500000000000000e+00 -8.0394941486076519e+00 -4.3324466787230307e+00 -8.0605359249190123e+00 1 1 1 -1215 1 3 -1.0500000000000000e+00 -7.6839605876128365e+00 -1.5411977245256949e+00 -8.0594077717620856e+00 1 1 1 -1216 1 4 -9.4999999999999996e-01 -5.1647454040881282e+00 -2.7376674564410823e+00 -8.1893315607054049e+00 1 1 1 -1217 1 3 -1.0500000000000000e+00 -6.5139066907486161e+00 -7.4554731891745618e-01 -5.9607837703642241e+00 1 1 1 -1218 1 3 -1.0500000000000000e+00 -7.9309926183745523e+00 -2.9227576840502572e+00 -5.9587353580265621e+00 1 1 1 -1219 1 3 -1.0500000000000000e+00 -9.0841593543895360e+00 -5.9670620551901621e-01 -6.1504020768312335e+00 1 1 1 -1220 1 5 4.2499999999999999e-01 -5.6716072349666886e+00 -3.6164251093405397e+00 -8.0454906260480783e+00 1 1 1 -1221 1 1 1.5750000000000000e+00 -9.4569292783711720e+00 -1.6713754920263852e+00 9.1931457295587080e+00 1 1 0 -1222 1 2 2.1000000000000001e+00 -1.0245932376290614e+01 -9.0451235386775792e+00 6.4359124866582462e+00 1 1 0 -1223 1 2 2.1000000000000001e+00 -1.0269246952870757e+01 -3.0343462448060272e+00 6.4280513194600832e+00 1 1 0 -1224 1 3 -1.0500000000000000e+00 -1.0048625782907161e+01 -1.5049666929490613e-01 8.0541125763199020e+00 1 1 0 -1225 1 3 -1.0500000000000000e+00 -1.0403918287278653e+01 -2.9413486509055247e+00 8.0528602350875680e+00 1 1 0 -1226 1 4 -9.4999999999999996e-01 -7.7632636474169150e+00 -1.7451601758199367e+00 8.1828410557435127e+00 1 1 0 -1227 1 3 -1.0500000000000000e+00 -6.4140961797655454e+00 -3.7371846807874363e+00 5.9541096999475336e+00 1 1 0 -1228 1 3 -1.0500000000000000e+00 -1.0157133031150034e+01 -1.5599995082696054e+00 5.9524404810865761e+00 1 1 0 -1229 1 3 -1.0500000000000000e+00 -9.0037325780420030e+00 -3.8860049270011618e+00 6.1439117463650170e+00 1 1 0 -1230 1 5 4.2499999999999999e-01 -7.2563815502586255e+00 -8.6634628906294964e-01 8.0388078115699031e+00 1 1 0 -1231 1 1 1.5750000000000000e+00 -1.2065096650972574e+01 -6.1542722772754583e+00 9.1931397726777710e+00 1 1 0 -1232 1 2 2.1000000000000001e+00 -7.6377546012995223e+00 -4.5622303585522523e+00 6.4359252178928603e+00 1 1 0 -1233 1 2 2.1000000000000001e+00 -7.7173985866608206e+00 -7.5172441124993092e+00 6.4280522853100841e+00 1 1 0 -1234 1 3 -1.0500000000000000e+00 -7.4968018474351847e+00 -4.6333944697759453e+00 8.0541317707799216e+00 1 1 0 -1235 1 3 -1.0500000000000000e+00 -7.8520862052053939e+00 -7.4242695437274406e+00 8.0528631393504213e+00 1 1 0 -1236 1 4 -9.4999999999999996e-01 -1.0371408885631821e+01 -6.2280260117520783e+00 8.1829008047331513e+00 1 1 0 -1237 1 3 -1.0500000000000000e+00 -9.0222328910023926e+00 -8.2200853313923243e+00 5.9541052342574226e+00 1 1 0 -1238 1 3 -1.0500000000000000e+00 -7.6052877106027434e+00 -6.0428855091388112e+00 5.9523894388192833e+00 1 1 0 -1239 1 3 -1.0500000000000000e+00 -6.4519043738629689e+00 -8.3689258339210468e+00 6.1439186596132167e+00 1 1 0 -1240 1 5 4.2499999999999999e-01 -9.8645060505972708e+00 -5.3491171533452899e+00 8.0392299847806328e+00 1 1 0 -1241 1 1 1.5750000000000000e+00 -4.3130335719799664e+00 -7.6579937038842196e+00 9.1936314019332954e+00 1 1 0 -1242 1 2 2.1000000000000001e+00 -1.3013744627974866e-01 7.9462913475630614e-02 -6.4424246376464893e+00 1 1 1 -1243 1 2 2.1000000000000001e+00 -1.0684893537057505e-01 -5.9313893508898428e+00 -6.4345017895585537e+00 1 1 1 -1244 1 3 -1.0500000000000000e+00 -3.2765635106517799e-01 -8.8153758391408683e+00 -8.0605526742101183e+00 1 1 1 -1245 1 3 -1.0500000000000000e+00 2.7875841094589404e-02 -6.0241024867204338e+00 -8.0594144214765731e+00 1 1 1 -1246 1 4 -9.4999999999999996e-01 -2.6129651405688552e+00 -7.2206691446852744e+00 -8.1893860636445819e+00 1 1 1 -1247 1 3 -1.0500000000000000e+00 -3.9620450314031350e+00 -5.2284410824498675e+00 -5.9607825544872162e+00 1 1 1 -1248 1 3 -1.0500000000000000e+00 -2.1917390278932380e-01 -7.4056927498705267e+00 -5.9586833079493466e+00 1 1 1 -1249 1 3 -1.0500000000000000e+00 -1.3723243147179893e+00 -5.0796017338512662e+00 -6.1504112915507374e+00 1 1 1 -1250 1 5 4.2499999999999999e-01 -3.1198011720613454e+00 -8.0994528008667253e+00 -8.0459422208187643e+00 1 1 1 -1251 1 1 1.5750000000000000e+00 -1.7048821048822589e+00 -3.1750600233974851e+00 9.1936227443404306e+00 1 1 0 -1252 1 2 2.1000000000000001e+00 -2.7382971234679294e+00 -4.4034543566522828e+00 -6.4424013859544047e+00 1 1 1 -1253 1 2 2.1000000000000001e+00 -2.6586950753550083e+00 -1.4484668500258664e+00 -6.4344993053995712e+00 1 1 1 -1254 1 3 -1.0500000000000000e+00 -2.8794880275479802e+00 -4.3324506611342049e+00 -8.0605508713604959e+00 1 1 1 -1255 1 3 -1.0500000000000000e+00 -2.5239630752470426e+00 -1.5411866297456065e+00 -8.0594147792074153e+00 1 1 1 -1256 1 4 -9.4999999999999996e-01 -4.7517837259558604e-03 -2.7376768429853673e+00 -8.1893112828875445e+00 1 1 1 -1257 1 3 -1.0500000000000000e+00 -1.3538609137908306e+00 -7.4552332505261631e-01 -5.9607953412511501e+00 1 1 1 -1258 1 3 -1.0500000000000000e+00 -2.7709951342120993e+00 -2.9227884148814525e+00 -5.9587287907420370e+00 1 1 1 -1259 1 3 -1.0500000000000000e+00 -3.9241656194851835e+00 -5.9670276827438684e-01 -6.1504002860173532e+00 1 1 1 -1260 1 5 4.2499999999999999e-01 -5.1157204379419063e-01 -3.6163887288381531e+00 -8.0453830198534977e+00 1 1 1 -1261 1 1 1.5750000000000000e+00 -4.2969203280827042e+00 -1.6713763688959737e+00 9.1931435527350907e+00 1 1 0 -1262 1 2 2.1000000000000001e+00 -5.0859285809060815e+00 -9.0451378610562490e+00 6.4359028036352743e+00 1 1 0 -1263 1 2 2.1000000000000001e+00 -5.1092223160746624e+00 -3.0343377842534469e+00 6.4280523464977879e+00 1 1 0 -1264 1 3 -1.0500000000000000e+00 -4.8886336868453881e+00 -1.5049298815613810e-01 8.0541300922261030e+00 1 1 0 -1265 1 3 -1.0500000000000000e+00 -5.2439155117684226e+00 -2.9413591861830017e+00 8.0528672575652891e+00 1 1 0 -1266 1 4 -9.4999999999999996e-01 -2.6032732264105301e+00 -1.7451740386941132e+00 8.1828598914546760e+00 1 1 0 -1267 1 3 -1.0500000000000000e+00 -1.2540490739490959e+00 -3.7371600128887970e+00 5.9540989905604338e+00 1 1 0 -1268 1 3 -1.0500000000000000e+00 -4.9971316149433278e+00 -1.5599701828983008e+00 5.9524360634314295e+00 1 1 0 -1269 1 3 -1.0500000000000000e+00 -3.8437253850415853e+00 -3.8860083322717820e+00 6.1439094566028505e+00 1 1 0 -1270 1 5 4.2499999999999999e-01 -2.0963478358362906e+00 -8.6631093607094911e-01 8.0388999212996310e+00 1 1 0 -1271 1 1 1.5750000000000000e+00 -6.9051103097426907e+00 -6.1542621657147709e+00 9.1931367563616888e+00 1 1 0 -1272 1 2 2.1000000000000001e+00 -2.4777787674654199e+00 -4.5622327426858931e+00 6.4359160209892181e+00 1 1 0 -1273 1 2 2.1000000000000001e+00 -2.5574043892191067e+00 -7.5172298950838190e+00 6.4280642763354940e+00 1 1 0 -1274 1 3 -1.0500000000000000e+00 -2.3368161191143999e+00 -4.6333959836381862e+00 8.0541606972964814e+00 1 1 0 -1275 1 3 -1.0500000000000000e+00 -2.6920831091204462e+00 -7.4242654010828897e+00 8.0528604112015607e+00 1 1 0 -1276 1 4 -9.4999999999999996e-01 -5.2113770815501210e+00 -6.2279820619212582e+00 8.1829178539255096e+00 1 1 0 -1277 1 3 -1.0500000000000000e+00 -3.8622341308639339e+00 -8.2200867295059776e+00 5.9540986555569546e+00 1 1 0 -1278 1 3 -1.0500000000000000e+00 -2.4452916356073002e+00 -6.0429049672168205e+00 5.9524054018626558e+00 1 1 0 -1279 1 3 -1.0500000000000000e+00 -1.2918938182515838e+00 -8.3689297483017420e+00 6.1439149539106701e+00 1 1 0 -1280 1 5 4.2499999999999999e-01 -4.7044890687991749e+00 -5.3491044489278803e+00 8.0393882099475782e+00 1 1 0 +264 1 3 -1.05 -8.46491586606061 -17.901292325442792 -1.1390414842434584 1 1 0 +304 1 3 -1.05 -3.3049186986576506 -17.901290750068977 -1.1390437890122005 1 1 0 +386 1 4 -0.95 -11.28157790356712 -10.528150577554554 -1.0092882779490928 1 1 0 +387 1 3 -1.05 -9.935357744081871 -12.520946280855286 -3.2389916781308177 1 1 0 +392 1 2 2.1 -11.15811099398584 -13.347486038255383 -2.757315613614664 1 1 0 +393 1 2 2.1 -11.237889362245781 -16.302594662783648 -2.7652874030664893 1 1 0 +394 1 3 -1.05 -11.016750509593795 -13.41838356845754 -1.1390376370894852 1 1 0 +395 1 3 -1.05 -11.372121493310306 -16.209812211718564 -1.1403956987186419 1 1 0 +398 1 3 -1.05 -11.123698820481325 -14.828288395652272 -3.2407370008852503 1 1 0 +399 1 3 -1.05 -9.973058453394058 -17.155713166817623 -3.0491809998142045 1 1 0 +422 1 2 2.1 -8.60626977865343 -17.83040303949202 -2.757307688224758 1 1 0 +423 1 2 2.1 -8.629758159651553 -11.819745199168645 -2.7652839948923624 1 1 0 +425 1 3 -1.05 -8.763971912039096 -11.726883125298963 -1.1403800557050356 1 1 0 +426 1 4 -0.95 -6.121574906086911 -10.528150365511065 -1.0092950354343362 1 1 0 +427 1 3 -1.05 -4.775388146251923 -12.520964201416565 -3.238989168491626 1 1 0 +428 1 3 -1.05 -8.515522554581228 -10.345254400323427 -3.2407468259276673 1 1 0 +429 1 3 -1.05 -7.364884681634946 -12.672823688539507 -3.0491633890428966 1 1 0 +430 1 5 0.425 -5.613050421649238 -9.64905707477696 -1.1481351133572844 1 1 0 +432 1 2 2.1 -5.998102242208308 -13.347479307389396 -2.7573203771857013 1 1 0 +433 1 2 2.1 -6.077895683838097 -16.302607571672493 -2.7652940728794455 1 1 0 +434 1 3 -1.05 -5.856746304305593 -13.418383628427902 -1.1390485082470203 1 1 0 +435 1 3 -1.05 -6.212119786812962 -16.209812802990335 -1.1403998993912392 1 1 0 +436 1 4 -0.95 -8.729708502581238 -15.011039091449069 -1.009285880112964 1 1 0 +437 1 3 -1.05 -7.383491201121386 -17.003869454733763 -3.2389871522032028 1 1 0 +438 1 3 -1.05 -5.963695048103962 -14.828277302058277 -3.240739000854397 1 1 0 +439 1 3 -1.05 -4.813069783015718 -17.155706888160015 -3.049179484681825 1 1 0 +440 1 5 0.425 -8.221237365494655 -14.13197978175737 -1.148104642070665 1 1 0 +462 1 2 2.1 -3.4462548346618433 -17.830406583197693 -2.7573102223982113 1 1 0 +463 1 2 2.1 -3.469735283388167 -11.819752050513955 -2.7652804467485357 1 1 0 +465 1 3 -1.05 -3.603971352452068 -11.726883408388186 -1.1403764365310618 1 1 0 +468 1 3 -1.05 -3.355521162154167 -10.345233316904825 -3.2407460058544304 1 1 0 +469 1 3 -1.05 -2.2048968961935245 -12.67281584124379 -3.0491647524307126 1 1 0 +470 1 5 0.425 -0.4530336944118556 -9.649058436806532 -1.1481079681882829 1 1 0 +476 1 4 -0.95 -3.569702194052315 -15.011029442444274 -1.0092829982342053 1 1 0 +477 1 3 -1.05 -2.223510954503034 -17.003879928264908 -3.238987017751225 1 1 0 +480 1 5 0.425 -3.061226086377273 -14.131977973418296 -1.1480614741617021 1 1 0 +842 1 2 2.1 -10.562132297329805 -17.851014175793086 -6.432546285956645 1 1 1 +882 1 2 2.1 -5.402127266641829 -17.85100681359648 -6.4325501191668755 1 1 1 +1003 1 2 2.1 -10.482315844290621 -14.895888504252758 -6.4245862304386065 1 1 1 +1005 1 3 -1.05 -10.348095162304375 -14.98875808661767 -8.049491681798669 1 1 1 +1008 1 3 -1.05 -10.596544769602936 -16.37040254747953 -5.949125564063066 1 1 1 +1011 1 1 1.575 -8.68725474195775 -11.77759774974404 -9.1893849316929 1 1 1 +1016 1 4 -0.95 -10.382364613954495 -11.704612098178766 -8.180586191286995 1 1 1 +1020 1 5 0.425 9.749175400148882 -12.583669666698384 -8.041796462307946 0 1 1 +1041 1 1 1.575 -6.135425776818094 -16.260473936348028 -9.189383231154757 1 1 1 +1043 1 2 2.1 -5.3223230647806945 -14.895898704501215 -6.424593124897623 1 1 1 +1044 1 3 -1.05 -5.543484086381093 -17.780185221481208 -8.050814994171715 1 1 1 +1045 1 3 -1.05 -5.188093428747346 -14.988758733832059 -8.04949629788937 1 1 1 +1046 1 4 -0.95 -7.8304849276464115 -16.187485278543456 -8.180577316436402 1 1 1 +1047 1 3 -1.05 -9.176703799441476 -14.19469188744462 -5.95088180516822 1 1 1 +1048 1 3 -1.05 -5.436541172095698 -16.370396928539293 -5.9491275765252185 1 1 1 +1049 1 3 -1.05 -6.587179230640963 -14.042820482901044 -6.140706408704635 1 1 1 +1050 1 5 0.425 -8.339016864185075 -17.06657758066529 -8.041710773044175 1 1 1 +1051 1 1 1.575 -3.527261903235889 -11.77759444673707 -9.189385423079939 1 1 1 +1052 1 2 2.1 -7.953952109972265 -13.36816612248871 -6.432556712138617 1 1 1 +1053 1 2 2.1 -7.8741625097250605 -10.413049444820782 -6.4245790461347605 1 1 1 +1054 1 3 -1.05 -8.095317714508074 -13.297256855654805 -8.050832188461564 1 1 1 +1055 1 3 -1.05 -7.739944593076132 -10.505829863398748 -8.049470808969227 1 1 1 +1056 1 4 -0.95 -5.22236234575324 -11.704613397559287 -8.180592735251716 1 1 1 +1057 1 3 -1.05 -6.568578215806069 -9.711775687113166 -5.950883008183602 1 1 1 +1058 1 3 -1.05 -7.988367489366465 -11.887339802933614 -5.949132603449773 1 1 1 +1059 1 3 -1.05 -9.13900815725675 -9.559928450728057 -6.140691573977905 1 1 1 +1060 1 5 0.425 -5.730842071322643 -12.583668202662341 -8.041826700411479 1 1 1 +1061 1 1 1.575 -9.51358678931899 -10.63699289645826 9.189382244602578 1 1 0 +1071 1 1 1.575 -12.121741592199127 -15.119878495438652 9.18938580037907 1 1 0 +1086 1 4 -0.95 -2.670491270081923 -16.187494416422872 -8.180579828027994 1 1 1 +1087 1 3 -1.05 -4.0166814766710734 -14.194679692266455 -5.950882081820672 1 1 1 +1092 1 2 2.1 -2.793967359717164 -13.368163663673295 -6.432553729688593 1 1 1 +1093 1 2 2.1 -2.714183453046749 -10.413041630295027 -6.4245816020409485 1 1 1 +1094 1 3 -1.05 -2.935315187147549 -13.297258489782635 -8.050829092232332 1 1 1 +1095 1 3 -1.05 -2.5799455030118272 -10.505829398335198 -8.049473780055107 1 1 1 +1098 1 3 -1.05 -2.828369189735337 -11.887360068177586 -5.949133477017218 1 1 1 +1099 1 3 -1.05 -3.978994149665634 -9.559937349167438 -6.140690350890794 1 1 1 +1111 1 1 1.575 -6.961748817696581 -15.11987630783114 9.189384651241914 1 1 0 +184 1 3 -1.05 1.8550841706248615 -17.90129235456656 -1.139041394638964 0 1 0 +224 1 3 -1.05 7.015081266257585 -17.90129077481551 -1.1390443875216096 0 1 0 +342 1 2 2.1 1.7137286735549981 -17.830403990336592 -2.7573075994425302 0 1 0 +343 1 2 2.1 1.6902433706862166 -11.81974490284625 -2.765283591611176 0 1 0 +345 1 3 -1.05 1.5560281171673136 -11.726883064897962 -1.1403796474735532 0 1 0 +346 1 4 -0.95 4.19842475094546 -10.528150984297781 -1.0092947548256248 0 1 0 +347 1 3 -1.05 5.544610676800708 -12.520964874446697 -3.238989158956352 0 1 0 +348 1 3 -1.05 1.8044775438647918 -10.34525379637876 -3.2407469149941974 0 1 0 +349 1 3 -1.05 2.9551154623676954 -12.672823617460397 -3.0491633747353077 0 1 0 +350 1 5 0.425 4.70694993483294 -9.649056414846337 -1.1481352776498177 0 1 0 +352 1 2 2.1 4.321898281880586 -13.347477423653608 -2.7573203124497994 0 1 0 +353 1 2 2.1 4.242103458566291 -16.302606453938324 -2.7652944924881524 0 1 0 +354 1 3 -1.05 4.463253605388115 -13.418383717750396 -1.1390481950715863 0 1 0 +355 1 3 -1.05 4.107880173799165 -16.20981289781871 -1.1404006770584267 0 1 0 +356 1 4 -0.95 1.590291661406587 -15.011038808742594 -1.0092858875728705 0 1 0 +357 1 3 -1.05 2.936511486433403 -17.003867946178126 -3.2389871417941283 0 1 0 +358 1 3 -1.05 4.356304894039823 -14.82828075681348 -3.240738966883275 0 1 0 +359 1 3 -1.05 5.5069296575236155 -17.15570655268637 -3.0491796518303165 0 1 0 +360 1 5 0.425 2.0987625163240065 -14.131980219839427 -1.1481045890306945 0 1 0 +382 1 2 2.1 6.873746152856757 -17.83040759592042 -2.7573103659838294 0 1 0 +383 1 2 2.1 6.850264705504596 -11.819752523567601 -2.765280196679372 0 1 0 +385 1 3 -1.05 6.716028840751633 -11.726883416657042 -1.1403757891844322 0 1 0 +388 1 3 -1.05 6.9644790606265055 -10.345231078604485 -3.2407460256393845 0 1 0 +389 1 3 -1.05 8.115103706656491 -12.67281636337119 -3.049164810920919 0 1 0 +390 1 5 0.425 -10.773033349967385 -9.649057938720548 -1.1481081159206 1 1 0 +396 1 4 -0.95 6.750298277493279 -15.011028676607136 -1.009283156622482 0 1 0 +397 1 3 -1.05 8.0964871902111 -17.003881231209515 -3.2389870762613597 0 1 0 +400 1 5 0.425 7.2587734956592485 -14.13197867342077 -1.1480612275841189 0 1 0 +466 1 4 -0.95 -0.9615776661893243 -10.528149916413177 -1.0092884371126996 1 1 0 +467 1 3 -1.05 0.384639153569287 -12.520948194899127 -3.238991755885184 1 1 0 +472 1 2 2.1 -0.8381092882996519 -13.347486331441 -2.757316117320512 1 1 0 +473 1 2 2.1 -0.9178906756593168 -16.302595966027578 -2.7652875692926067 1 1 0 +474 1 3 -1.05 -0.6967505864201584 -13.418383565182262 -1.1390380998660525 1 1 0 +475 1 3 -1.05 -1.052121569574025 -16.2098121280094 -1.1403955470516056 1 1 0 +478 1 3 -1.05 -0.80369877564749 -14.828286105827077 -3.240737085742131 1 1 0 +479 1 3 -1.05 0.3469420057265431 -17.155713599291026 -3.0491809320772196 1 1 0 +802 1 2 2.1 4.917871554153482 -17.85100620844276 -6.432550144635655 0 1 1 +922 1 2 2.1 -0.24213302537487635 -17.851014271362367 -6.432546231091103 1 1 1 +961 1 1 1.575 4.184574182271406 -16.26047384481049 -9.189383148012734 0 1 1 +963 1 2 2.1 4.997676106105352 -14.89589820439723 -6.4245934413401775 0 1 1 +964 1 3 -1.05 4.776515931907607 -17.780185218865757 -8.050814805633557 0 1 1 +965 1 3 -1.05 5.131906621044807 -14.988758753951338 -8.049496747093013 0 1 1 +966 1 4 -0.95 2.4895150021685026 -16.187485328567735 -8.18057734079336 0 1 1 +967 1 3 -1.05 1.143296887105647 -14.194691428548982 -5.9508816939542974 0 1 1 +968 1 3 -1.05 4.883458746547756 -16.37039893676453 -5.949127198225527 0 1 1 +969 1 3 -1.05 3.732820257087102 -14.042820299512814 -6.140706422631954 0 1 1 +970 1 5 0.425 1.9809831558045818 -17.066577464624032 -8.041710794411177 0 1 1 +971 1 1 1.575 6.7927381146326375 -11.77759445236754 -9.189385500475517 0 1 1 +972 1 2 2.1 2.366048010875998 -13.368167275390114 -6.432556655123134 0 1 1 +973 1 2 2.1 2.4458378380486767 -10.41305019631907 -6.424578726466713 0 1 1 +974 1 3 -1.05 2.2246822195755787 -13.29725686242322 -8.05083232247889 0 1 1 +975 1 3 -1.05 2.5800552709418074 -10.505829765473539 -8.049470445822946 0 1 1 +976 1 4 -0.95 5.0976375270724485 -11.704613678089164 -8.180592647516727 0 1 1 +977 1 3 -1.05 3.7514206411706486 -9.711776314023226 -5.950882972545097 0 1 1 +978 1 3 -1.05 2.3316324623441567 -11.887337544400147 -5.949132835505473 0 1 1 +979 1 3 -1.05 1.1809926474831354 -9.559928961691705 -6.140691595020608 0 1 1 +980 1 5 0.425 4.589158058033442 -12.583667977364943 -8.041826644512858 0 1 1 +981 1 1 1.575 0.8064132734883156 -10.636992854297397 9.189382072755725 0 1 0 +991 1 1 1.575 -1.8017416248975664 -15.119878549552123 9.189385972861375 0 1 0 +1001 1 1 1.575 9.344581867349657 -16.26047640418962 -9.189381749309328 0 1 1 +1004 1 3 -1.05 9.936511499778717 -17.780185040060882 -8.05080542913734 0 1 1 +1006 1 4 -0.95 7.649509037996275 -16.18749394104903 -8.180579812342321 0 1 1 +1007 1 3 -1.05 6.303320211197779 -14.1946787391996 -5.950882102933339 0 1 1 +1009 1 3 -1.05 8.892830645210495 -14.042826183342902 -6.140708128407816 0 1 1 +1010 1 5 0.425 7.140972750324373 -17.06658046434351 -8.041751694671362 0 1 1 +1012 1 2 2.1 7.526031845452174 -13.36816391655739 -6.432553511023912 0 1 1 +1013 1 2 2.1 7.605817828327925 -10.413041177382924 -6.424581346822816 0 1 1 +1014 1 3 -1.05 7.38468487052144 -13.29725845871807 -8.050828733960508 0 1 1 +1015 1 3 -1.05 7.7400544850575095 -10.50582940361992 -8.04947339734067 0 1 1 +1017 1 3 -1.05 8.911445176635418 -9.711761973761018 -5.950885381272831 0 1 1 +1018 1 3 -1.05 7.491630912269503 -11.887360305407935 -5.949133684133898 0 1 1 +1019 1 3 -1.05 6.3410053156834145 -9.559936868934592 -6.140690348261861 0 1 1 +1021 1 1 1.575 5.966421032045936 -10.636996344651585 9.18938264851844 0 1 0 +1031 1 1 1.575 3.358251150778086 -15.119876228292004 9.189384489321482 0 1 0 +1081 1 1 1.575 -0.9754180121607927 -16.260476400180153 -9.189381721845933 1 1 1 +1083 1 2 2.1 -0.16231620481821452 -14.89588855547083 -6.424586299599195 1 1 1 +1084 1 3 -1.05 -0.3834885547438134 -17.780184943603096 -8.050805349197944 1 1 1 +1085 1 3 -1.05 -0.028095111453609434 -14.988758081242285 -8.049491887024741 1 1 1 +1088 1 3 -1.05 -0.2765447418097864 -16.37040300834762 -5.9491255041968065 1 1 1 +1089 1 3 -1.05 -1.4271693938816554 -14.042826105628727 -6.140708097208753 1 1 1 +1090 1 5 0.425 -3.179027007517461 -17.066580020974854 -8.041751915389574 1 1 1 +1091 1 1 1.575 1.6327453228612008 -11.777597747951123 -9.189384953878353 1 1 1 +1096 1 4 -0.95 -0.0623645826637933 -11.704612065115022 -8.180586180092902 1 1 1 +1097 1 3 -1.05 -1.4085524757194428 -9.711760380898674 -5.950885471300883 1 1 1 +1100 1 5 0.425 -0.5708246238514203 -12.583669638729017 -8.04179655219608 1 1 1 +1101 1 1 1.575 -4.353578939913898 -10.636996303988589 9.18938270030422 1 1 0 +424 1 3 -1.05 -8.408577734808924 -8.935458287782806 -1.139059751375683 1 1 0 +464 1 3 -1.05 -3.248580635072857 -8.935456708467136 -1.1390620639004094 1 1 0 +546 1 4 -0.95 -11.22522470896448 -1.5623206043777742 -1.009290789576525 1 1 0 +547 1 3 -1.05 -9.878997905733707 -3.5551322132945415 -3.2389873081377836 1 1 0 +552 1 2 2.1 -11.101767117492052 -4.381650113675265 -2.757304877477752 1 1 0 +553 1 2 2.1 -11.18156269540419 -7.336765995632838 -2.765288344254607 1 1 0 +554 1 3 -1.05 -10.960418221812578 -4.452562993782461 -1.1390300904548987 1 1 0 +555 1 3 -1.05 -11.31579151270627 -7.243982991685186 -1.1404006413513326 1 1 0 +558 1 3 -1.05 -11.06735994354583 -5.86248222073808 -3.2407468195561364 1 1 0 +559 1 3 -1.05 -9.916720989567086 -8.189896133020403 -3.0491777269547473 1 1 0 +582 1 2 2.1 -8.549941681999599 -8.864628616853421 -2.7573212395646927 1 1 0 +583 1 2 2.1 -8.573408346697407 -2.853890413154632 -2.765288711323917 1 1 0 +585 1 3 -1.05 -8.707624618283598 -2.761073008594156 -1.1403895124190147 1 1 0 +586 1 4 -0.95 -6.065222151349898 -1.5623213449494315 -1.0092973063700743 1 1 0 +587 1 3 -1.05 -4.719027607075699 -3.5551497395403047 -3.2389848295174266 1 1 0 +588 1 3 -1.05 -8.459194165968885 -1.379498682372585 -3.2407378892779697 1 1 0 +589 1 3 -1.05 -7.308554273668932 -3.7069858317422746 -3.049174267227535 1 1 0 +590 1 5 0.425 -5.556733431736472 -0.6832639340674191 -1.1481901639195726 1 1 0 +592 1 2 2.1 -5.941758795256964 -4.381643258523525 -2.757309447300389 1 1 0 +593 1 2 2.1 -6.0215675995468345 -7.336778252386646 -2.7652948891186604 1 1 0 +594 1 3 -1.05 -5.800414010022665 -4.452562979690537 -1.1390409601576525 1 1 0 +595 1 3 -1.05 -6.155789757574291 -7.243983669469674 -1.1404049422805471 1 1 0 +596 1 4 -0.95 -8.67336350603957 -6.045192015790269 -1.009270118053955 1 1 0 +597 1 3 -1.05 -7.3271615151700535 -8.038035790495682 -3.238992981860023 1 1 0 +598 1 3 -1.05 -5.907356197440085 -5.862471934911557 -3.240748636610774 1 1 0 +599 1 3 -1.05 -4.756733445681928 -8.189889175673681 -3.0491762653397636 1 1 0 +600 1 5 0.425 -8.164891614098584 -5.166098789059271 -1.1479179100126835 1 1 0 +622 1 2 2.1 -3.389926071141417 -8.86463251987464 -2.757323741452172 1 1 0 +623 1 2 2.1 -3.413385787633488 -2.8538972774550295 -2.765285166795646 1 1 0 +625 1 3 -1.05 -3.5476240557786918 -2.7610733325609367 -1.1403860582710532 1 1 0 +628 1 3 -1.05 -3.2991927884903163 -1.3794780433085272 -3.240737139143919 1 1 0 +629 1 3 -1.05 -2.148566845248455 -3.70697790414607 -3.0491756564843833 1 1 0 +630 1 5 0.425 -0.39671665581836635 -0.6832652429943806 -1.1481630022982454 1 1 0 +636 1 4 -0.95 -3.5133574867319632 -6.045182758574995 -1.0092671746550455 1 1 0 +637 1 3 -1.05 -2.16718148458315 -8.038046305327988 -3.2389929701897184 1 1 0 +640 1 5 0.425 -3.004880126821485 -5.166096444308325 -1.147874732161542 1 1 0 +1002 1 2 2.1 -10.505804536592649 -8.88523539174835 -6.432560037265368 1 1 1 +1042 1 2 2.1 -5.345800298480642 -8.885227442477921 -6.432563806365232 1 1 1 +1163 1 2 2.1 -10.425983846443055 -5.930101828666643 -6.4245809302442 1 1 1 +1165 1 3 -1.05 -10.29176457220165 -6.022932645020992 -8.049476504290835 1 1 1 +1168 1 3 -1.05 -10.540210510252924 -7.404496027077366 -5.949119337484573 1 1 1 +1171 1 1 1.575 -8.63091986135657 -2.8117449377960053 -9.189382864542884 1 1 1 +1176 1 4 -0.95 -10.32599221206828 -2.738752318079948 -8.180571473894362 1 1 1 +1180 1 5 0.425 9.80549758975939 -3.6178227408875205 -8.041659890758954 0 1 1 +1201 1 1 1.575 -6.0790863142234715 -7.294676574746575 -9.189383710571903 1 1 1 +1203 1 2 2.1 -5.265992010385035 -5.9301120964551135 -6.424588121260333 1 1 1 +1204 1 3 -1.05 -5.487146068587514 -8.814352398208634 -8.050831889549796 1 1 1 +1205 1 3 -1.05 -5.13176290972859 -6.022933332502667 -8.049481513448013 1 1 1 +1206 1 4 -0.95 -7.774180195115953 -7.221701310871847 -8.180597375280326 1 1 1 +1207 1 3 -1.05 -9.120384514697443 -5.22887681444276 -5.950877168633751 1 1 1 +1208 1 3 -1.05 -5.380207122065727 -7.404491441720323 -5.949121385614578 1 1 1 +1209 1 3 -1.05 -6.530843795028404 -5.077002060288615 -6.140701804367323 1 1 1 +1210 1 5 0.425 -8.282682482860066 -8.100810146883555 -8.041925546941595 1 1 1 +1211 1 1 1.575 -3.4709270920462876 -2.8117417906836764 -9.189383656264441 1 1 1 +1212 1 2 2.1 -7.897616037858306 -4.402286956958651 -6.43254710358858 1 1 1 +1213 1 2 2.1 -7.8178154207096355 -1.447175155438515 -6.4245867930103415 1 1 1 +1214 1 3 -1.05 -8.038985872482693 -4.331447222326599 -8.050813553596454 1 1 1 +1215 1 3 -1.05 -7.683597598118229 -1.5400178951253878 -8.049489918538265 1 1 1 +1216 1 4 -0.95 -5.165990407443373 -2.738754409726031 -8.18057793517165 1 1 1 +1217 1 3 -1.05 -6.512212271258566 -0.7459521192234924 -5.950883480489781 1 1 1 +1218 1 3 -1.05 -7.932036772316762 -2.9216307666036787 -5.949131277993494 1 1 1 +1219 1 3 -1.05 -9.08267694565555 -0.5940914943799172 -6.140702906817449 1 1 1 +1220 1 5 0.425 -5.674519498759423 -3.617820687506949 -8.04169029858849 1 1 1 +1221 1 1 1.575 -9.457246412717982 -1.671157609032207 9.189383876214114 1 1 0 +1231 1 1 1.575 -12.065413830807493 -6.15404471574257 9.18938539391855 1 1 0 +1246 1 4 -0.95 -2.614186286838043 -7.2217101201307425 -8.180599793839612 1 1 1 +1247 1 3 -1.05 -3.960360277202871 -5.228863633164128 -5.950877486276319 1 1 1 +1252 1 2 2.1 -2.737632361906618 -4.402284731749566 -6.432544106737809 1 1 1 +1253 1 2 2.1 -2.6578351242773337 -1.4471666923434476 -6.424589226412993 1 1 1 +1254 1 3 -1.05 -2.8789833754375103 -4.331448893865138 -8.050810085224123 1 1 1 +1255 1 3 -1.05 -2.52359850535919 -1.5400175072708464 -8.049492401815417 1 1 1 +1258 1 3 -1.05 -2.7720385307922406 -2.9216515367363893 -5.949132112636712 1 1 1 +1259 1 3 -1.05 -3.9226633957335055 -0.5941000488864461 -6.140701563447556 1 1 1 +1271 1 1 1.575 -6.9054209708246175 -6.154042407692234 9.189383855475354 1 1 0 +344 1 3 -1.05 1.9114222200240487 -8.935458279277533 -1.139059564533735 0 1 0 +384 1 3 -1.05 7.071419484747558 -8.93545662912592 -1.139062289794058 0 1 0 +502 1 2 2.1 1.770058118239774 -8.864629279480386 -2.7573211125975057 0 1 0 +503 1 2 2.1 1.746593525661929 -2.8538905356736315 -2.7652882528616427 0 1 0 +505 1 3 -1.05 1.6123753212274217 -2.761072943936796 -1.1403890497030549 0 1 0 +506 1 4 -0.95 4.254777803494033 -1.5623214773049696 -1.009297090882841 0 1 0 +507 1 3 -1.05 5.60097265039013 -3.555149476103077 -3.2389847675130836 0 1 0 +508 1 3 -1.05 1.8608059611492145 -1.3794973995029132 -3.2407379362518247 0 1 0 +509 1 3 -1.05 3.0114454619351942 -3.706985652875458 -3.0491742347163786 0 1 0 +510 1 5 0.425 4.763266707487849 -0.6832636557343186 -1.1481903079338203 0 1 0 +512 1 2 2.1 4.37824108680676 -4.381642215703053 -2.7573092994894903 0 1 0 +513 1 2 2.1 4.298431828182256 -7.33677721573053 -2.7652951589904955 0 1 0 +514 1 3 -1.05 4.519586070169236 -4.452562991066955 -1.1390403197679557 0 1 0 +515 1 3 -1.05 4.164210351308228 -7.243983732757602 -1.1404051524282774 0 1 0 +516 1 4 -0.95 1.6466363953447338 -6.0451921005838205 -1.0092700800785774 0 1 0 +517 1 3 -1.05 2.9928396471856065 -8.038035104886228 -3.2389931344831044 0 1 0 +518 1 3 -1.05 4.412643745498574 -5.862474549618074 -3.2407487484486985 0 1 0 +519 1 3 -1.05 5.563266561391211 -8.18988915546985 -3.049176356081455 0 1 0 +520 1 5 0.425 2.1551084204706203 -5.16609866467239 -1.1479179157471826 0 1 0 +542 1 2 2.1 6.930073760633853 -8.864633805826598 -2.7573239225921 0 1 0 +543 1 2 2.1 6.906613517162718 -2.853897481917162 -2.7652852790953517 0 1 0 +545 1 3 -1.05 6.7723761157288465 -2.7610732877001496 -1.1403856281466087 0 1 0 +548 1 3 -1.05 7.020807272771009 -1.379476841625241 -3.240737136594837 0 1 0 +549 1 3 -1.05 8.171434172237035 -3.7069785563504976 -3.0491755848729465 0 1 0 +550 1 5 0.425 -10.71671674630369 -0.6832654187033356 -1.1481629281547843 1 1 0 +556 1 4 -0.95 6.806642683806004 -6.045182652289 -1.009267250406083 0 1 0 +557 1 3 -1.05 8.152818693761645 -8.038046252697145 -3.238992939192382 0 1 0 +560 1 5 0.425 7.315119719776252 -5.166096588082807 -1.1478746942687081 0 1 0 +626 1 4 -0.95 -0.9052247640192803 -1.5623207270903876 -1.0092908139849168 1 1 0 +627 1 3 -1.05 0.4409986064558229 -3.55513430014612 -3.238987362520838 1 1 0 +632 1 2 2.1 -0.781765198312538 -4.381650335007297 -2.757305136503125 1 1 0 +633 1 2 2.1 -0.8615624137678708 -7.3367669283109755 -2.765288206868874 1 1 0 +634 1 3 -1.05 -0.64041820705304 -4.452562941095179 -1.1390306805857744 1 1 0 +635 1 3 -1.05 -0.99579148699058 -7.243983089295831 -1.1404005503235641 1 1 0 +638 1 3 -1.05 -0.7473598652504947 -5.862480258450255 -3.2407468109284423 1 1 0 +639 1 3 -1.05 0.4032783081311422 -8.189895897628547 -3.0491778997613777 1 1 0 +962 1 2 2.1 4.974200302039463 -8.885226777627686 -6.432563729132441 0 1 1 +1082 1 2 2.1 -0.185806274293137 -8.88523494640969 -6.432559660140516 1 1 1 +1121 1 1 1.575 4.240913714129455 -7.294676590686793 -9.189383695860338 0 1 1 +1123 1 2 2.1 5.054007902786916 -5.930111693030472 -6.424588129023356 0 1 1 +1124 1 3 -1.05 4.832853936182163 -8.814352442842836 -8.050831879699462 0 1 1 +1125 1 3 -1.05 5.188237146181489 -6.022933335225861 -8.04948169103402 0 1 1 +1126 1 4 -0.95 2.545820092137145 -7.221700886779187 -8.180597400605782 0 1 1 +1127 1 3 -1.05 1.1996162029904571 -5.228876391762018 -5.950877255533969 0 1 1 +1128 1 3 -1.05 4.939792907189725 -7.404492472702664 -5.949121217373286 0 1 1 +1129 1 3 -1.05 3.7891559709552 -5.077001971456189 -6.140701857527632 0 1 1 +1130 1 5 0.425 2.037317272972258 -8.100810548569898 -8.041925509572767 0 1 1 +1131 1 1 1.575 6.849072888825457 -2.811741689480723 -9.189383537844549 0 1 1 +1132 1 2 2.1 2.4223841271020863 -4.402287509447001 -6.432547026529044 0 1 1 +1133 1 2 2.1 2.502185680946525 -1.4471749599701873 -6.42458639136697 0 1 1 +1134 1 3 -1.05 2.2810141007135005 -4.3314471971634685 -8.050813463045493 0 1 1 +1135 1 3 -1.05 2.6364022779876706 -1.5400179185302143 -8.04948944504933 0 1 1 +1136 1 4 -0.95 5.154009380117879 -2.73875462121606 -8.180577998655997 0 1 1 +1137 1 3 -1.05 3.807785149367101 -0.7459535839548899 -5.950883537936585 0 1 1 +1138 1 3 -1.05 2.387963148489902 -2.9216298569088384 -5.949131508409803 0 1 1 +1139 1 3 -1.05 1.2373236894784867 -0.5940918355153002 -6.140702909127059 0 1 1 +1140 1 5 0.425 4.645480590911754 -3.617820504422353 -8.041690386363467 0 1 1 +1141 1 1 1.575 0.8627536087070986 -1.6711577052294828 9.18938406619552 0 1 0 +1151 1 1 1.575 -1.7454137744760594 -6.154044591809328 9.18938520735365 0 1 0 +1161 1 1 1.575 9.400921345592693 -7.294679183739749 -9.189382152847024 0 1 1 +1164 1 3 -1.05 9.992849429211155 -8.81435221076156 -8.050822440181973 0 1 1 +1166 1 4 -0.95 7.705813430829789 -7.221710674457647 -8.18059968821399 0 1 1 +1167 1 3 -1.05 6.3596398781576156 -5.228863629458221 -5.950877516883361 0 1 1 +1169 1 3 -1.05 8.94916626015327 -5.077007792880384 -6.140703499406546 0 1 1 +1170 1 5 0.425 7.197307460595866 -8.100812243136945 -8.041966681414198 0 1 1 +1172 1 2 2.1 7.582367683488243 -4.402284032411057 -6.432543750269571 0 1 1 +1173 1 2 2.1 7.662165094646056 -1.447166201878126 -6.424589375468346 0 1 1 +1174 1 3 -1.05 7.441016703458011 -4.33144872801018 -8.05080991887099 0 1 1 +1175 1 3 -1.05 7.796401552064157 -1.5400176490207613 -8.049492711113222 0 1 1 +1177 1 3 -1.05 8.967811472553645 -0.7459382621993349 -5.950885996764763 0 1 1 +1178 1 3 -1.05 7.547961458135202 -2.921653116508409 -5.949132270533429 0 1 1 +1179 1 3 -1.05 6.397335934009757 -0.5940995052845253 -6.140701722863454 0 1 1 +1181 1 1 1.575 6.022761452224014 -1.6711610325038038 9.189384733881601 0 1 0 +1191 1 1 1.575 3.4145789253607752 -6.154042373460836 9.189383895405408 0 1 0 +1241 1 1 1.575 -0.919078623965504 -7.294679079021275 -9.189382380319893 1 1 1 +1243 1 2 2.1 -0.10598440370268136 -5.930100932531092 -6.424581119725159 1 1 1 +1244 1 3 -1.05 -0.32715050640343435 -8.814352196195246 -8.05082183294797 1 1 1 +1245 1 3 -1.05 0.028235486212588867 -6.022932681205882 -8.049476719692466 1 1 1 +1248 1 3 -1.05 -0.22021063902228377 -7.404498240171787 -5.949119370717186 1 1 1 +1249 1 3 -1.05 -1.370833370356804 -5.077008018598221 -6.140703488710428 1 1 1 +1250 1 5 0.425 -3.1226928311026017 -8.100812730925876 -8.041966561917656 1 1 1 +1251 1 1 1.575 1.6890802359826953 -2.811744966880619 -9.189383163839267 1 1 1 +1256 1 4 -0.95 -0.005992758242417295 -2.738753216631558 -8.180571330642541 1 1 1 +1257 1 3 -1.05 -1.3521890001903145 -0.7459384409832701 -5.950885927432735 1 1 1 +1260 1 5 0.425 -0.5145019540468603 -3.6178218687876402 -8.041660116739482 1 1 1 +1261 1 1 1.575 -4.297238698912295 -1.671161039098081 9.189384626544689 1 1 0 +66 1 4 -0.95 -11.168857413411244 7.40354230473303 -1.009270621918711 1 0 0 +67 1 3 -1.05 -9.822645460808385 5.410696592905623 -3.238991317700341 1 0 0 +72 1 2 2.1 -11.045431902700038 4.584118883669678 -2.7573129595669927 1 0 0 +73 1 2 2.1 -11.125242586862766 1.6290062999736783 -2.7652808348657647 1 0 0 +74 1 3 -1.05 -10.904080920918116 4.513273040814628 -1.139048034178586 1 0 0 +75 1 3 -1.05 -11.259470010039587 1.7218521674576586 -1.140382566465906 1 0 0 +78 1 3 -1.05 -11.011020631747801 3.1034522866952905 -3.2407497089701973 1 0 0 +79 1 3 -1.05 -9.860382334314748 0.7759117274275305 -3.049165720829433 1 0 0 +102 1 2 2.1 -8.493613424986258 0.10122409846838565 -2.757323192975578 1 0 0 +103 1 2 2.1 -8.517068108693376 6.111974095994508 -2.765294523187803 1 0 0 +105 1 3 -1.05 -8.651283926478486 6.204745693345419 -1.140405943066158 1 0 0 +106 1 4 -0.95 -6.008854360601466 7.403542287020748 -1.0092772192840815 1 0 0 +107 1 3 -1.05 -4.662672238122222 5.41068100659405 -3.238988681070188 1 0 0 +108 1 3 -1.05 -8.402859804670333 7.586231166902241 -3.2407428765350357 1 0 0 +109 1 3 -1.05 -7.252220538727875 5.258843554485125 -3.0491804233363666 1 0 0 +110 1 5 0.425 -5.500400910059637 8.282611476985458 -1.1479800750695226 1 0 0 +112 1 2 2.1 -5.885425009588118 4.584125237437899 -2.757317352913315 1 0 0 +113 1 2 2.1 -5.9652471268907 1.6289946463227452 -2.7652873359068035 1 0 0 +114 1 3 -1.05 -5.7440766738855835 4.513273091979116 -1.1390583802266399 1 0 0 +115 1 3 -1.05 -6.099468233788193 1.7218514621970193 -1.140386585906322 1 0 0 +116 1 4 -0.95 -8.617064557281656 2.9205985811717774 -1.0092826841011693 1 0 0 +117 1 3 -1.05 -7.270858314853548 0.9277887665995053 -3.2389934936208906 1 0 0 +118 1 3 -1.05 -5.851016824061415 3.103461965248542 -3.2407514463188676 1 0 0 +119 1 3 -1.05 -4.700394398805081 0.7759184548700553 -3.049164281105149 1 0 0 +120 1 5 0.425 -8.108543295227213 3.7997076991375103 -1.1480274788545408 1 0 0 +142 1 2 2.1 -3.3335981782845536 0.10122011566864941 -2.757325467057764 1 0 0 +143 1 2 2.1 -3.357047142472161 6.11196782113624 -2.7652915386543686 1 0 0 +145 1 3 -1.05 -3.491283130074649 6.204745345271121 -1.1404029948656156 1 0 0 +148 1 3 -1.05 -3.2428585701820545 7.586249294640197 -3.240741946764139 1 0 0 +149 1 3 -1.05 -2.092232840778756 5.258851348198554 -3.049181809306372 1 0 0 +150 1 5 0.425 -0.3403842372794994 8.28260966896027 -1.147952880973289 1 0 0 +156 1 4 -0.95 -3.457058959682409 2.9206070634285233 -1.0092797708444152 1 0 0 +157 1 3 -1.05 -2.1108774684637233 0.9277784951989752 -3.238993287738875 1 0 0 +160 1 5 0.425 -2.9485314187216485 3.799710624823639 -1.1479843692043108 1 0 0 +584 1 3 -1.05 -8.352243293361232 0.030357255394267924 -1.1390524737995804 1 1 0 +624 1 3 -1.05 -3.1922461439355594 0.030358867266201628 -1.1390547665052146 1 1 0 +683 1 2 2.1 -10.369664422889349 3.0356838773287826 -6.424575215502184 1 0 1 +685 1 3 -1.05 -10.23544329651916 2.9429037405897773 -8.049464594434008 1 0 1 +688 1 3 -1.05 -10.483869565823827 1.5614073964043058 -5.949127164061662 1 0 1 +691 1 1 1.575 -8.574578130087637 6.154071208432605 -9.189382180610352 1 0 1 +696 1 4 -0.95 -10.26966239527055 6.227051952939341 -8.18058521084057 1 0 1 +700 1 5 0.425 9.861819220954118 5.347945210496121 -8.041828398642311 0 0 1 +721 1 1 1.575 -6.022756736308421 1.6711303517316303 -9.189385968117815 1 0 1 +723 1 2 2.1 -5.209671651803681 3.0356748124450768 -6.424582436808366 1 0 1 +724 1 3 -1.05 -5.430810675667206 0.15147978126713468 -8.050841477729787 1 0 1 +725 1 3 -1.05 -5.075441675948434 2.9429030094494593 -8.049469596004098 1 0 1 +726 1 4 -0.95 -7.717868211333117 1.7441099614575464 -8.180598129872275 1 0 1 +727 1 3 -1.05 -9.064078445575394 3.7369535813240518 -5.950881069909556 1 0 1 +728 1 3 -1.05 -5.323866211609281 1.5614101422204314 -5.949129186293185 1 0 1 +729 1 3 -1.05 -6.474505361873171 3.888805922950688 -6.140690242051968 1 0 1 +730 1 5 0.425 -8.226330365821905 0.8650337528317387 -8.04190334906801 1 0 1 +731 1 1 1.575 -3.414585332552538 6.154074477881739 -9.189382566209709 1 0 1 +732 1 2 2.1 -7.841289477842381 4.563531901090041 -6.432556537458721 1 0 1 +733 1 2 2.1 -7.761472051295536 7.5186496363365265 -6.424587203245381 1 0 1 +734 1 3 -1.05 -7.982649355928281 4.634376331833035 -8.050818102751318 1 0 1 +735 1 3 -1.05 -7.627256350140505 7.425797358610215 -8.049487688430835 1 0 1 +736 1 4 -0.95 -5.109660696087643 6.227049833368586 -8.180591643035886 1 0 1 +737 1 3 -1.05 -6.455868157279019 8.219860147310026 -5.95087771030675 1 0 1 +738 1 3 -1.05 -7.875707074793935 6.044192212608447 -5.94912141317001 1 0 1 +739 1 3 -1.05 -9.026344217684544 8.371738975760678 -6.140708086311505 1 0 1 +740 1 5 0.425 -5.6181977533352105 5.3479473553048 -8.041858759758451 1 0 1 +741 1 1 1.575 -9.400915706306321 7.294693070513674 9.189384926206701 1 0 0 +751 1 1 1.575 -12.009080441958165 2.811750177053689 9.18938314266052 1 0 0 +766 1 4 -0.95 -2.557874232771691 1.7441011023401245 -8.180600685373042 1 0 1 +767 1 3 -1.05 -3.904055434708212 3.7369659883295796 -5.95088122604723 1 0 1 +772 1 2 2.1 -2.6813056080742177 4.563533847624484 -6.432553914027515 1 0 1 +773 1 2 2.1 -2.601490329276581 7.518657095971896 -6.424589458180317 1 0 1 +774 1 3 -1.05 -2.8226468844219257 4.634374668663277 -8.050815326905791 1 0 1 +775 1 3 -1.05 -2.4672573177963235 7.425797891173772 -8.049490259445886 1 0 1 +778 1 3 -1.05 -2.7157085450829808 6.044173304923305 -5.949121943750433 1 0 1 +779 1 3 -1.05 -3.8663325104492907 8.371731480896397 -6.1407067178695645 1 0 1 +791 1 1 1.575 -6.849087529751488 2.8117525878767076 9.1893818738603 1 0 0 +1162 1 2 2.1 -10.449465120471645 0.08055078594262355 -6.432560152381424 1 1 1 +1202 1 2 2.1 -5.289460289979266 0.08055961753068175 -6.432563855616946 1 1 1 +22 1 2 2.1 1.8263872057743669 0.10122323982130865 -2.757323069657862 0 0 0 +23 1 2 2.1 1.802934745269436 6.111973633171797 -2.765294216508333 0 0 0 +25 1 3 -1.05 1.668716070201313 6.204745778974964 -1.1404054664058876 0 0 0 +26 1 4 -0.95 4.311144928833087 7.403541337708113 -1.0092768860747352 0 0 0 +27 1 3 -1.05 5.657326890881341 5.410680424130639 -3.238988834418395 0 0 0 +28 1 3 -1.05 1.9171402669985689 7.586233181934492 -3.240742714496779 0 0 0 +29 1 3 -1.05 3.0677776400331744 5.2588447310193835 -3.0491803607990793 0 0 0 +30 1 5 0.425 4.8195997233909065 8.28261243314935 -1.1479801940850205 0 0 0 +32 1 2 2.1 4.434576150427134 4.584125949994959 -2.757317218978379 0 0 0 +33 1 2 2.1 4.354752672996783 1.6289957720393495 -2.7652874840181454 0 0 0 +34 1 3 -1.05 4.5759233376029655 4.513273129126759 -1.139057813284337 0 0 0 +35 1 3 -1.05 4.22053164114371 1.7218514201119213 -1.1403866240843445 0 0 0 +36 1 4 -0.95 1.7029355240571267 2.9205989386970366 -1.0092827600960685 0 0 0 +37 1 3 -1.05 3.0491419813654197 0.9277888380035257 -3.2389933763391117 0 0 0 +38 1 3 -1.05 4.468983158494831 3.1034597839279527 -3.2407515601519075 0 0 0 +39 1 3 -1.05 5.619605927640823 0.7759183556409575 -3.049164220104494 0 0 0 +40 1 5 0.425 2.2114564850808733 3.799707313511526 -1.1480272683057233 0 0 0 +62 1 2 2.1 6.98640117943874 0.10121957566898487 -2.757325568981271 0 0 0 +63 1 2 2.1 6.962952872691414 6.111965565108033 -2.765291053290289 0 0 0 +65 1 3 -1.05 6.828716908336894 6.204745500725302 -1.140402317732672 0 0 0 +68 1 3 -1.05 7.077141690972795 7.586254503483634 -3.240741979621399 0 0 0 +69 1 3 -1.05 8.22776739587561 5.258851157636421 -3.0491818244113524 0 0 0 +70 1 5 0.425 -10.660383820606539 8.282610501019679 -1.147952957708176 1 0 0 +76 1 4 -0.95 6.862941628467034 2.9206079904103746 -1.0092797796811954 0 0 0 +77 1 3 -1.05 8.209123056757985 0.9277789976030242 -3.238993264209034 0 0 0 +80 1 5 0.425 7.371467964909829 3.799709712130774 -1.1479841901184216 0 0 0 +146 1 4 -0.95 -0.848856980688371 7.403543065635521 -1.009270824726272 1 0 0 +147 1 3 -1.05 0.49734997703464323 5.410693694185699 -3.2389910874000423 1 0 0 +152 1 2 2.1 -0.7254293332831061 4.584118530889224 -2.7573137024694017 1 0 0 +153 1 2 2.1 -0.8052417523067312 1.6290045848501222 -2.7652807440033573 1 0 0 +154 1 3 -1.05 -0.5840810386894884 4.513273006817702 -1.139048972722227 1 0 0 +155 1 3 -1.05 -0.9394700517706553 1.72185203484268 -1.140382327667803 1 0 0 +158 1 3 -1.05 -0.6910205720729508 3.103455656179019 -3.240749615640384 1 0 0 +159 1 3 -1.05 0.459616131096908 0.7759123793662148 -3.049165738355901 1 0 0 +504 1 3 -1.05 1.9677567762458388 0.030357116215178337 -1.1390524463935598 0 1 0 +544 1 3 -1.05 7.12775394829735 0.03035871942021373 -1.1390547635028394 0 1 0 +641 1 1 1.575 4.297243280430267 1.671130298800211 -9.189385641244018 0 0 1 +643 1 2 2.1 5.110326224583382 3.0356739402471575 -6.424582352677525 0 0 1 +644 1 3 -1.05 4.889189397603788 0.15147969781351733 -8.050841862301551 0 0 1 +645 1 3 -1.05 5.244558465032792 2.9429031552053644 -8.049469782410847 0 0 1 +646 1 4 -0.95 2.6021319091520816 1.744110022530954 -8.180598314731402 0 0 1 +647 1 3 -1.05 1.2559239052415947 3.7369549667711297 -5.950880998844742 0 0 1 +648 1 3 -1.05 4.996133819794588 1.5614110520094115 -5.949129347804236 0 0 1 +649 1 3 -1.05 3.845495927210548 3.888805031760729 -6.140690357525236 0 0 1 +650 1 5 0.425 2.093669549271727 0.8650335817131634 -8.041903350027011 0 0 1 +651 1 1 1.575 6.9054145512570955 6.154074540458179 -9.189382656499738 0 0 1 +652 1 2 2.1 2.4787088179628842 4.563531561622252 -6.432556181635265 0 0 1 +653 1 2 2.1 2.5585280519123863 7.518649657399113 -6.424586980258276 0 0 1 +654 1 3 -1.05 2.337350595388921 4.634376273058173 -8.050818213443714 0 0 1 +655 1 3 -1.05 2.6927435931419677 7.425797306887876 -8.049487673491134 0 0 1 +656 1 4 -0.95 5.210339517630658 6.227049915612355 -8.180591746443643 0 0 1 +657 1 3 -1.05 3.864131301319931 8.21985992889757 -5.95087766666106 0 0 1 +658 1 3 -1.05 2.4442928575967446 6.0441923323782305 -5.949121469473265 0 0 1 +659 1 3 -1.05 1.293656047976766 8.371738811992955 -6.14070806309522 0 0 1 +660 1 5 0.425 4.701802056134319 5.3479472107053745 -8.041858727818608 0 0 1 +661 1 1 1.575 0.9190842362638474 7.294693176083765 9.18938507480893 0 0 0 +671 1 1 1.575 -1.6890804391306382 2.8117504093218777 9.18938332505079 0 0 0 +681 1 1 1.575 9.457250970166566 1.6711276693326198 -9.18938446512876 0 0 1 +684 1 3 -1.05 10.049184911415573 0.15147980327706279 -8.050832179942425 0 0 1 +686 1 4 -0.95 7.762125313928461 1.7441003699159374 -8.180600491077195 0 0 1 +687 1 3 -1.05 6.415947469477651 3.7369678311064902 -5.950881518055825 0 0 1 +689 1 3 -1.05 9.00550526381668 3.888799817051286 -6.140691886923977 0 0 1 +690 1 5 0.425 7.2536596052110625 0.8650317110006327 -8.0419445547798 0 0 1 +692 1 2 2.1 7.638693043216929 4.563534397426547 -6.4325531536019 0 0 1 +693 1 2 2.1 7.718508628628836 7.518659026560055 -6.424589752422065 0 0 1 +694 1 3 -1.05 7.497353200810323 4.6343747301491796 -8.050814243532022 0 0 1 +695 1 3 -1.05 7.852742644013961 7.425797704432085 -8.049490509348363 0 0 1 +697 1 3 -1.05 9.024155028039374 8.219873732752141 -5.950880032041851 0 0 1 +698 1 3 -1.05 7.604291305384475 6.044169570929853 -5.9491223139608955 0 0 1 +699 1 3 -1.05 6.4536687395115315 8.371730865840878 -6.140706656787863 0 0 1 +701 1 1 1.575 6.079092109884446 7.294689732957998 9.18938567229783 0 0 0 +711 1 1 1.575 3.470912432260338 2.811752520407829 9.18938169427584 0 0 0 +761 1 1 1.575 -0.862748970625967 1.6711279104285026 -9.189384196227254 1 0 1 +763 1 2 2.1 -0.04966552243351785 3.0356854531893447 -6.424575713127194 1 0 1 +764 1 3 -1.05 -0.27081511421111415 0.15147985204080072 -8.050831834106292 1 0 1 +765 1 3 -1.05 0.08455673703883626 2.942903550076892 -8.049465159099038 1 0 1 +768 1 3 -1.05 -0.1638698065461348 1.5614034363256728 -5.949127300886313 1 0 1 +769 1 3 -1.05 -1.314494472039442 3.888799611479218 -6.140691815778049 1 0 1 +770 1 5 0.425 -3.066340835168454 0.8650309510303416 -8.041944499248094 1 0 1 +771 1 1 1.575 1.7454217382651063 6.154071312403289 -9.189382010954455 1 0 1 +776 1 4 -0.95 0.05033727790187115 6.227051569791222 -8.180585248517964 1 0 1 +777 1 3 -1.05 -1.2958462848877286 8.219873003854904 -5.9508799815340065 1 0 1 +780 1 5 0.425 -0.45818049467738753 5.347945702077382 -8.041828574124134 1 0 1 +781 1 1 1.575 -4.24090790530673 7.294689732506644 9.189385751111567 1 0 0 +1122 1 2 2.1 5.030540831106158 0.08055969575320887 -6.432563931728475 0 1 1 +1242 1 2 2.1 -0.12946529950842844 0.08055281636946887 -6.432559861989349 1 1 1 +104 1 3 -1.05 -8.2959121065224 8.996169249695711 -1.1390343890689216 1 0 0 +144 1 3 -1.05 -3.135914908937057 8.996170757432672 -1.1390363095158538 1 0 0 +226 1 4 -0.95 -11.11254078166963 16.369359515899372 -1.0092685783280562 1 0 0 +227 1 3 -1.05 -9.766336767287553 14.376528090276803 -3.238995751451072 1 0 0 +232 1 2 2.1 -10.989105741717744 13.549928023588016 -2.757323935025683 1 0 0 +233 1 2 2.1 -11.068899971135107 10.594822188451765 -2.765279879336142 1 0 0 +234 1 3 -1.05 -10.847743946171107 13.479098577596996 -1.139055897700814 1 0 0 +235 1 3 -1.05 -11.203130777002407 10.687669044069192 -1.1403772521551225 1 0 0 +238 1 3 -1.05 -10.954690024169619 12.0692952367427 -3.2407400224236813 1 0 0 +239 1 3 -1.05 -9.804050408061553 9.741740732019732 -3.0491690386393895 1 0 0 +262 1 2 2.1 -8.437271860709437 9.067095538704638 -2.757309714415854 1 0 0 +263 1 2 2.1 -8.460747726831363 15.077765756381456 -2.7652898300476085 1 0 0 +265 1 3 -1.05 -8.59496192705347 15.170581558375392 -1.1403965373644613 1 0 0 +266 1 4 -0.95 -5.952537888276847 16.369358966890967 -1.009275025184838 1 0 0 +267 1 3 -1.05 -4.606364507026352 14.376511915388033 -3.2389931337439766 1 0 0 +268 1 3 -1.05 -8.346518937455452 16.552120589815434 -3.2407517060692665 1 0 0 +269 1 3 -1.05 -7.195882464907534 14.224652440524341 -3.049169641913795 1 0 0 +270 1 5 0.425 -5.444048709356704 17.248463720191207 -1.147926072458759 1 0 0 +272 1 2 2.1 -5.82909830220383 13.54993452321374 -2.7573283893462746 1 0 0 +273 1 2 2.1 -5.908905613187655 10.594810706455835 -2.7652862916855394 1 0 0 +274 1 3 -1.05 -5.687739797179347 13.479098509652726 -1.1390661905436907 1 0 0 +275 1 3 -1.05 -6.043129004198134 10.687668498390035 -1.1403811302142177 1 0 0 +276 1 4 -0.95 -8.560740308552909 11.886397563127215 -1.0092984324169958 1 0 0 +277 1 3 -1.05 -7.2145196644512986 9.893600558555839 -3.2389874855870726 1 0 0 +278 1 3 -1.05 -5.794686347127319 12.069305033408408 -3.2407418681182447 1 0 0 +279 1 3 -1.05 -4.644060718572748 9.741746448813768 -3.049167473148536 1 0 0 +280 1 5 0.425 -8.052219545977914 12.76547280470178 -1.1482142578089327 1 0 0 +302 1 2 2.1 -3.277258168611019 9.06709268329568 -2.757311979744827 1 0 0 +303 1 2 2.1 -3.300726568040103 15.077758676128251 -2.7652865730743468 1 0 0 +305 1 3 -1.05 -3.4349611231128563 15.170581239105989 -1.140393118347875 1 0 0 +308 1 3 -1.05 -3.1865176799692243 16.552141258442898 -3.2407508225636663 1 0 0 +309 1 3 -1.05 -2.0358940608778617 14.224659879221303 -3.049171103603271 1 0 0 +310 1 5 0.425 -0.2840321731062527 17.248462066835817 -1.147899000522239 1 0 0 +316 1 4 -0.95 -3.400734418826705 11.88640656459975 -1.009295426410807 1 0 0 +317 1 3 -1.05 -2.0545374153539004 9.893591389941722 -3.238987396892891 1 0 0 +320 1 5 0.425 -2.892208151349891 12.765475346667152 -1.1481709903587394 1 0 0 +682 1 2 2.1 -10.393123499696863 9.046417716708568 -6.432546443741804 1 0 1 +722 1 2 2.1 -5.233118165742026 9.046425415362691 -6.432550064074174 1 0 1 +843 1 2 2.1 -10.313327211997532 12.001542453469945 -6.424580425058928 1 0 1 +845 1 3 -1.05 -10.179104461980216 11.908724309692506 -8.049479685803213 1 0 1 +848 1 3 -1.05 -10.427534414878945 10.527148371504556 -5.949133527898292 1 0 1 +851 1 1 1.575 -8.51824369157916 15.119864900254253 -9.189383813337964 1 0 1 +856 1 4 -0.95 -10.213364798519171 15.19283911129094 -8.1805999456996 1 0 1 +860 1 5 0.425 9.918165904359903 14.31374353290386 -8.041964406905526 0 0 1 +881 1 1 1.575 -5.966426869062609 10.63697892126217 -9.189385316838635 1 0 1 +883 1 2 2.1 -5.153334349175274 12.001533504730254 -6.4245873656476835 1 0 1 +884 1 3 -1.05 -5.37447932514466 9.117293092454549 -8.05082458509691 1 0 1 +885 1 3 -1.05 -5.019102860091463 11.908723625594156 -8.049484444657638 1 0 1 +886 1 4 -0.95 -7.661503944640748 10.709971405747378 -8.180577991074518 1 0 1 +887 1 3 -1.05 -9.007728176997928 12.702784770767579 -5.950885590714915 1 0 1 +888 1 3 -1.05 -5.267530930954242 10.527151999311467 -5.949135635771657 1 0 1 +889 1 3 -1.05 -6.41817044734872 12.85463275660672 -6.140694819991762 1 0 1 +890 1 5 0.425 -8.169994851836138 9.830913491173146 -8.04168744838706 1 0 1 +891 1 1 1.575 -3.3582508216134324 15.119868110955334 -9.189384343267172 1 0 1 +892 1 2 2.1 -7.78495678012643 13.529298477845082 -6.43256609319971 1 0 1 +893 1 2 2.1 -7.705149478241227 16.484421351166855 -6.4245793302851455 1 0 1 +894 1 3 -1.05 -7.926311841895801 13.600212556274936 -8.050837106470572 1 0 1 +895 1 3 -1.05 -7.570934159096701 16.391631488705965 -8.049468672465693 1 0 1 +896 1 4 -0.95 -5.053362791171019 15.192837358764411 -8.180606557550988 1 0 1 +897 1 3 -1.05 -6.39956503035528 17.185682318971356 -5.950877092454645 1 0 1 +898 1 3 -1.05 -7.819368343047313 15.010129619847799 -5.949122570305669 1 0 1 +899 1 3 -1.05 -8.970006576215036 17.33754814394433 -6.140696561990261 1 0 1 +900 1 5 0.425 -5.561851311372902 14.31374529314498 -8.041994715875438 1 0 1 +901 1 1 1.575 -9.344586773498397 16.260504033010424 9.189383061469888 1 0 0 +911 1 1 1.575 -11.952738939766169 11.777562142070536 9.189383933133433 1 0 0 +926 1 4 -0.95 -2.501509910995111 10.709962944319543 -8.180580504155689 1 0 1 +927 1 3 -1.05 -3.847706337399428 12.702796475235434 -5.95088592683273 1 0 1 +932 1 2 2.1 -2.6249716110823975 13.529300956978918 -6.432563378051501 1 0 1 +933 1 2 2.1 -2.545169473198447 16.484429053990457 -6.424581927314836 1 0 1 +934 1 3 -1.05 -2.766309288557113 13.60021091940969 -8.050834014660039 1 0 1 +935 1 3 -1.05 -2.4109350640925493 16.391631918688784 -8.049471644682779 1 0 1 +938 1 3 -1.05 -2.6593699486230253 15.01010932633989 -5.949123442093706 1 0 1 +939 1 3 -1.05 -3.8099936729346524 17.337539995470653 -6.1406953820272605 1 0 1 +951 1 1 1.575 -6.792745980839589 11.77756446289758 9.18938260060447 1 0 0 +24 1 3 -1.05 2.024087914529936 8.996169156423772 -1.1390344040655176 0 0 0 +64 1 3 -1.05 7.1840851787278694 8.996170799073049 -1.1390371246747328 0 0 0 +182 1 2 2.1 1.8827269267658568 9.067094010459222 -2.7573098488458445 0 0 0 +183 1 2 2.1 1.8592529639379158 15.077765641437093 -2.765289826325004 0 0 0 +185 1 3 -1.05 1.7250381794570995 15.170581615306336 -1.140396317987694 0 0 0 +186 1 4 -0.95 4.367461639099476 16.369358398717548 -1.0092749502092584 0 0 0 +187 1 3 -1.05 5.713635253023561 14.376511780801248 -3.2389931627830233 0 0 0 +188 1 3 -1.05 1.973481145796077 16.552121393137707 -3.240751532677078 0 0 0 +189 1 3 -1.05 3.1241173355918086 14.224652737956877 -3.049169549865817 0 0 0 +190 1 5 0.425 4.875951715036274 17.248464394280933 -1.1479261082563532 0 0 0 +192 1 2 2.1 4.490901958219151 13.549935878555889 -2.7573283335925183 0 0 0 +193 1 2 2.1 4.411093600085744 10.594811332515622 -2.7652867782753123 0 0 0 +194 1 3 -1.05 4.632260285297237 13.47909860671924 -1.1390658297944274 0 0 0 +195 1 3 -1.05 4.276871012971121 10.687668403574609 -1.1403818756309079 0 0 0 +196 1 4 -0.95 1.7592596338728619 11.886397590084986 -1.009298531294947 0 0 0 +197 1 3 -1.05 3.105482884951323 9.893602100379187 -3.238987419660816 0 0 0 +198 1 3 -1.05 4.525313593280881 12.06930177005012 -3.240741819055666 0 0 0 +199 1 3 -1.05 5.675938131533806 9.741747191339616 -3.049167537714908 0 0 0 +200 1 5 0.425 2.2677804650185784 12.765472764023784 -1.1482141972846076 0 0 0 +222 1 2 2.1 7.042742997773182 9.06709065048177 -2.757312355283716 0 0 0 +223 1 2 2.1 7.01927329241666 15.077757124097925 -2.7652861994385667 0 0 0 +225 1 3 -1.05 6.885038862750001 15.170581286095011 -1.1403927842743506 0 0 0 +228 1 3 -1.05 7.133482597267005 16.552144500578226 -3.24075083839441 0 0 0 +229 1 3 -1.05 8.284105934673054 14.224659825474038 -3.049171073901001 0 0 0 +230 1 5 0.425 -10.604031977218472 17.248462460723108 -1.1478989225176974 1 0 0 +236 1 4 -0.95 6.919266019605498 11.886407164285622 -1.0092956224084197 0 0 0 +237 1 3 -1.05 8.26546077991545 9.893590106942362 -3.2389873515609295 0 0 0 +240 1 5 0.425 7.427791685687939 12.765474859759728 -1.1481709088514993 0 0 0 +306 1 4 -0.95 -0.7925404329129417 16.36935978204208 -1.0092685234917038 1 0 0 +307 1 3 -1.05 0.5536617436637812 14.376527208127765 -3.238995583926612 1 0 0 +312 1 2 2.1 -0.669105152749097 13.549928062179351 -2.757324364009518 1 0 0 +313 1 2 2.1 -0.7489012635521384 10.594821654108735 -2.7652800741043446 1 0 0 +314 1 3 -1.05 -0.5277440456768847 13.479098585859202 -1.1390561242138784 1 0 0 +315 1 3 -1.05 -0.8831307002281701 10.687669040991018 -1.140377271846452 1 0 0 +318 1 3 -1.05 -0.6346900144781458 12.069295967999206 -3.240739844147214 1 0 0 +319 1 3 -1.05 0.5159499812446136 9.741740306242114 -3.0491689677433413 1 0 0 +642 1 2 2.1 5.086881183770259 9.046425911742144 -6.432550150515191 0 0 1 +762 1 2 2.1 -0.07312306646521094 9.046418567335255 -6.432546469896677 1 0 1 +801 1 1 1.575 4.353573033337209 10.636979042290022 -9.189385175536927 0 0 1 +803 1 2 2.1 5.166664061273867 12.001532910814223 -6.424587670201428 0 0 1 +804 1 3 -1.05 4.945520713988733 9.117292956379355 -8.050824916593145 0 0 1 +805 1 3 -1.05 5.3008973690342565 11.908723709427026 -8.049484733585496 0 0 1 +806 1 4 -0.95 2.6584959262536785 10.709971246531975 -8.18057805604267 0 0 1 +807 1 3 -1.05 1.3122728430088326 12.702785257177823 -5.950885474338808 0 0 1 +808 1 3 -1.05 5.052469129605173 10.527151794250187 -5.949135352014368 0 0 1 +809 1 3 -1.05 3.9018297035645837 12.854632641977553 -6.1406947910058385 0 0 1 +810 1 5 0.425 2.1500052491708654 9.8309136506718 -8.041687402015095 0 0 1 +811 1 1 1.575 6.961748976029714 15.11986798997648 -9.189384482358879 0 0 1 +812 1 2 2.1 2.535042687523287 13.529297970232026 -6.4325661347972565 0 0 1 +813 1 2 2.1 2.614849740198629 16.48442051022965 -6.424579413308912 0 0 1 +814 1 3 -1.05 2.3936882153036816 13.60021257463752 -8.050837163771524 0 0 1 +815 1 3 -1.05 2.7490658487965707 16.391631453766433 -8.049468717992344 0 0 1 +816 1 4 -0.95 5.266637005508615 15.192836965901162 -8.18060636473161 0 0 1 +817 1 3 -1.05 3.920436314988857 17.185683167433734 -5.950877119319536 0 0 1 +818 1 3 -1.05 2.5006316587760526 15.010130254796007 -5.949122772496109 0 0 1 +819 1 3 -1.05 1.3499937471668204 17.337547912493786 -6.140696589330803 0 0 1 +820 1 5 0.425 4.758148953436567 14.313745713621554 -8.04199471755077 0 0 1 +821 1 1 1.575 0.9754132074566062 16.260504016462573 9.189383008011989 0 0 0 +831 1 1 1.575 -1.632738974614906 11.777562083519168 9.18938401267412 0 0 0 +841 1 1 1.575 9.513580811205571 10.636976340496151 -9.189383726764085 0 0 1 +844 1 3 -1.05 10.105516190294331 9.117293135343541 -8.050815507300172 0 0 1 +846 1 4 -0.95 7.818489772082437 10.709962301298077 -8.180580332939817 0 0 1 +847 1 3 -1.05 6.472296617251764 12.702798330503999 -5.950885979768901 0 0 1 +849 1 3 -1.05 9.061839113308423 12.85462734482412 -6.140696399395345 0 0 1 +850 1 5 0.425 7.309994958903577 9.830911036100812 -8.041728700792529 0 0 1 +852 1 2 2.1 7.695026696212686 13.529300436217842 -6.432563050299859 0 0 1 +853 1 2 2.1 7.774830524031032 16.484429805628476 -6.4245820389886 0 0 1 +854 1 3 -1.05 7.553690820056456 13.600211019443176 -8.050833425414133 0 0 1 +855 1 3 -1.05 7.90906499883684 16.391631831273738 -8.049471300477997 0 0 1 +857 1 3 -1.05 9.080458785689217 17.18569631092181 -5.950879504982494 0 0 1 +858 1 3 -1.05 7.660630099640052 15.010108645803708 -5.949123539735778 0 0 1 +859 1 3 -1.05 6.510007127986675 17.337539652224454 -6.140695210856152 0 0 1 +861 1 1 1.575 6.135421058173524 16.260500644067545 9.18938364090062 0 0 0 +871 1 1 1.575 3.5272538816622223 11.777564383420493 9.189382493802137 0 0 0 +921 1 1 1.575 -0.806419090335142 10.6369764569408 -9.189383713930892 1 0 1 +923 1 2 2.1 0.006672498480664757 12.001542880171968 -6.424580735660621 1 0 1 +924 1 3 -1.05 -0.21448392537694794 9.11729318150578 -8.050815514872385 1 0 1 +925 1 3 -1.05 0.1408954660648405 11.908724218193651 -8.04948002701215 1 0 1 +928 1 3 -1.05 -0.10753447832841978 10.52714708281717 -5.9491334742097575 1 0 1 +929 1 3 -1.05 -1.2581612100588444 12.854627509935817 -6.140696384375066 1 0 1 +930 1 5 0.425 -3.0100053531165374 9.830910509518201 -8.041728647622413 1 0 1 +931 1 1 1.575 1.8017562269381084 15.11986483513633 -9.189383868712579 1 0 1 +936 1 4 -0.95 0.1066350030095542 15.192838843972428 -8.18059994641965 1 0 1 +937 1 3 -1.05 -1.2395403472651836 17.185696825023822 -5.950879632472325 1 0 1 +940 1 5 0.425 -0.4018339418639325 14.313743809074847 -8.041964435447152 1 0 1 +941 1 1 1.575 -4.184578902062027 16.260500609273645 9.18938369837054 1 0 0 +202 1 2 2.1 -12.25907142254093 -18.03284292800733 2.7573256699420927 1 1 0 +242 1 2 2.1 -7.099067653695995 -18.032834660131254 2.757321949202108 1 1 0 +282 1 2 2.1 -1.9390718808592098 -18.032841752433647 2.7573260151961314 1 1 0 +363 1 2 2.1 -12.17925475263019 -15.077717311058388 2.765285829341023 1 1 0 +365 1 3 -1.05 -12.045034136641693 -15.17058638521851 1.140380284474201 1 1 0 +368 1 3 -1.05 -12.293483708242846 -16.552230120486666 3.2407464397069514 1 1 0 +371 1 1 1.575 -10.384193742378155 -11.959425939444456 0.00048685249345048476 1 1 0 +376 1 4 -0.95 -12.079303598777397 -11.886440401085338 1.0092857120331082 1 1 0 +380 1 5 0.425 8.05223641778737 -12.765497942560684 1.1480754613364113 0 1 0 +401 1 1 1.575 -7.832364735753668 -16.442302159158654 0.0004887404677624829 1 1 0 +403 1 2 2.1 -7.0192621716443195 -15.077726395299486 2.7652785593097526 1 1 0 +404 1 3 -1.05 -7.240423003632657 -17.962013523315086 1.1390571695805392 1 1 0 +405 1 3 -1.05 -6.88503232555705 -15.170587037025818 1.1403751249754315 1 1 0 +406 1 4 -0.95 -9.52742392394671 -16.369313757792415 1.0092944834335125 1 1 0 +407 1 3 -1.05 -10.873642789988851 -14.376520147083449 3.238990044343934 1 1 0 +408 1 3 -1.05 -7.133480193318928 -16.55222721372571 3.240744460593115 1 1 0 +409 1 3 -1.05 -8.284118927456472 -14.224648350829375 3.0491654057163835 1 1 0 +410 1 5 0.425 -10.035955666435909 -17.24840570373585 1.1481612082133505 1 1 0 +411 1 1 1.575 -5.22420079757442 -11.959422800114778 0.00048645201034069885 1 1 0 +412 1 2 2.1 -9.650890626615093 -13.549995402180539 2.7573154149176524 1 1 0 +413 1 2 2.1 -9.571101081554449 -10.59487844511782 2.7652931515755252 1 1 0 +414 1 3 -1.05 -9.79225658896784 -13.479085120313027 1.1390395402492484 1 1 0 +415 1 3 -1.05 -9.43688362912373 -10.687658124577233 1.1404014440605117 1 1 0 +416 1 4 -0.95 -6.919301425568876 -11.886441838598635 1.0092790865815378 1 1 0 +417 1 3 -1.05 -8.26551829041191 -9.893604601648414 3.23898900788749 1 1 0 +418 1 3 -1.05 -9.68530634639146 -12.06916633578844 3.2407391018412675 1 1 0 +419 1 3 -1.05 -10.835946889124276 -9.741756916972987 3.0491804516627496 1 1 0 +420 1 5 0.425 -7.427780896515371 -12.765496313753136 1.148045263075046 1 1 0 +421 1 1 1.575 -7.816647968665705 -10.455164560774879 -0.0004897073322478462 1 1 0 +431 1 1 1.575 -10.424802848423498 -14.93805036694446 -0.0004859056005166451 1 1 0 +441 1 1 1.575 -2.672356985637104 -16.442304661398456 0.0004900967852954352 1 1 0 +443 1 2 2.1 -1.859254766057532 -15.077715497267564 2.7652856485819424 1 1 0 +444 1 3 -1.05 -2.080427517107452 -17.96201341457353 1.1390669364709627 1 1 0 +445 1 3 -1.05 -1.7250341319023796 -15.170586397099527 1.1403800605829684 1 1 0 +446 1 4 -0.95 -4.367430017015452 -16.369322564554952 1.009292140799971 1 1 0 +447 1 3 -1.05 -5.713619531094013 -14.376507547027593 3.2389899091549132 1 1 0 +448 1 3 -1.05 -1.9734837675643213 -16.552233362306946 3.2407464072217795 1 1 0 +449 1 3 -1.05 -3.124107903450609 -14.224654635100869 3.0491639457169573 1 1 0 +450 1 5 0.425 -4.875966104966851 -17.24840844446412 1.1481201137788588 1 1 0 +452 1 2 2.1 -4.490906768877101 -13.549992289876716 2.7573182139731394 1 1 0 +453 1 2 2.1 -4.411121706661005 -10.594869786965624 2.7652903571435505 1 1 0 +454 1 3 -1.05 -4.632254153063665 -13.479086778990123 1.1390428907981356 1 1 0 +455 1 3 -1.05 -4.276884510841384 -10.687657631952451 1.140398470795125 1 1 0 +456 1 4 -0.95 -1.759303475003291 -11.886440295102556 1.0092857335364354 1 1 0 +457 1 3 -1.05 -3.1054929638501587 -9.893589696855543 3.238986417750816 1 1 0 +458 1 3 -1.05 -4.5253080460816815 -12.069187701329469 3.240738460509835 1 1 0 +459 1 3 -1.05 -5.6759330828412295 -9.741765530480448 3.049181725968289 1 1 0 +461 1 1 1.575 -2.6566402814800893 -10.455168034309882 -0.0004892102139120169 1 1 0 +471 1 1 1.575 -5.264810010804999 -14.938048096264206 -0.000487296179734642 1 1 0 +904 1 3 -1.05 -10.161854685695545 -18.083120592662027 8.050830551575691 1 1 0 +944 1 3 -1.05 -5.0018574844249635 -18.08311895062402 8.050827904580979 1 1 0 +1026 1 4 -0.95 -12.978516922048088 -10.709978874953269 8.180583642606527 1 1 0 +1027 1 3 -1.05 -11.63229786651004 -12.702775234356054 5.950880154637874 1 1 0 +1032 1 2 2.1 -12.855048702475655 -13.529314203926136 6.432556100815381 1 1 0 +1033 1 2 2.1 -12.934828913170918 -16.484422806588526 6.424584210403742 1 1 0 +1034 1 3 -1.05 -12.713689435153274 -13.600211848270453 8.050834252924775 1 1 0 +1035 1 3 -1.05 -13.069060384643878 -16.39164043985936 8.04947631781359 1 1 0 +1038 1 3 -1.05 -12.820637718787896 -15.010116398098276 5.949134768177112 1 1 0 +1039 1 3 -1.05 -11.66999655483321 -17.337541956749448 6.140690977240167 1 1 0 +1062 1 2 2.1 -10.303209469423026 -18.012230849774276 6.432564214130078 1 1 0 +1063 1 2 2.1 -10.326696781513265 -12.001574504575316 6.424588327366143 1 1 0 +1065 1 3 -1.05 -10.46091070201314 -11.908711333552967 8.04949252107611 1 1 0 +1066 1 4 -0.95 -7.818513991591397 -10.709979211148491 8.180577084620788 1 1 0 +1067 1 3 -1.05 -6.472326004187935 -12.702791670718351 5.9508827006348675 1 1 0 +1068 1 3 -1.05 -10.212461185927816 -10.527079940778258 5.9491249291990975 1 1 0 +1069 1 3 -1.05 -9.061822886101059 -12.854652084676546 6.140708572507496 1 1 0 +1070 1 5 0.425 -7.309988942363981 -9.83088467575225 8.041736795520984 1 1 0 +1072 1 2 2.1 -7.695041897866641 -13.529307071510981 6.432551577978835 1 1 0 +1073 1 2 2.1 -7.774834793344618 -16.484434939947647 6.424577603346634 1 1 0 +1074 1 3 -1.05 -7.553685084393516 -13.60021181043779 8.050823752129004 1 1 0 +1075 1 3 -1.05 -7.90905859095466 -16.39164117482209 8.049471719485046 1 1 0 +1076 1 4 -0.95 -10.426647145797157 -15.192866902601361 8.180586106999344 1 1 0 +1077 1 3 -1.05 -9.080429028015885 -17.18569724875303 5.950884797992369 1 1 0 +1078 1 3 -1.05 -7.660633858427131 -15.010107503057135 5.949133029699604 1 1 0 +1079 1 3 -1.05 -6.510008950950501 -17.337534855285654 6.140692414529196 1 1 0 +1080 1 5 0.425 -9.918176441334206 -14.313808476712383 8.041767318325997 1 1 0 +1102 1 2 2.1 -5.143192688598495 -18.01223469020368 6.43256163865242 1 1 0 +1103 1 2 2.1 -5.166674659914734 -12.001581247949602 6.42459150745173 1 1 0 +1105 1 3 -1.05 -5.30091011073581 -11.90871163472071 8.049495593212923 1 1 0 +1106 1 4 -0.95 -2.6585163778844034 -10.709977949816722 8.18058344571133 1 1 0 +1108 1 3 -1.05 -5.052460029806349 -10.527060001226648 5.949125945371383 1 1 0 +1109 1 3 -1.05 -3.9018353937420382 -12.854644320517036 6.140707119099776 1 1 0 +1110 1 5 0.425 -2.149972520489074 -9.830886800682975 8.041764004644078 1 1 0 +1112 1 2 2.1 -2.535048249868213 -13.529314790919454 6.4325557752826 1 1 0 +1113 1 2 2.1 -2.614828592705191 -16.484424453660697 6.424584582139241 1 1 0 +1114 1 3 -1.05 -2.3936893961900143 -13.60021174374376 8.050833520746858 1 1 0 +1115 1 3 -1.05 -2.7490603036216505 -16.391640281660283 8.049476486761636 1 1 0 +1116 1 4 -0.95 -5.26664099130191 -15.192857666732323 8.180588944438727 1 1 0 +1117 1 3 -1.05 -3.92045104663105 -17.18570897645179 5.950884811850528 1 1 0 +1118 1 3 -1.05 -2.5006374505687665 -15.010113340479645 5.949134814048831 1 1 0 +1120 1 5 0.425 -4.758164912029445 -14.313806137693177 8.041810512450352 1 1 0 +162 1 2 2.1 3.2209340369483392 -18.032833757481832 2.7573218012303666 0 1 0 +321 1 1 1.575 2.4876351465059408 -16.442302154784315 0.0004888543282763891 0 1 0 +323 1 2 2.1 3.300736726127152 -15.077726538699793 2.7652785057231757 0 1 0 +324 1 3 -1.05 3.079577082904713 -17.962013555013442 1.1390567851692257 0 1 0 +325 1 3 -1.05 3.4349676885715965 -15.17058703603631 1.1403750102570616 0 1 0 +326 1 4 -0.95 0.7925763172482458 -16.369313154371326 1.0092944072974692 0 1 0 +327 1 3 -1.05 -0.5536431863284719 -14.376520315382402 3.2389901201446865 0 1 0 +328 1 3 -1.05 3.186519855031559 -16.552227249856152 3.240744515086007 0 1 0 +329 1 3 -1.05 2.0358818673234893 -14.224648915409531 3.0491654939012367 0 1 0 +330 1 5 0.425 0.2840440343041557 -17.248406206415737 1.1481612674588284 0 1 0 +331 1 1 1.575 5.095799077392401 -11.95942278124406 0.0004864450394208575 0 1 0 +332 1 2 2.1 0.669109464863638 -13.549995278717017 2.757315210932033 0 1 0 +333 1 2 2.1 0.7488989807994404 -10.594878651163997 2.765293220622354 0 1 0 +334 1 3 -1.05 0.5277433362522466 -13.479085130961657 1.1390393870012794 0 1 0 +335 1 3 -1.05 0.8831162860029735 -10.68765806499949 1.1404014490301666 0 1 0 +336 1 4 -0.95 3.4006984714464785 -11.886441915318503 1.009279146529078 0 1 0 +337 1 3 -1.05 2.05448186886235 -9.89360444283963 3.2389889279451722 0 1 0 +338 1 3 -1.05 0.6346935230510518 -12.069165638686224 3.240739110626995 0 1 0 +339 1 3 -1.05 -0.5159464707475578 -9.741757212644893 3.0491802687542187 0 1 0 +340 1 5 0.425 2.892219107482818 -12.76549622369036 1.1480452697934158 0 1 0 +341 1 1 1.575 2.5033520639114464 -10.45516467544924 -0.0004897125671803337 0 1 0 +351 1 1 1.575 -0.10480281833843286 -14.938050279884052 -0.00048588915579017566 0 1 0 +361 1 1 1.575 7.6476430809013145 -16.442304686736612 0.00049038023432324 0 1 0 +364 1 3 -1.05 8.239572543766378 -17.962013382666825 1.1390663747804606 0 1 0 +366 1 4 -0.95 5.952569848038642 -16.369322613306085 1.009292148021041 0 1 0 +367 1 3 -1.05 4.60638206298816 -14.376506603214507 3.2389897937288765 0 1 0 +369 1 3 -1.05 7.195891896594336 -14.224654560331162 3.049163809309336 0 1 0 +370 1 5 0.425 5.444033924435217 -17.248408369389658 1.14812008570199 0 1 0 +372 1 2 2.1 5.829092303814921 -13.54999199012334 2.757318610834842 0 1 0 +373 1 2 2.1 5.90887749264844 -10.594869830017455 2.7652903021076654 0 1 0 +374 1 3 -1.05 5.6877459594373825 -13.479086764973678 1.1390432596793474 0 1 0 +375 1 3 -1.05 6.043115538450444 -10.687657699182285 1.1403981434855215 0 1 0 +377 1 3 -1.05 7.214508812427347 -9.893588586527766 3.2389864017305623 0 1 0 +378 1 3 -1.05 5.794691970346413 -12.069189428924563 3.240738236405365 0 1 0 +379 1 3 -1.05 4.644066780347256 -9.741765351175818 3.0491815811632907 0 1 0 +381 1 1 1.575 7.663359745050162 -10.455168066687937 -0.0004892393395401484 0 1 0 +391 1 1 1.575 5.055189932412219 -14.938048027032371 -0.0004872860180871186 0 1 0 +451 1 1 1.575 -0.06419364919500303 -11.959425986989281 0.0004869662395279306 1 1 0 +460 1 5 0.425 -2.2677636282949134 -12.76549803894805 1.148075362714911 1 1 0 +824 1 3 -1.05 0.1581453413464491 -18.083120565372205 8.050830868008626 0 1 0 +864 1 3 -1.05 5.318142529558035 -18.083119031532103 8.050827887575677 0 1 0 +982 1 2 2.1 0.01679048455388532 -18.01223102881715 6.432564492236768 0 1 0 +983 1 2 2.1 -0.0066952224139544825 -12.001572696194678 6.424588219561466 0 1 0 +985 1 3 -1.05 -0.14091080181982996 -11.90871125431586 8.049492287832761 0 1 0 +986 1 4 -0.95 2.501485979919419 -10.709979047674722 8.180577187844913 0 1 0 +987 1 3 -1.05 3.8476721766409234 -12.702792935609825 5.9508827991561954 0 1 0 +988 1 3 -1.05 0.10753867741342837 -10.527082522856396 5.949125116992775 0 1 0 +989 1 3 -1.05 1.2581766829054715 -12.854651901566331 6.140708678514933 0 1 0 +990 1 5 0.425 3.010011029658287 -9.83088482771142 8.041736728168713 0 1 0 +992 1 2 2.1 2.624959204051148 -13.529306355082204 6.43255142132813 0 1 0 +993 1 2 2.1 2.545164633028703 -16.48443503403599 6.42457746374043 0 1 0 +994 1 3 -1.05 2.7663148605711587 -13.600211881262618 8.050823710986089 0 1 0 +995 1 3 -1.05 2.4109413776533053 -16.391641111187187 8.049471733472652 0 1 0 +996 1 4 -0.95 -0.1066473719781591 -15.192867242576972 8.180586172547835 0 1 0 +997 1 3 -1.05 1.2395719193215697 -17.185696569519184 5.950884733429518 0 1 0 +998 1 3 -1.05 2.659366057346901 -15.010107680149012 5.949132937132072 0 1 0 +999 1 3 -1.05 3.809991544530318 -17.337535214117086 6.140692372135046 0 1 0 +1000 1 5 0.425 0.40182382453956933 -14.313808115235338 8.041767358684657 0 1 0 +1022 1 2 2.1 5.176806602000145 -18.01223478887661 6.432561551916441 0 1 0 +1023 1 2 2.1 5.153325970226241 -12.001581171312154 6.424591592957077 0 1 0 +1025 1 3 -1.05 5.019090010771908 -11.908711671328648 8.04949592036308 0 1 0 +1028 1 3 -1.05 5.267540194467005 -10.527058835775907 5.9491260060330475 0 1 0 +1029 1 3 -1.05 6.418164130946273 -12.854644032937445 6.140707132764247 0 1 0 +1030 1 5 0.425 -12.469972004930579 -9.830886011965626 8.04176389538827 1 1 0 +1036 1 4 -0.95 5.053359381870932 -15.192857077416427 8.18058886353535 0 1 0 +1037 1 3 -1.05 6.399549290938857 -17.18570880002915 5.95088487910323 0 1 0 +1040 1 5 0.425 5.561834684837105 -14.313806813221188 8.041810608039574 0 1 0 +1107 1 3 -1.05 -1.3122999739981296 -12.70277646304137 5.950880254538765 1 1 0 +1119 1 3 -1.05 -1.3499973134743044 -17.337541538579533 6.140690843939177 1 1 0 +362 1 2 2.1 -12.202744771981509 -9.067064814200972 2.7573119706868425 1 1 0 +402 1 2 2.1 -7.04273866849521 -9.067055088426352 2.757307939589456 1 1 0 +442 1 2 2.1 -1.8827442162924566 -9.067062967529901 2.7573120570116707 1 1 0 +523 1 2 2.1 -12.122921769822408 -6.111929983949841 2.765291027036895 1 1 0 +525 1 3 -1.05 -11.988703560905819 -6.204760843795567 1.1403957796501452 1 1 0 +528 1 3 -1.05 -12.237149424227058 -7.5863238195216365 3.2407527420150988 1 1 0 +531 1 1 1.575 -10.327858771543793 -2.9935731989533902 0.0004888265444922268 1 1 0 +536 1 4 -0.95 -12.022931150481051 -2.920580487258352 1.0093004267478776 1 1 0 +540 1 5 0.425 8.108558594315166 -3.7996512054948504 1.148212040044502 0 1 0 +561 1 1 1.575 -7.776025262711729 -7.4765049298112505 0.0004881991149989773 1 1 0 +563 1 2 2.1 -6.962930286971465 -6.111939824800135 2.765283881410019 1 1 0 +564 1 3 -1.05 -7.184085023643926 -8.99618073281571 1.1390399029648446 1 1 0 +565 1 3 -1.05 -6.828701808117627 -6.204761586454861 1.1403901964143177 1 1 0 +566 1 4 -0.95 -9.471118879929094 -7.403529138856177 1.0092745530484954 1 1 0 +567 1 3 -1.05 -10.817325824488437 -5.4107065420677785 3.2389947847718457 1 1 0 +568 1 3 -1.05 -7.07714607080063 -7.586320418897543 3.240750734425326 1 1 0 +569 1 3 -1.05 -8.227783475860987 -5.258830022264039 3.0491700040117298 1 1 0 +570 1 5 0.425 -9.979621696041477 -8.282638958710844 1.14794634211753 1 1 0 +571 1 1 1.575 -5.167865926094019 -2.9935700449751117 0.0004884982994557419 1 1 0 +572 1 2 2.1 -9.594553208812169 -4.584114830084795 2.7573247242772645 1 1 0 +573 1 2 2.1 -9.514752964904952 -1.6290031107655665 2.76528557294675 1 1 0 +574 1 3 -1.05 -9.735924934424778 -4.5132754309991014 1.1390582524844408 1 1 0 +575 1 3 -1.05 -9.380536654292207 -1.7218462684346072 1.140382320970689 1 1 0 +576 1 4 -0.95 -6.862929549230458 -2.92058282567767 1.0092939379568069 1 1 0 +577 1 3 -1.05 -8.209153404187742 -0.9277818004229132 3.238988388541747 1 1 0 +578 1 3 -1.05 -9.62897585444286 -3.103458654146092 3.240740428512092 1 1 0 +579 1 3 -1.05 -10.779616213891364 -0.7759196991747856 3.049168880743542 1 1 0 +580 1 5 0.425 -7.371458392180491 -3.799648965132267 1.1481816702921979 1 1 0 +581 1 1 1.575 -7.760307453210186 -1.4893294292081407 -0.000487591834845702 1 1 0 +591 1 1 1.575 -10.368475011993443 -5.972216450792448 -0.0004866657689603926 1 1 0 +601 1 1 1.575 -2.6160175804425334 -7.476507331401965 0.000489554412521187 1 1 0 +603 1 2 2.1 -1.8029234809179044 -6.111929469506379 2.765290938817035 1 1 0 +604 1 3 -1.05 -2.0240895156060503 -8.996180475658797 1.1390497095690097 1 1 0 +605 1 3 -1.05 -1.6687035111919997 -6.204760947315812 1.1403951214536825 1 1 0 +606 1 4 -0.95 -4.311125240437589 -7.40353853925054 1.0092720638271473 1 1 0 +607 1 3 -1.05 -5.657299784603431 -5.4106924097233176 3.2389943904105305 1 1 0 +608 1 3 -1.05 -1.9171495422821216 -7.586325941483118 3.240752466809111 1 1 0 +609 1 3 -1.05 -3.0677722086720367 -5.258836440196976 3.049168256994184 1 1 0 +610 1 5 0.425 -4.819631740010255 -8.28264108406943 1.147905363302021 1 1 0 +612 1 2 2.1 -4.434571167364412 -4.584112138551882 2.757328005439472 1 1 0 +613 1 2 2.1 -4.35477408472807 -1.6289950360376295 2.765282611037348 1 1 0 +614 1 3 -1.05 -4.575922294211849 -4.513277152884633 1.1390617721334308 1 1 0 +615 1 3 -1.05 -4.220537459731567 -1.7218458350906225 1.1403790499316706 1 1 0 +616 1 4 -0.95 -1.7029315494609438 -2.920581286855313 1.009300527997441 1 1 0 +617 1 3 -1.05 -3.049127074634125 -0.9277662650700513 3.238986045411176 1 1 0 +618 1 3 -1.05 -4.468977447340732 -3.1034809491568094 3.2407397732533028 1 1 0 +619 1 3 -1.05 -5.619602858246474 -0.7759278254115536 3.049170295315518 1 1 0 +621 1 1 1.575 -2.600299716589224 -1.4893328740682321 -0.0004870341551566071 1 1 0 +631 1 1 1.575 -5.208482201015078 -5.972214134547372 -0.00048794280472819196 1 1 0 +1064 1 3 -1.05 -10.105516488566403 -9.1172864545765 8.050812017095526 1 1 0 +1104 1 3 -1.05 -4.94551950969972 -9.117284875156573 8.050809425873682 1 1 0 +1186 1 4 -0.95 -12.922163181072401 -1.7441480862858398 8.180580989048229 1 1 0 +1187 1 3 -1.05 -11.57594038211662 -3.736962709780661 5.950884644536357 1 1 0 +1192 1 2 2.1 -12.798703976852076 -4.563477223935855 6.4325671062022085 1 1 0 +1193 1 2 2.1 -12.87850157426794 -7.518594866582022 6.4245838131711785 1 1 0 +1194 1 3 -1.05 -12.657357075069436 -4.634391310577776 8.050841207753615 1 1 0 +1195 1 3 -1.05 -13.012730287598115 -7.425811152679454 8.049471003457095 1 1 0 +1198 1 3 -1.05 -12.764298791768608 -6.044310212087346 5.949124918515372 1 1 0 +1199 1 3 -1.05 -11.613660044905913 -8.371724217557164 6.1406940776695595 1 1 0 +1222 1 2 2.1 -10.246880790109062 -9.046458105402944 6.432550667813766 1 1 0 +1223 1 2 2.1 -10.270345504929077 -3.0357170181300006 6.4245835383340175 1 1 0 +1225 1 3 -1.05 -10.404563440926587 -2.942901247124354 8.049482833097352 1 1 0 +1226 1 4 -0.95 -7.762161044690064 -1.744149770475424 8.180574812461733 1 1 0 +1227 1 3 -1.05 -6.415966116593134 -3.73697764701976 5.9508871807473405 1 1 0 +1228 1 3 -1.05 -10.156132949827974 -1.561327845464941 5.94913393800597 1 1 0 +1229 1 3 -1.05 -9.005492655293018 -3.8888143704750213 6.140697709391448 1 1 0 +1230 1 5 0.425 -7.2536721407950715 -0.8650918391092688 8.041681601019869 1 1 0 +1232 1 2 2.1 -7.638697839125399 -4.56346976541589 6.432562555622445 1 1 0 +1233 1 2 2.1 -7.718506635912108 -7.518604577415662 6.424576758095252 1 1 0 +1234 1 3 -1.05 -7.497352805807434 -4.634391240549473 8.05083153086409 1 1 0 +1235 1 3 -1.05 -7.852728552110221 -7.425811958730723 8.04946655754084 1 1 0 +1236 1 4 -0.95 -10.370302228905821 -6.227020102282678 8.180601687842392 1 1 0 +1237 1 3 -1.05 -9.024099865185532 -8.219863735211376 5.950878868492627 1 1 0 +1238 1 3 -1.05 -7.604295208524743 -6.044303920000971 5.949123349425319 1 1 0 +1239 1 3 -1.05 -6.453672021320111 -8.371717534647717 6.140695622062312 1 1 0 +1240 1 5 0.425 -9.861830566687258 -5.347927183164366 8.041954081983627 1 1 0 +1262 1 2 2.1 -5.086864118735355 -9.046460824361695 6.432547962331752 1 1 0 +1263 1 2 2.1 -5.110325060390764 -3.0357264779902415 6.4245866001619785 1 1 0 +1265 1 3 -1.05 -5.2445627758652025 -2.942901539041836 8.049486192414905 1 1 0 +1266 1 4 -0.95 -2.6021638449486817 -1.7441493140479167 8.180581250684453 1 1 0 +1268 1 3 -1.05 -4.996131563332382 -1.561304142262447 5.949134847146771 1 1 0 +1269 1 3 -1.05 -3.845505208560062 -3.888806435255866 6.140696375915624 1 1 0 +1270 1 5 0.425 -2.0936552768300416 -0.8650931226092098 8.041708750676337 1 1 0 +1272 1 2 2.1 -2.478705083415977 -4.563478530750267 6.432566771448263 1 1 0 +1273 1 2 2.1 -2.5585004268402667 -7.518594042662386 6.424583683031381 1 1 0 +1274 1 3 -1.05 -2.337357058590765 -4.6343911683899695 8.050841730975934 1 1 0 +1275 1 3 -1.05 -2.692730278146584 -7.4258112933116 8.049471495897967 1 1 0 +1276 1 4 -0.95 -5.210295954483267 -6.227010516473889 8.180604547038248 1 1 0 +1277 1 3 -1.05 -3.86412183624161 -8.219875620457026 5.950879044037668 1 1 0 +1278 1 3 -1.05 -2.4442987304969392 -6.044309813785304 5.949125141897687 1 1 0 +1280 1 5 0.425 -4.701819271798077 -5.3479252345724095 8.041997228930375 1 1 0 +322 1 2 2.1 3.2772610098674093 -9.067055693067015 2.7573080000114008 0 1 0 +481 1 1 1.575 2.5439746362228775 -7.476504835357023 0.000488107312015984 0 1 0 +483 1 2 2.1 3.3570675650653765 -6.1119409913516805 2.765283658968608 0 1 0 +484 1 3 -1.05 3.1359149983488273 -8.996180653887704 1.1390399010220378 0 1 0 +485 1 3 -1.05 3.4912982864764803 -6.204761586269585 1.1403902809350122 0 1 0 +486 1 4 -0.95 0.848880935670131 -7.403529456906714 1.0092745179848404 0 1 0 +487 1 3 -1.05 -0.4973223654953767 -5.4107043825084595 3.2389946445963442 0 1 0 +488 1 3 -1.05 3.2428541215929787 -7.586319587782093 3.2407506030975757 0 1 0 +489 1 3 -1.05 2.0922173637001134 -5.258830509141244 3.049170069120102 0 1 0 +490 1 5 0.425 0.34037849430467304 -8.282638585494373 1.1479463507303809 0 1 0 +491 1 1 1.575 5.152133947531471 -2.9935699784041603 0.0004881234041693716 0 1 0 +492 1 2 2.1 0.7254445666488039 -4.58411548963857 2.7573250239711573 0 1 0 +493 1 2 2.1 0.8052450939405311 -1.6290034167113632 2.7652851130343965 0 1 0 +494 1 3 -1.05 0.5840751961211161 -4.513275537476634 1.139058491185871 0 1 0 +495 1 3 -1.05 0.9394635072903537 -1.7218461634728612 1.1403819751435265 0 1 0 +496 1 4 -0.95 3.457070537219302 -2.9205829409048096 1.0092940260285932 0 1 0 +497 1 3 -1.05 2.1108492600941755 -0.9277801182782781 3.2389884882436597 0 1 0 +498 1 3 -1.05 0.6910242115697844 -3.103459227797069 3.240740522829608 0 1 0 +499 1 3 -1.05 -0.45961486738614177 -0.7759203181741157 3.049168941857401 0 1 0 +500 1 5 0.425 2.9485416775480626 -3.7996487609851872 1.148181457575495 0 1 0 +501 1 1 1.575 2.5596923414053414 -1.4893294760794085 -0.00048791691717831043 0 1 0 +511 1 1 1.575 -0.048475029845510775 -5.9722163822729275 -0.000486610148280775 0 1 0 +521 1 1 1.575 7.703982404569835 -7.47650743047992 0.0004894906663004406 0 1 0 +524 1 3 -1.05 8.295910521844277 -8.996180577499706 1.1390498499011983 0 1 0 +526 1 4 -0.95 6.008874247849864 -7.403539256615227 1.009272347205897 0 1 0 +527 1 3 -1.05 4.662703122988951 -5.410690550977408 3.238994424282833 0 1 0 +529 1 3 -1.05 7.25222715620599 -5.258835994797554 3.0491686153219923 0 1 0 +530 1 5 0.425 5.500368804549042 -8.28264025862713 1.1479051971829524 0 1 0 +532 1 2 2.1 5.885427782213334 -4.584112735919096 2.7573281465655857 0 1 0 +533 1 2 2.1 5.965226467012172 -1.628993361989938 2.7652825479136283 0 1 0 +534 1 3 -1.05 5.74407777792679 -4.5132770146071675 1.1390625883841388 0 1 0 +535 1 3 -1.05 6.0994626404410575 -1.7218459113188977 1.1403796100854198 0 1 0 +537 1 3 -1.05 7.270871098481489 -0.9277673866200544 3.2389858821101694 0 1 0 +538 1 3 -1.05 5.8510226007914845 -3.103482215879012 3.240739632064548 0 1 0 +539 1 3 -1.05 4.7003977117094315 -0.7759282649032926 3.0491702761655297 0 1 0 +541 1 1 1.575 7.71970016267743 -1.4893327968293981 -0.0004872882145861013 0 1 0 +551 1 1 1.575 5.111517638351028 -5.972214169324591 -0.00048815723114969956 0 1 0 +611 1 1 1.575 -0.0078587283292606 -2.9935732581044245 0.0004888922267749507 1 1 0 +620 1 5 0.425 -2.211440966107384 -3.7996504259139385 1.1482119261243664 1 1 0 +984 1 3 -1.05 0.21448346242866556 -9.117286626928372 8.050812484857788 0 1 0 +1024 1 3 -1.05 5.374480667058524 -9.1172847465118 8.050809703370929 0 1 0 +1142 1 2 2.1 0.07311912259206466 -9.046457539168534 6.432550791979782 0 1 0 +1143 1 2 2.1 0.049653605296850145 -3.0357192834675537 6.424583355385289 0 1 0 +1145 1 3 -1.05 -0.0845634540740896 -2.9429011311913413 8.049482748208861 0 1 0 +1146 1 4 -0.95 2.5578388527215647 -1.7441499838946513 8.180574701561904 0 1 0 +1147 1 3 -1.05 3.904034789903749 -3.7369772016518894 5.950886974857758 0 1 0 +1148 1 3 -1.05 0.1638671308906794 -1.5613255896995106 5.949134016742535 0 1 0 +1149 1 3 -1.05 1.3145065630773924 -3.8888138098807907 6.140697691304018 0 1 0 +1150 1 5 0.425 3.0663280045002406 -0.8650917177898982 8.041681658582819 0 1 0 +1152 1 2 2.1 2.681301696828717 -4.563470951334201 6.432562677791433 0 1 0 +1153 1 2 2.1 2.6014924415491016 -7.518605844210883 6.42457670393048 0 1 0 +1154 1 3 -1.05 2.8226473559855396 -4.634391279296553 8.050831493737332 0 1 0 +1155 1 3 -1.05 2.467271583937638 -7.425811889492945 8.049466671649265 0 1 0 +1156 1 4 -0.95 -0.050302377863054915 -6.227020357623573 8.18060186788391 0 1 0 +1157 1 3 -1.05 1.2959016487701724 -8.219862803300558 5.950878899595457 0 1 0 +1158 1 3 -1.05 2.715705046173925 -6.0443024015894125 5.949123183070215 0 1 0 +1159 1 3 -1.05 3.866328082096553 -8.371717396852594 6.14069563666442 0 1 0 +1160 1 5 0.425 0.45816960045136135 -5.347926987828261 8.041953993827088 0 1 0 +1182 1 2 2.1 5.233134204042219 -9.046462615939763 6.432548060968001 0 1 0 +1183 1 2 2.1 5.209674691687077 -3.035725777150798 6.42458687581861 0 1 0 +1185 1 3 -1.05 5.075437238345243 -2.9429016177355063 8.0494859105205 0 1 0 +1188 1 3 -1.05 5.323868516938102 -1.5613057900237983 5.949134653550393 0 1 0 +1189 1 3 -1.05 6.474494628261173 -3.8888064118199335 6.140696088678768 0 1 0 +1190 1 5 0.425 -12.413655946990202 -0.8650943030890836 8.041708999745945 1 1 0 +1196 1 4 -0.95 5.109703718829179 -6.227011235494134 8.180604680522054 0 1 0 +1197 1 3 -1.05 6.455880799282653 -8.219873725450045 5.950878826176888 0 1 0 +1200 1 5 0.425 5.618181133036563 -5.347924456811681 8.0419973088112 0 1 0 +1267 1 3 -1.05 -1.255938118796582 -3.736961290112877 5.95088464227411 1 1 0 +1279 1 3 -1.05 -1.293660683856988 -8.371724040207935 6.140694136436416 1 1 0 +43 1 2 2.1 -12.066603589864952 2.8538562635186473 2.765296766562731 1 0 0 +45 1 3 -1.05 -11.932382242280934 2.7610755310900856 1.1404071534983906 1 0 0 +48 1 3 -1.05 -12.180808606969753 1.3795772494375846 3.2407446680776673 1 0 0 +51 1 1 1.575 -10.271517178678891 5.972243043476983 0.0004897808600361486 1 0 0 +56 1 4 -0.95 -11.966601677508535 6.045223061069063 1.0092868522084313 1 0 0 +60 1 5 0.425 8.164880641989306 5.166117461622548 1.1480432930863778 0 0 0 +81 1 1 1.575 -7.719695704081541 1.489301984598221 0.00048620424004042206 1 0 0 +83 1 2 2.1 -6.906611830118906 2.853845289659727 2.765289513921303 1 0 0 +84 1 3 -1.05 -7.1277496439282455 -0.03034856107450068 1.1390300687638835 1 0 0 +85 1 3 -1.05 -6.772380470440207 2.7610747346770914 1.1404021270114981 1 0 0 +86 1 4 -0.95 -9.414807068563295 1.5622817433164506 1.0092737068243878 1 0 0 +87 1 3 -1.05 -10.761016708915546 3.5551257680232844 3.2389908036271358 1 0 0 +88 1 3 -1.05 -7.020805055588193 1.3795831051103633 3.2407426091838403 1 0 0 +89 1 3 -1.05 -8.171444330233143 3.706977523559388 3.0491815779021074 1 0 0 +90 1 5 0.425 -9.92326936174715 0.6832053400645641 1.1479687029894574 1 0 0 +91 1 1 1.575 -5.111524290678346 5.972246284049945 0.0004894123271252937 1 0 0 +92 1 2 2.1 -9.53822873762858 4.381702400713934 2.7573155444923465 1 0 0 +93 1 2 2.1 -9.458410238013869 7.33682068730624 2.765285098253017 1 0 0 +94 1 3 -1.05 -9.679588290829658 4.45254795692637 1.139053534311218 1 0 0 +95 1 3 -1.05 -9.324195367300185 7.243969020237035 1.140384524236497 1 0 0 +96 1 4 -0.95 -6.806599492258481 6.045221693669681 1.009280187757005 1 0 0 +97 1 3 -1.05 -8.152808576570859 8.038030966821896 3.2389942981918 1 0 0 +98 1 3 -1.05 -9.572645830808028 5.862365851389207 3.2407504502190747 1 0 0 +99 1 3 -1.05 -10.723283583484175 8.18991092687909 3.0491638601374564 1 0 0 +100 1 5 0.425 -7.315136856531225 5.166118893998583 1.1480131499026296 1 0 0 +101 1 1 1.575 -7.703976890906669 7.476521396452124 -0.0004869418693242977 1 0 0 +111 1 1 1.575 -10.312141649453219 2.9935784879242497 -0.0004884588124696165 1 0 0 +121 1 1 1.575 -2.5596879766050353 1.4892994022197463 0.0004876271542961774 1 0 0 +123 1 2 2.1 -1.7466035808200573 2.8538558037971953 2.7652965023822897 1 0 0 +124 1 3 -1.05 -1.9677540888021028 -0.03034837344207375 1.1390396821506403 1 0 0 +126 1 4 -0.95 -4.25481364789182 1.5622718466590193 1.009271365196117 1 0 0 +127 1 3 -1.05 -5.6009918988674805 3.55513912460707 3.2389905823258385 1 0 0 +128 1 3 -1.05 -1.860808583710753 1.3795779024677586 3.240744602344904 1 0 0 +129 1 3 -1.05 -3.0114343038263804 3.7069717528642663 3.04917999216428 1 0 0 +130 1 5 0.425 -4.763279165866927 0.6832035674608612 1.1479273728367207 1 0 0 +132 1 2 2.1 -4.378245338999152 4.38170538944145 2.7573185647135965 1 0 0 +133 1 2 2.1 -4.298430131568423 7.336829694841267 2.765282372169972 1 0 0 +134 1 3 -1.05 -4.519585788114593 4.452546370179327 1.1390572508955117 1 0 0 +135 1 3 -1.05 -4.164196247857843 7.243969567402647 1.1403816035253787 1 0 0 +137 1 3 -1.05 -2.992784551459188 8.03804507272551 3.238991727054886 1 0 0 +138 1 3 -1.05 -4.412647569640212 5.86234321615736 3.240749786939869 1 0 0 +139 1 3 -1.05 -5.563270268907923 8.189902706625428 3.049165190799913 1 0 0 +141 1 1 1.575 -2.543969087429206 7.476517985115045 -0.0004862871680106906 1 0 0 +151 1 1 1.575 -5.1521487769677075 2.9935806762264434 -0.0004901006836668387 1 0 0 +522 1 2 2.1 -12.14640321562067 -0.10127600189234087 2.7573120460055964 1 1 0 +562 1 2 2.1 -6.986398207724864 -0.1012687687102094 2.757308016998312 1 1 0 +602 1 2 2.1 -1.826404614623005 -0.10127704899093004 2.757311825180798 1 1 0 +706 1 4 -0.95 -12.865796022624288 7.221714492772325 8.180601207822123 1 0 0 +707 1 3 -1.05 -11.519585625908963 5.228867443825511 5.950880624420204 1 0 0 +712 1 2 2.1 -12.74236927286661 4.402289337375663 6.432558526054466 1 0 0 +713 1 2 2.1 -12.822179576740067 1.447177436755961 6.424591364431221 1 0 0 +714 1 3 -1.05 -12.601019912922663 4.331444765726772 8.050823657348074 1 0 0 +715 1 3 -1.05 -12.9564089613341 1.5400239285377246 8.049490036152141 1 0 0 +718 1 3 -1.05 -12.707959347486435 2.9216270213267173 5.949122287867622 1 0 0 +719 1 3 -1.05 -11.557321491073434 0.5940835324113181 6.140706214927789 1 0 0 +742 1 2 2.1 -10.190553470512224 -0.08060471526624369 6.432549047518183 1 0 0 +743 1 2 2.1 -10.214006128678415 5.930145239857023 6.424577571546896 1 0 0 +744 1 3 -1.05 -9.992850905501367 8.814341090685996 8.050837610229921 1 0 0 +745 1 3 -1.05 -10.348222732989003 6.022917560970665 8.049466320772085 1 0 0 +746 1 4 -0.95 -7.705793610382077 7.221713363185231 8.180594909971527 1 0 0 +747 1 3 -1.05 -6.35961233585525 5.228852016801575 5.9508831678014555 1 0 0 +748 1 3 -1.05 -10.099798574650077 7.404404225630994 5.9491289200407405 1 0 0 +749 1 3 -1.05 -8.949159917306673 5.077015823046679 6.140691533239114 1 0 0 +750 1 5 0.425 -7.197339347246486 8.100783891909586 8.041891733507144 1 0 0 +752 1 2 2.1 -7.582363175185557 4.40229803595107 6.4325545097206405 1 0 0 +753 1 2 2.1 -7.66218773373044 1.447166595599981 6.424584171396804 1 0 0 +754 1 3 -1.05 -7.441015439936198 4.33144478045222 8.050813764214633 1 0 0 +755 1 3 -1.05 -7.796407081280542 1.5400232594796925 8.04948484594699 1 0 0 +756 1 4 -0.95 -10.314003547549689 2.7387701229844446 8.180589327508356 1 0 0 +757 1 3 -1.05 -8.96779392146795 0.7459625241507837 5.950878464150257 1 0 0 +758 1 3 -1.05 -7.547955743292837 2.9216319108547033 5.949120478977855 1 0 0 +759 1 3 -1.05 -6.3973326315710946 0.5940898261857264 6.140707747743219 1 0 0 +760 1 5 0.425 -9.805482010992158 3.617879643362997 8.041844519342556 1 0 0 +782 1 2 2.1 -5.03053752216915 -0.08060905658925677 6.432546163227055 1 0 0 +783 1 2 2.1 -5.053985551934414 5.930137706277755 6.424580953091224 1 0 0 +784 1 3 -1.05 -4.832853756870046 8.814342658293356 8.050834914156995 1 0 0 +785 1 3 -1.05 -5.188222049286011 6.022917177987889 8.049469621886916 1 0 0 +786 1 4 -0.95 -2.54579593414841 7.221714309210501 8.180601184681164 1 0 0 +788 1 3 -1.05 -4.939797262145818 7.404425893631185 5.949129853518169 1 0 0 +789 1 3 -1.05 -3.7891712049732114 5.0770228189984365 6.140690056642459 1 0 0 +790 1 5 0.425 -2.0373227716303397 8.10078202006681 8.041919069850836 1 0 0 +792 1 2 2.1 -2.4223707917632114 4.4022905679840285 6.432558910582037 1 0 0 +793 1 2 2.1 -2.502180902736985 1.4471777819542027 6.424591034963024 1 0 0 +794 1 3 -1.05 -2.281019735917397 4.331444825132113 8.05082378781694 1 0 0 +795 1 3 -1.05 -2.636408851343842 1.5400238125742547 8.049489411652035 1 0 0 +796 1 4 -0.95 -5.15399710310596 2.7387798895711164 8.180592034792975 1 0 0 +797 1 3 -1.05 -3.8078161189370086 0.7459504928387659 5.950878669052271 1 0 0 +798 1 3 -1.05 -2.3879594652644123 2.921624344781165 5.949122369199204 1 0 0 +800 1 5 0.425 -4.645471004162632 3.6178812975920884 8.04188765083781 1 0 0 +902 1 2 2.1 -10.13421204796398 8.885266130047459 6.432562263168402 1 0 0 +942 1 2 2.1 -4.974195624506329 8.885262572218696 6.432559619577779 1 0 0 +1224 1 3 -1.05 -10.049182067561132 -0.1514710749753796 8.050819995602664 1 1 0 +1264 1 3 -1.05 -4.889184949315168 -0.15146950774747125 8.050816947112386 1 1 0 +1 1 1 1.575 2.6003042619820214 1.489301985987158 0.00048617890439572875 0 0 0 +3 1 2 2.1 3.413388030780098 2.853846993110462 2.7652894411413254 0 0 0 +4 1 3 -1.05 3.192250473216461 -0.030348573470597273 1.1390305483599548 0 0 0 +5 1 3 -1.05 3.5476195187832538 2.7610747149761714 1.1404022330734858 0 0 0 +6 1 4 -0.95 0.9051929855174699 1.5622817529618267 1.0092737393651063 0 0 0 +7 1 3 -1.05 -0.44101638859063463 3.5551258758509157 3.238990910738922 0 0 0 +8 1 3 -1.05 3.2991948449339965 1.3795809791892317 3.240742744153204 0 0 0 +9 1 3 -1.05 2.1485570809573353 3.706976696393621 3.0491817246607322 0 0 0 +10 1 5 0.425 0.39673058856233645 0.6832052188137645 1.1479686487541496 0 0 0 +11 1 1 1.575 5.208475641812152 5.972246199066358 0.0004892910943752327 0 0 0 +12 1 2 2.1 0.7817706041936265 4.38170355408236 2.7573153336218788 0 0 0 +13 1 2 2.1 0.8615899292224434 7.336820998825839 2.7652848366160274 0 0 0 +14 1 3 -1.05 0.6404116649888252 4.452548002411522 1.1390536212036224 0 0 0 +15 1 3 -1.05 0.9958046216279932 7.243969023731864 1.1403840581284594 0 0 0 +16 1 4 -0.95 3.513400407792714 6.045221555334809 1.0092802794076725 0 0 0 +17 1 3 -1.05 2.1671922380352218 8.038031393312668 3.238994437034231 0 0 0 +18 1 3 -1.05 0.7473539186626681 5.862364303969713 3.2407507095117243 0 0 0 +19 1 3 -1.05 -0.40328409120112596 8.189911245998463 3.049163882753348 0 0 0 +20 1 5 0.425 3.004863256879574 5.166119171117636 1.148013285968382 0 0 0 +21 1 1 1.575 2.6160231450750047 7.476521308095869 -0.0004868964845172741 0 0 0 +31 1 1 1.575 0.007858486069929782 2.9935784838606985 -0.0004886229058236324 0 0 0 +41 1 1 1.575 7.7603119800836495 1.4892994847808687 0.0004876409956668937 0 0 0 +44 1 3 -1.05 8.352245958178369 -0.03034852708280411 1.1390398478533665 0 0 0 +46 1 4 -0.95 6.065186680101519 1.5622726468860186 1.0092713469534331 0 0 0 +47 1 3 -1.05 4.719006945859089 3.5551385256659387 3.2389905613454264 0 0 0 +49 1 3 -1.05 7.308566510413744 3.7069713740300188 3.0491800116188568 0 0 0 +50 1 5 0.425 5.55672029157318 0.6832027274139385 1.1479273774212633 0 0 0 +52 1 2 2.1 5.941754691612481 4.381705907161461 2.7573185281719876 0 0 0 +53 1 2 2.1 6.021569156148551 7.336829473327171 2.765282260596237 0 0 0 +54 1 3 -1.05 5.800414227629432 4.452546389521338 1.1390571190245424 0 0 0 +55 1 3 -1.05 6.155803761978959 7.243969506923385 1.1403815022420147 0 0 0 +57 1 3 -1.05 7.327216945332573 8.038046038385499 3.2389918433149454 0 0 0 +58 1 3 -1.05 5.90735237093768 5.8623431966956865 3.2407497213706336 0 0 0 +59 1 3 -1.05 4.756730041223639 8.189902512772619 3.0491652979454305 0 0 0 +61 1 1 1.575 7.776030915957783 7.4765179856259465 -0.00048630439592045605 0 0 0 +71 1 1 1.575 5.1678511824652595 2.993580880857408 -0.0004901999814084235 0 0 0 +125 1 3 -1.05 -1.6123821854260463 2.761075314653997 1.1404070154366295 1 0 0 +131 1 1 1.575 0.04848294209673121 5.972242935779885 0.000490037179456948 1 0 0 +136 1 4 -0.95 -1.6466013343857568 6.0452237602823296 1.009286692899492 1 0 0 +140 1 5 0.425 -2.1551197559159263 5.166116856956847 1.1480434751617512 1 0 0 +482 1 2 2.1 3.333600286305689 -0.10126833528058299 2.7573081542690936 0 1 0 +662 1 2 2.1 0.1294481221970365 -0.0806049883627118 6.432548631586574 0 0 0 +663 1 2 2.1 0.10599334680137673 5.930145648028347 6.424577282515786 0 0 0 +664 1 3 -1.05 0.3271491025311537 8.814340912836013 8.050837562340648 0 0 0 +665 1 3 -1.05 -0.02822261760979572 6.022917492990221 8.049465873202388 0 0 0 +666 1 4 -0.95 2.6142064843337565 7.221713579662975 8.180594739766134 0 0 0 +667 1 3 -1.05 3.9603863448931165 5.228851139494434 5.950883261310734 0 0 0 +668 1 3 -1.05 0.22020140066630312 7.404402962508492 5.9491292107555385 0 0 0 +669 1 3 -1.05 1.370839907147385 5.0770158086882695 6.140691527571985 0 0 0 +670 1 5 0.425 3.122660489762424 8.10078354117201 8.041891815867482 0 0 0 +672 1 2 2.1 2.7376378509887616 4.402297453839999 6.432554269024626 0 0 0 +673 1 2 2.1 2.657814143905327 1.4471664246497618 6.4245845586209835 0 0 0 +674 1 3 -1.05 2.8789843747672226 4.331444892670223 8.050813478586486 0 0 0 +675 1 3 -1.05 2.5235929276811255 1.5400231451238362 8.049485296604866 0 0 0 +676 1 4 -0.95 0.005996469612352229 2.7387702634425644 8.180589156812536 0 0 0 +677 1 3 -1.05 1.35220333360148 0.7459606544277797 5.9508784991572234 0 0 0 +678 1 3 -1.05 2.772044403479459 2.921633738753382 5.949120410621978 0 0 0 +679 1 3 -1.05 3.9226663496817054 0.5940905195502779 6.140707539547966 0 0 0 +680 1 5 0.425 0.5145179216393423 3.6178796125064707 8.041844457004787 0 0 0 +702 1 2 2.1 5.2894644486370055 -0.08060750115534532 6.432546281853535 0 0 0 +703 1 2 2.1 5.266015505409589 5.930137771849527 6.424580792396204 0 0 0 +704 1 3 -1.05 5.487146353425208 8.814342589672009 8.050834969489033 0 0 0 +705 1 3 -1.05 5.131778084715114 6.022917199990019 8.049469586914329 0 0 0 +708 1 3 -1.05 5.380202829540677 7.404425443770609 5.949129963862305 0 0 0 +709 1 3 -1.05 6.530827312385206 5.077023734536393 6.14069010936865 0 0 0 +710 1 5 0.425 -12.357322833708851 8.100781892429946 8.041919043812685 1 0 0 +716 1 4 -0.95 5.166002670346272 2.7387795855326154 8.180592061839635 0 0 0 +717 1 3 -1.05 6.512180758213354 0.7459485736595788 5.95087865003107 0 0 0 +720 1 5 0.425 5.674529320524975 3.6178817424015435 8.041887704595718 0 0 0 +787 1 3 -1.05 -1.1995843894029825 5.228868218664132 5.950880728607876 1 0 0 +799 1 3 -1.05 -1.2373222098897543 0.594084068338713 6.140706246118169 1 0 0 +822 1 2 2.1 0.18578805441223878 8.885266915444351 6.432562197797376 0 0 0 +862 1 2 2.1 5.345804278048195 8.885262760376076 6.43255959737005 0 0 0 +1144 1 3 -1.05 0.2708179763475371 -0.15147101591706758 8.050819426100988 0 1 0 +1184 1 3 -1.05 5.430815094845618 -0.1514693876244877 8.050816796018031 0 1 0 +42 1 2 2.1 -12.09006260584677 8.864589177393615 2.7573256224033216 1 0 0 +82 1 2 2.1 -6.930057050782033 8.864597863376343 2.75732164447156 1 0 0 +122 1 2 2.1 -1.7700616265708433 8.864589076582348 2.757325473341277 1 0 0 +203 1 2 2.1 -12.010265577762329 11.819715092153334 2.765291360502074 1 0 0 +205 1 3 -1.05 -11.87604343181911 11.726896004685383 1.1403924325820025 1 0 0 +208 1 3 -1.05 -12.124473345038734 10.345319342352141 3.2407384604436444 1 0 0 +211 1 1 1.575 -10.215182621282619 14.938036557984727 0.00048802927475399827 1 0 0 +216 1 4 -0.95 -11.910303760846821 15.011010860547525 1.009271885162475 1 0 0 +220 1 5 0.425 8.221226954671451 14.131915169973812 1.1479074717195452 0 0 0 +241 1 1 1.575 -7.6633658312451125 10.455150665603007 0.00048674450156838134 1 0 0 +243 1 2 2.1 -6.850274802226975 11.819704709836884 2.765284103462397 1 0 0 +244 1 3 -1.05 -7.071418315464653 8.935464760159874 1.1390470826570223 1 0 0 +245 1 3 -1.05 -6.716041717351411 11.726895262208341 1.1403871825276504 1 0 0 +246 1 4 -0.95 -9.358442661161195 10.528143597063906 1.0092939108167762 1 0 0 +247 1 3 -1.05 -10.704668560055994 12.520955558501814 3.238986452455382 1 0 0 +248 1 3 -1.05 -6.964469919678031 10.345323343327664 3.240736447098582 1 0 0 +249 1 3 -1.05 -8.115109303492375 12.672804410356928 3.0491772060606532 1 0 0 +250 1 5 0.425 -9.86693405976031 9.649084784979703 1.1481844532688399 1 0 0 +251 1 1 1.575 -5.055189905145113 14.938039766588904 0.00048748737759041205 1 0 0 +252 1 2 2.1 -9.481895140515539 13.347470616334537 2.7573054912819455 1 0 0 +253 1 2 2.1 -9.402089479039432 16.30259246114154 2.7652923834422634 1 0 0 +254 1 3 -1.05 -9.623250645681043 13.418384253474247 1.1390345417105667 1 0 0 +255 1 3 -1.05 -9.267873053886584 16.209803149203925 1.1404029722314721 1 0 0 +256 1 4 -0.95 -6.750301966919627 15.011008793832236 1.0092655645710042 1 0 0 +257 1 3 -1.05 -8.096502014882379 17.003855189336587 3.2389947631306786 1 0 0 +258 1 3 -1.05 -9.516307273099796 14.828301501434499 3.2407492682947225 1 0 0 +259 1 3 -1.05 -10.666945431166095 17.155719681097477 3.049175296686906 1 0 0 +260 1 5 0.425 -7.258790173497739 14.131917299137772 1.1478771519031028 1 0 0 +261 1 1 1.575 -7.647647928463388 16.442332287146424 -0.000488821392487182 1 0 0 +271 1 1 1.575 -10.255800064478802 11.959390414342575 -0.0004879826669004217 1 0 0 +281 1 1 1.575 -2.5033581396528186 10.455148150790972 0.0004880508656999183 1 0 0 +283 1 2 2.1 -1.6902660097883206 11.819714042088183 2.765291463935222 1 0 0 +284 1 3 -1.05 -1.9114228701738583 8.935464925204077 1.1390564976711524 1 0 0 +286 1 4 -0.95 -4.198449098102025 10.528133983598376 1.0092915759019423 1 0 0 +287 1 3 -1.05 -5.544642042234459 12.520970094327684 3.238986094778216 1 0 0 +288 1 3 -1.05 -1.8044733565556257 10.345320519191759 3.240738331572988 1 0 0 +289 1 3 -1.05 -2.9550994549008944 12.672798772092221 3.049175605830589 1 0 0 +290 1 5 0.425 -4.706943981189049 9.649082683942861 1.1481432534485005 1 0 0 +292 1 2 2.1 -4.321912545284045 13.347472426595289 2.7573087615778036 1 0 0 +293 1 2 2.1 -4.242109237221538 16.302601544499094 2.765289869034204 1 0 0 +294 1 3 -1.05 -4.463248142025066 13.418382607713053 1.139038490940214 1 0 0 +295 1 3 -1.05 -4.107873920942626 16.209803614349052 1.140400471186064 1 0 0 +297 1 3 -1.05 -2.9364789165855 17.003868750171616 3.2389922567955534 1 0 0 +298 1 3 -1.05 -4.356308934359183 14.828279979627037 3.240748540873943 1 0 0 +299 1 3 -1.05 -5.506931509883287 17.155711082805635 3.049176629135548 1 0 0 +301 1 1 1.575 -2.487640147269909 16.442328816418733 -0.0004883367723138576 1 0 0 +311 1 1 1.575 -5.095807262339934 11.959392592244821 -0.0004895582360084916 1 0 0 +866 1 4 -0.95 -12.809479347924743 16.18753152254509 8.180603331692547 1 0 0 +867 1 3 -1.05 -11.463275683185296 14.194699747323508 5.950876300797919 1 0 0 +872 1 2 2.1 -12.686044332292026 13.368099433193311 6.432547920762799 1 0 0 +873 1 2 2.1 -12.765838937433683 10.41299358974631 6.424592111086573 1 0 0 +874 1 3 -1.05 -12.544682823574899 13.297270345420436 8.050815957208696 1 0 0 +875 1 3 -1.05 -12.900069677630333 10.5058408528262 8.049494880803467 1 0 0 +878 1 3 -1.05 -12.651628832221212 11.887467867095268 5.9491319671647975 1 0 0 +879 1 3 -1.05 -11.500988895646206 9.559912285205048 6.140702884052089 1 0 0 +903 1 2 2.1 -10.15768664396984 14.895937931749142 6.4245820529389 1 0 0 +905 1 3 -1.05 -10.29190066164717 14.988753381285374 8.049475307293187 1 0 0 +906 1 4 -0.95 -7.649476933430761 16.18753061890442 8.180596856550588 1 0 0 +907 1 3 -1.05 -6.303303846872613 14.194683336474714 5.950878682998182 1 0 0 +908 1 3 -1.05 -10.043457772052527 16.370291645323054 5.949120441329194 1 0 0 +909 1 3 -1.05 -8.892821020091677 14.04282418271502 6.140702337720942 1 0 0 +910 1 5 0.425 -7.140987432429453 17.0666357882375 8.041945898966334 1 0 0 +912 1 2 2.1 -7.526036934568197 13.368107272741312 6.4325434453563695 1 0 0 +913 1 2 2.1 -7.605845200775825 10.412982355545267 6.424585246251738 1 0 0 +914 1 3 -1.05 -7.384678562846151 13.297270278808188 8.05080567732344 1 0 0 +915 1 3 -1.05 -7.740067845155377 10.505840284961845 8.049490055106476 1 0 0 +916 1 4 -0.95 -10.257679256880722 11.704569167331858 8.180573427892023 1 0 0 +917 1 3 -1.05 -8.911455963414486 9.711773926551299 5.950884469289509 1 0 0 +918 1 3 -1.05 -7.491625174558855 11.887475216511863 5.949130124537872 1 0 0 +919 1 3 -1.05 -6.341000561150384 9.559918847426733 6.140704372264844 1 0 0 +920 1 5 0.425 -9.749158350506987 12.583644683468911 8.041657698866539 1 0 0 +943 1 2 2.1 -4.997664858400203 14.895930244835991 6.424585607692931 1 0 0 +945 1 3 -1.05 -5.131900069757357 14.98875297667713 8.049478722615055 1 0 0 +946 1 4 -0.95 -2.4894793258925247 16.187531494753113 8.18060331455739 1 0 0 +948 1 3 -1.05 -4.883456385777334 16.37031336364964 5.94912114642281 1 0 0 +949 1 3 -1.05 -3.73283340764449 14.042831878604474 6.140700750137892 1 0 0 +950 1 5 0.425 -1.980970887878998 17.06663388813786 8.041972936030264 1 0 0 +952 1 2 2.1 -2.366044208847562 13.368099483410205 6.432548100519332 1 0 0 +953 1 2 2.1 -2.4458390869474993 10.41299379338496 6.424592232856112 1 0 0 +954 1 3 -1.05 -2.2246828141337502 13.297270286553317 8.050815880203343 1 0 0 +955 1 3 -1.05 -2.580069543536629 10.505840925682026 8.04949477487744 1 0 0 +956 1 4 -0.95 -5.097672768092682 11.704578991964201 8.180576300900766 1 0 0 +957 1 3 -1.05 -3.7514781712957763 9.711761903734494 5.950884468909207 1 0 0 +958 1 3 -1.05 -2.331628855394513 11.887467661981258 5.949131825798181 1 0 0 +960 1 5 0.425 -4.589147136714461 12.583646517910942 8.04170102397289 1 0 0 +2 1 2 2.1 3.3899422731256763 8.864597132006875 2.7573215253057963 0 0 0 +161 1 1 1.575 2.6566341651466274 10.455150667308867 0.00048679133445439504 0 0 0 +163 1 2 2.1 3.469725611191784 11.819703973175962 2.7652842672918947 0 0 0 +164 1 3 -1.05 3.248581755192575 8.935464749145556 1.139046873812159 0 0 0 +165 1 3 -1.05 3.603958382521821 11.726895331931285 1.1403873843045993 0 0 0 +166 1 4 -0.95 0.9615570622632923 10.528143207441804 1.009293869122109 0 0 0 +167 1 3 -1.05 -0.38466753745755256 12.520956284187964 3.23898646303282 0 0 0 +168 1 3 -1.05 3.3555302887687066 10.345324712237673 3.240736497944564 0 0 0 +169 1 3 -1.05 2.2048898258862977 12.672804867739217 3.0491771504206753 0 0 0 +170 1 5 0.425 0.4530661645712417 9.649085132213575 1.1481844303253137 0 0 0 +171 1 1 1.575 5.26481011625984 14.93803969584685 0.00048748398004327953 0 0 0 +172 1 2 2.1 0.8381050018951335 13.34746956355098 2.7573056112375216 0 0 0 +173 1 2 2.1 0.917912298353329 16.302592791352506 2.7652928068938305 0 0 0 +174 1 3 -1.05 0.6967492081717079 13.418384331397867 1.139034719167146 0 0 0 +175 1 3 -1.05 1.0521268357949296 16.209803156886135 1.140403453608636 0 0 0 +176 1 4 -0.95 3.5696981167895174 15.011008782764922 1.0092654803188346 0 0 0 +177 1 3 -1.05 2.2234949075541905 17.003853295689932 3.238994790958916 0 0 0 +178 1 3 -1.05 0.8036927614304492 14.828302477588569 3.24074919764605 0 0 0 +179 1 3 -1.05 -0.346945556400458 17.155719849990422 3.049175316321957 0 0 0 +180 1 5 0.425 3.0612098947390933 14.131917293649405 1.1478771488772814 0 0 0 +181 1 1 1.575 2.672352132552927 16.44233222954824 -0.00048893065522293 0 0 0 +191 1 1 1.575 0.06419990661849084 11.959390323353912 -0.00048797842278069936 0 0 0 +201 1 1 1.575 7.816641875063663 10.455148129073955 0.00048818953626117434 0 0 0 +204 1 3 -1.05 8.408577227951085 8.935464962316985 1.1390566838791205 0 0 0 +206 1 4 -0.95 6.121550861150677 10.528133978087624 1.0092915549395602 0 0 0 +207 1 3 -1.05 4.775356948747724 12.520969520585183 3.2389861172974115 0 0 0 +209 1 3 -1.05 7.364900489893909 12.672798839171666 3.0491755919080212 0 0 0 +210 1 5 0.425 5.61305603153591 9.649082778114593 1.1481433153431642 0 0 0 +212 1 2 2.1 5.998088138826827 13.347473093028178 2.757308731405036 0 0 0 +213 1 2 2.1 6.077891819286037 16.30260193787044 2.765289869913314 0 0 0 +214 1 3 -1.05 5.856751818752759 13.418382710971027 1.1390384696391855 0 0 0 +215 1 3 -1.05 6.212125957670043 16.209803423133504 1.1404002385609324 0 0 0 +217 1 3 -1.05 7.383520043027556 17.003868000384625 3.2389922772992907 0 0 0 +218 1 3 -1.05 5.963690997777473 14.828279007765143 3.2407484945718856 0 0 0 +219 1 3 -1.05 4.81306751453938 17.15571169886196 3.049176642461564 0 0 0 +221 1 1 1.575 7.832359959333601 16.442328863944606 -0.00048820826442330656 0 0 0 +231 1 1 1.575 5.224192755472295 11.9593926983067 -0.0004895452984730042 0 0 0 +285 1 3 -1.05 -1.5560434921058235 11.7268960105203 1.1403925019894405 1 0 0 +291 1 1 1.575 0.10481734176789637 14.938036477244676 0.0004878663631728841 1 0 0 +296 1 4 -0.95 -1.5903037992881508 15.011010762815896 1.0092720957491625 1 0 0 +300 1 5 0.425 -2.098773053271172 14.131915286048635 1.1479073358599035 1 0 0 +823 1 2 2.1 0.16231342663308013 14.895938457827786 6.424582090151786 0 0 0 +825 1 3 -1.05 0.028099381747342278 14.988753389323616 8.049475282091281 0 0 0 +826 1 4 -0.95 2.6705230911081035 16.187530512616757 8.180596938009801 0 0 0 +827 1 3 -1.05 4.01669641754593 14.194683450538559 5.950878753854479 0 0 0 +828 1 3 -1.05 0.27654220878196156 16.37029094078053 5.94912022193599 0 0 0 +829 1 3 -1.05 1.4271792302815047 14.04282401595217 6.140702235142053 0 0 0 +830 1 5 0.425 3.1790125843134582 17.06663589040934 8.04194593753139 0 0 0 +832 1 2 2.1 2.79396271801315 13.368107134362024 6.432543570568198 0 0 0 +833 1 2 2.1 2.714155029782006 10.41298252966632 6.424585299216295 0 0 0 +834 1 3 -1.05 2.9353214295031798 13.297270348704007 8.050805811867614 0 0 0 +835 1 3 -1.05 2.5799322816150294 10.50584016157514 8.049490292842309 0 0 0 +836 1 4 -0.95 0.06232056055442037 11.704568865571552 8.180573482122442 0 0 0 +837 1 3 -1.05 1.4085436097406188 9.711773557309051 5.950884536837345 0 0 0 +838 1 3 -1.05 2.8283748897425482 11.88747503498794 5.949130056988739 0 0 0 +839 1 3 -1.05 3.9789992841497615 9.559918964820955 6.140704411314749 0 0 0 +840 1 5 0.425 0.570841912948957 12.58364508171616 8.04165770071049 0 0 0 +863 1 2 2.1 5.322334696359004 14.895930247507533 6.424585536161565 0 0 0 +865 1 3 -1.05 5.18810009801547 14.988752969144539 8.049478754913183 0 0 0 +868 1 3 -1.05 5.4365436852018405 16.370313581914186 5.949121173646114 0 0 0 +869 1 3 -1.05 6.587166884334117 14.04283169075152 6.140700804578795 0 0 0 +870 1 5 0.425 -12.300970922825949 17.06663390893986 8.041972903281911 1 0 0 +876 1 4 -0.95 5.222326990852581 11.704578679828789 8.180576328926842 0 0 0 +877 1 3 -1.05 6.5685219413996165 9.71176198584331 5.950884504654278 0 0 0 +880 1 5 0.425 5.7308529675779845 12.58364688731844 8.041700994215164 0 0 0 +947 1 3 -1.05 -1.14327593789511 14.194699627136107 5.950876109055651 1 0 0 +959 1 3 -1.05 -1.1809884299906663 9.55991198753285 6.140702871950106 1 0 0 Velocities -1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -9 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -10 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -11 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -12 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -13 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -14 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -15 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -16 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -17 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -18 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -19 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -21 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -22 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -23 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -24 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -25 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -26 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -27 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -30 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -31 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -32 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -33 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -34 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -35 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -36 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -37 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -38 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -39 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -40 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -41 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -42 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -43 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -44 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -45 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -46 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -47 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -48 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -49 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -50 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -51 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -52 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -53 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -54 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -55 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -56 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -57 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -58 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -59 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -60 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -61 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -62 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -63 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -64 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -65 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -66 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -67 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -68 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -69 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -70 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -71 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -72 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -73 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -74 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -75 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -76 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -77 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -78 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -79 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -80 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -81 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -82 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -83 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -84 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -85 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -86 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -87 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -88 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -89 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -90 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -91 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -92 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -93 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -94 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -95 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -96 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -97 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -98 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -99 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -100 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -101 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -102 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -103 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -104 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -105 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -106 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -107 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -108 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -109 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -110 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -111 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -112 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -113 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -114 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -115 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -116 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -117 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -118 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -119 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -120 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -121 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -122 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -123 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -124 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -125 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -126 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -127 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -128 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -129 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -130 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -131 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -132 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -133 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -134 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -135 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -136 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -137 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -138 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -139 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -140 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -141 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -142 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -143 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -144 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -145 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -146 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -147 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -148 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -149 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -150 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -151 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -152 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -153 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -154 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -155 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -156 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -157 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -158 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -159 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -160 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -161 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -162 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -163 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -164 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -165 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -166 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -167 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -168 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -169 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -170 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -171 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -172 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -173 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -174 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -175 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -176 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -177 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -178 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -179 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -180 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -181 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -182 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -183 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -184 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -185 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -186 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -187 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -188 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -189 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -190 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -191 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -192 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -193 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -194 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -195 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -196 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -197 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -198 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -199 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -200 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -201 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -202 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -203 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -204 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -205 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -206 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -207 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -208 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -209 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -210 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -211 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -212 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -213 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -214 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -215 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -216 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -217 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -218 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -219 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -220 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -221 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -222 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -223 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -224 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -225 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -226 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -227 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -228 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -229 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -230 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -231 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -232 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -233 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -234 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -235 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -236 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -237 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -238 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -239 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -240 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -241 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -242 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -243 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -244 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -245 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -246 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -247 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -248 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -249 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -250 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -251 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -252 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -253 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -254 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -255 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -256 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -257 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -258 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -259 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -260 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -261 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -262 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -263 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -264 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -265 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -266 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -267 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -268 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -269 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -270 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -271 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -272 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -273 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -274 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -275 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -276 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -277 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -278 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -279 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -280 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -281 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -282 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -283 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -284 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -285 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -286 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -287 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -288 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -289 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -290 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -291 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -292 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -293 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -294 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -295 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -296 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -297 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -298 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -299 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -300 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -301 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -302 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -303 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -304 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -305 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -306 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -307 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -308 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -309 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -310 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -311 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -312 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -313 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -314 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -315 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -316 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -317 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -318 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -319 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -320 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -321 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -322 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -323 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -324 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -325 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -326 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -327 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -328 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -329 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -330 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -331 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -332 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -333 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -334 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -335 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -336 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -337 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -338 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -339 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -340 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -341 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -342 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -343 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -344 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -345 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -346 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -347 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -348 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -349 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -350 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -351 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -352 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -353 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -354 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -355 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -356 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -357 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -358 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -359 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -360 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -361 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -362 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -363 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -364 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -365 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -366 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -367 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -368 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -369 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -370 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -371 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -372 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -373 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -374 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -375 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -376 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -377 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -378 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -379 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -380 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -381 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -382 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -383 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -384 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -385 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -386 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -387 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -388 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -389 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -390 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -391 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -392 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -393 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -394 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -395 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -396 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -397 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -398 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -399 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -400 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -401 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -402 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -403 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -404 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -405 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -406 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -407 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -408 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -409 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -410 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -411 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -412 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -413 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -414 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -415 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -416 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -417 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -418 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -419 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -420 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -421 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -422 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -423 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -424 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -425 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -426 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -427 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -428 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -429 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -430 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -431 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -432 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -433 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -434 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -435 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -436 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -437 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -438 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -439 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -440 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -441 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -442 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -443 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -444 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -445 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -446 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -447 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -448 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -449 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -450 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -451 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -452 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -453 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -454 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -455 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -456 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -457 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -458 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -459 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -460 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -461 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -462 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -463 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -464 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -465 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -466 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -467 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -468 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -469 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -470 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -471 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -472 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -473 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -474 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -475 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -476 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -477 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -478 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -479 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -480 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -481 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -482 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -483 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -484 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -485 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -486 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -487 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -488 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -489 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -490 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -491 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -492 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -493 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -494 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -495 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -496 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -497 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -498 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -499 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -500 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -501 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -502 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -503 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -504 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -505 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -506 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -507 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -508 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -509 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -510 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -511 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -512 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -513 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -514 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -515 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -516 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -517 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -518 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -519 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -520 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -521 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -522 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -523 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -524 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -525 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -526 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -527 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -528 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -529 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -530 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -531 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -532 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -533 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -534 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -535 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -536 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -537 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -538 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -539 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -540 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -541 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -542 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -543 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -544 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -545 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -546 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -547 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -548 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -549 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -550 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -551 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -552 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -553 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -554 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -555 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -556 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -557 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -558 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -559 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -560 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -561 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -562 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -563 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -564 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -565 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -566 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -567 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -568 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -569 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -570 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -571 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -572 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -573 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -574 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -575 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -576 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -577 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -578 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -579 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -580 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -581 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -582 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -583 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -584 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -585 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -586 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -587 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -588 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -589 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -590 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -591 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -592 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -593 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -594 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -595 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -596 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -597 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -598 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -599 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -600 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -601 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -602 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -603 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -604 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -605 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -606 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -607 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -608 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -609 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -610 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -611 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -612 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -613 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -614 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -615 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -616 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -617 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -618 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -619 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -620 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -621 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -622 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -623 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -624 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -625 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -626 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -627 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -628 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -629 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -630 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -631 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -632 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -633 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -634 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -635 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -636 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -637 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -638 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -639 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -640 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -641 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -642 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -643 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -644 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -645 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -646 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -647 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -648 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -649 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -650 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -651 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -652 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -653 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -654 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -655 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -656 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -657 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -658 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -659 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -660 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -661 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -662 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -663 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -664 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -665 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -666 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -667 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -668 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -669 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -670 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -671 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -672 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -673 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -674 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -675 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -676 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -677 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -678 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -679 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -680 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -681 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -682 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -683 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -684 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -685 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -686 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -687 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -688 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -689 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -690 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -691 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -692 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -693 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -694 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -695 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -696 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -697 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -698 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -699 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -700 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -701 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -702 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -703 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -704 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -705 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -706 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -707 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -708 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -709 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -710 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -711 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -712 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -713 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -714 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -715 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -716 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -717 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -718 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -719 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -720 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -721 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -722 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -723 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -724 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -725 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -726 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -727 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -728 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -729 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -730 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -731 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -732 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -733 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -734 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -735 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -736 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -737 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -738 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -739 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -740 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -741 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -742 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -743 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -744 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -745 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -746 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -747 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -748 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -749 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -750 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -751 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -752 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -753 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -754 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -755 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -756 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -757 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -758 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -759 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -760 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -761 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -762 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -763 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -764 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -765 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -766 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -767 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -768 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -769 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -770 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -771 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -772 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -773 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -774 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -775 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -776 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -777 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -778 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -779 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -780 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -781 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -782 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -783 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -784 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -785 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -786 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -787 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -788 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -789 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -790 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -791 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -792 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -793 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -794 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 -797 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -798 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 -801 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -802 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 -805 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -806 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 -809 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -810 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 -813 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -814 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 -817 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -818 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 -821 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -822 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 -825 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -826 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 -829 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -830 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 -833 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -834 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 -837 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -838 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 -841 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -842 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 -845 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -846 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 -849 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -850 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 -853 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -854 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 -857 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -858 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 -861 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -862 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 -865 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -866 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 -869 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -870 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 -873 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -874 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 -877 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -878 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 -881 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -882 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 -885 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -886 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 -889 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -890 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 -893 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -894 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 -897 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -898 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 -901 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -902 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 -905 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -906 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 -909 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -910 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 -913 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -914 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 -917 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -918 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 -921 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -922 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 -925 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -926 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 -929 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -930 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 -933 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -934 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 -937 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -938 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 -941 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -942 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 -945 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -946 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 -949 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -950 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 -953 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -954 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 -957 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -958 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 -961 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -962 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 -965 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -966 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 -969 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -970 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 -973 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -974 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 -977 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -978 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 -981 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -982 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 -985 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -986 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 -989 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -990 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 -993 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -994 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 -997 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -998 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 -1001 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1002 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 -1005 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1006 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 -1009 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1010 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1011 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1012 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1013 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1014 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1015 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1016 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1017 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1018 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1019 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1020 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1021 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1022 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1023 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1024 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1025 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1026 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1027 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1028 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1029 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1030 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1031 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1032 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1033 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1034 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1035 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1036 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1037 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1038 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1039 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1040 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1041 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1042 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1043 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1044 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1045 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1046 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1047 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1048 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1049 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1050 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1051 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1052 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1053 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1054 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1055 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1056 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1057 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1058 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1059 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1060 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1061 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1062 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1063 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1064 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1065 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1066 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1067 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1068 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1069 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1070 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1071 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1072 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1073 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1074 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1075 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1076 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1077 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1078 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1079 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1080 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1081 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1082 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1083 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1084 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1085 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1086 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1087 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1088 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1089 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1090 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1091 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1092 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1093 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1094 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1095 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1096 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1097 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1098 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1099 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1100 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1101 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1102 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1103 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1104 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1105 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1106 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1107 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1108 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1109 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1110 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1111 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1112 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1113 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1114 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1115 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1116 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1117 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1118 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1119 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1120 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1121 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1122 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1123 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1124 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1125 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1126 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1127 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1128 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1129 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1130 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1131 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1132 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1133 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1134 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1135 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1136 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1137 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1138 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1139 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1140 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1141 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1142 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1143 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1144 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1145 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1146 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1147 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1148 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1149 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1150 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1151 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1152 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1153 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1154 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1155 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1156 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1157 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1158 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1159 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1160 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1161 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1162 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1163 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1164 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1165 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1166 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1167 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1168 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1169 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1170 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1171 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1172 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1173 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1174 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1175 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1176 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1177 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1178 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1179 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1180 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1181 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1182 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1183 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1184 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1185 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1186 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1187 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1188 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1189 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1190 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1191 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1192 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1193 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1194 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1195 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1196 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1197 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1198 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1199 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1200 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1201 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1202 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1203 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1204 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1205 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1206 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1207 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1208 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1209 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1210 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1211 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1212 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1213 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1214 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1215 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1216 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1217 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1218 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1219 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1220 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1221 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1222 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1223 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1224 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1225 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1226 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1227 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1228 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1229 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1230 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1231 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1232 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1233 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1234 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1235 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1236 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1237 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1238 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1239 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1240 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1241 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1242 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1243 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1244 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1245 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1246 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1247 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1248 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1249 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1250 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1251 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1252 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1253 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1254 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1255 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1256 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1257 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1258 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1259 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1260 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1261 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1262 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1263 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1264 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1265 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1266 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1267 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1268 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1269 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1270 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1271 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1272 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1273 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1274 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1275 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1276 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1277 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1278 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1279 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -1280 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +264 0 0 0 +304 0 0 0 +386 0 0 0 +387 0 0 0 +392 0 0 0 +393 0 0 0 +394 0 0 0 +395 0 0 0 +398 0 0 0 +399 0 0 0 +422 0 0 0 +423 0 0 0 +425 0 0 0 +426 0 0 0 +427 0 0 0 +428 0 0 0 +429 0 0 0 +430 0 0 0 +432 0 0 0 +433 0 0 0 +434 0 0 0 +435 0 0 0 +436 0 0 0 +437 0 0 0 +438 0 0 0 +439 0 0 0 +440 0 0 0 +462 0 0 0 +463 0 0 0 +465 0 0 0 +468 0 0 0 +469 0 0 0 +470 0 0 0 +476 0 0 0 +477 0 0 0 +480 0 0 0 +842 0 0 0 +882 0 0 0 +1003 0 0 0 +1005 0 0 0 +1008 0 0 0 +1011 0 0 0 +1016 0 0 0 +1020 0 0 0 +1041 0 0 0 +1043 0 0 0 +1044 0 0 0 +1045 0 0 0 +1046 0 0 0 +1047 0 0 0 +1048 0 0 0 +1049 0 0 0 +1050 0 0 0 +1051 0 0 0 +1052 0 0 0 +1053 0 0 0 +1054 0 0 0 +1055 0 0 0 +1056 0 0 0 +1057 0 0 0 +1058 0 0 0 +1059 0 0 0 +1060 0 0 0 +1061 0 0 0 +1071 0 0 0 +1086 0 0 0 +1087 0 0 0 +1092 0 0 0 +1093 0 0 0 +1094 0 0 0 +1095 0 0 0 +1098 0 0 0 +1099 0 0 0 +1111 0 0 0 +184 0 0 0 +224 0 0 0 +342 0 0 0 +343 0 0 0 +345 0 0 0 +346 0 0 0 +347 0 0 0 +348 0 0 0 +349 0 0 0 +350 0 0 0 +352 0 0 0 +353 0 0 0 +354 0 0 0 +355 0 0 0 +356 0 0 0 +357 0 0 0 +358 0 0 0 +359 0 0 0 +360 0 0 0 +382 0 0 0 +383 0 0 0 +385 0 0 0 +388 0 0 0 +389 0 0 0 +390 0 0 0 +396 0 0 0 +397 0 0 0 +400 0 0 0 +466 0 0 0 +467 0 0 0 +472 0 0 0 +473 0 0 0 +474 0 0 0 +475 0 0 0 +478 0 0 0 +479 0 0 0 +802 0 0 0 +922 0 0 0 +961 0 0 0 +963 0 0 0 +964 0 0 0 +965 0 0 0 +966 0 0 0 +967 0 0 0 +968 0 0 0 +969 0 0 0 +970 0 0 0 +971 0 0 0 +972 0 0 0 +973 0 0 0 +974 0 0 0 +975 0 0 0 +976 0 0 0 +977 0 0 0 +978 0 0 0 +979 0 0 0 +980 0 0 0 +981 0 0 0 +991 0 0 0 +1001 0 0 0 +1004 0 0 0 +1006 0 0 0 +1007 0 0 0 +1009 0 0 0 +1010 0 0 0 +1012 0 0 0 +1013 0 0 0 +1014 0 0 0 +1015 0 0 0 +1017 0 0 0 +1018 0 0 0 +1019 0 0 0 +1021 0 0 0 +1031 0 0 0 +1081 0 0 0 +1083 0 0 0 +1084 0 0 0 +1085 0 0 0 +1088 0 0 0 +1089 0 0 0 +1090 0 0 0 +1091 0 0 0 +1096 0 0 0 +1097 0 0 0 +1100 0 0 0 +1101 0 0 0 +424 0 0 0 +464 0 0 0 +546 0 0 0 +547 0 0 0 +552 0 0 0 +553 0 0 0 +554 0 0 0 +555 0 0 0 +558 0 0 0 +559 0 0 0 +582 0 0 0 +583 0 0 0 +585 0 0 0 +586 0 0 0 +587 0 0 0 +588 0 0 0 +589 0 0 0 +590 0 0 0 +592 0 0 0 +593 0 0 0 +594 0 0 0 +595 0 0 0 +596 0 0 0 +597 0 0 0 +598 0 0 0 +599 0 0 0 +600 0 0 0 +622 0 0 0 +623 0 0 0 +625 0 0 0 +628 0 0 0 +629 0 0 0 +630 0 0 0 +636 0 0 0 +637 0 0 0 +640 0 0 0 +1002 0 0 0 +1042 0 0 0 +1163 0 0 0 +1165 0 0 0 +1168 0 0 0 +1171 0 0 0 +1176 0 0 0 +1180 0 0 0 +1201 0 0 0 +1203 0 0 0 +1204 0 0 0 +1205 0 0 0 +1206 0 0 0 +1207 0 0 0 +1208 0 0 0 +1209 0 0 0 +1210 0 0 0 +1211 0 0 0 +1212 0 0 0 +1213 0 0 0 +1214 0 0 0 +1215 0 0 0 +1216 0 0 0 +1217 0 0 0 +1218 0 0 0 +1219 0 0 0 +1220 0 0 0 +1221 0 0 0 +1231 0 0 0 +1246 0 0 0 +1247 0 0 0 +1252 0 0 0 +1253 0 0 0 +1254 0 0 0 +1255 0 0 0 +1258 0 0 0 +1259 0 0 0 +1271 0 0 0 +344 0 0 0 +384 0 0 0 +502 0 0 0 +503 0 0 0 +505 0 0 0 +506 0 0 0 +507 0 0 0 +508 0 0 0 +509 0 0 0 +510 0 0 0 +512 0 0 0 +513 0 0 0 +514 0 0 0 +515 0 0 0 +516 0 0 0 +517 0 0 0 +518 0 0 0 +519 0 0 0 +520 0 0 0 +542 0 0 0 +543 0 0 0 +545 0 0 0 +548 0 0 0 +549 0 0 0 +550 0 0 0 +556 0 0 0 +557 0 0 0 +560 0 0 0 +626 0 0 0 +627 0 0 0 +632 0 0 0 +633 0 0 0 +634 0 0 0 +635 0 0 0 +638 0 0 0 +639 0 0 0 +962 0 0 0 +1082 0 0 0 +1121 0 0 0 +1123 0 0 0 +1124 0 0 0 +1125 0 0 0 +1126 0 0 0 +1127 0 0 0 +1128 0 0 0 +1129 0 0 0 +1130 0 0 0 +1131 0 0 0 +1132 0 0 0 +1133 0 0 0 +1134 0 0 0 +1135 0 0 0 +1136 0 0 0 +1137 0 0 0 +1138 0 0 0 +1139 0 0 0 +1140 0 0 0 +1141 0 0 0 +1151 0 0 0 +1161 0 0 0 +1164 0 0 0 +1166 0 0 0 +1167 0 0 0 +1169 0 0 0 +1170 0 0 0 +1172 0 0 0 +1173 0 0 0 +1174 0 0 0 +1175 0 0 0 +1177 0 0 0 +1178 0 0 0 +1179 0 0 0 +1181 0 0 0 +1191 0 0 0 +1241 0 0 0 +1243 0 0 0 +1244 0 0 0 +1245 0 0 0 +1248 0 0 0 +1249 0 0 0 +1250 0 0 0 +1251 0 0 0 +1256 0 0 0 +1257 0 0 0 +1260 0 0 0 +1261 0 0 0 +66 0 0 0 +67 0 0 0 +72 0 0 0 +73 0 0 0 +74 0 0 0 +75 0 0 0 +78 0 0 0 +79 0 0 0 +102 0 0 0 +103 0 0 0 +105 0 0 0 +106 0 0 0 +107 0 0 0 +108 0 0 0 +109 0 0 0 +110 0 0 0 +112 0 0 0 +113 0 0 0 +114 0 0 0 +115 0 0 0 +116 0 0 0 +117 0 0 0 +118 0 0 0 +119 0 0 0 +120 0 0 0 +142 0 0 0 +143 0 0 0 +145 0 0 0 +148 0 0 0 +149 0 0 0 +150 0 0 0 +156 0 0 0 +157 0 0 0 +160 0 0 0 +584 0 0 0 +624 0 0 0 +683 0 0 0 +685 0 0 0 +688 0 0 0 +691 0 0 0 +696 0 0 0 +700 0 0 0 +721 0 0 0 +723 0 0 0 +724 0 0 0 +725 0 0 0 +726 0 0 0 +727 0 0 0 +728 0 0 0 +729 0 0 0 +730 0 0 0 +731 0 0 0 +732 0 0 0 +733 0 0 0 +734 0 0 0 +735 0 0 0 +736 0 0 0 +737 0 0 0 +738 0 0 0 +739 0 0 0 +740 0 0 0 +741 0 0 0 +751 0 0 0 +766 0 0 0 +767 0 0 0 +772 0 0 0 +773 0 0 0 +774 0 0 0 +775 0 0 0 +778 0 0 0 +779 0 0 0 +791 0 0 0 +1162 0 0 0 +1202 0 0 0 +22 0 0 0 +23 0 0 0 +25 0 0 0 +26 0 0 0 +27 0 0 0 +28 0 0 0 +29 0 0 0 +30 0 0 0 +32 0 0 0 +33 0 0 0 +34 0 0 0 +35 0 0 0 +36 0 0 0 +37 0 0 0 +38 0 0 0 +39 0 0 0 +40 0 0 0 +62 0 0 0 +63 0 0 0 +65 0 0 0 +68 0 0 0 +69 0 0 0 +70 0 0 0 +76 0 0 0 +77 0 0 0 +80 0 0 0 +146 0 0 0 +147 0 0 0 +152 0 0 0 +153 0 0 0 +154 0 0 0 +155 0 0 0 +158 0 0 0 +159 0 0 0 +504 0 0 0 +544 0 0 0 +641 0 0 0 +643 0 0 0 +644 0 0 0 +645 0 0 0 +646 0 0 0 +647 0 0 0 +648 0 0 0 +649 0 0 0 +650 0 0 0 +651 0 0 0 +652 0 0 0 +653 0 0 0 +654 0 0 0 +655 0 0 0 +656 0 0 0 +657 0 0 0 +658 0 0 0 +659 0 0 0 +660 0 0 0 +661 0 0 0 +671 0 0 0 +681 0 0 0 +684 0 0 0 +686 0 0 0 +687 0 0 0 +689 0 0 0 +690 0 0 0 +692 0 0 0 +693 0 0 0 +694 0 0 0 +695 0 0 0 +697 0 0 0 +698 0 0 0 +699 0 0 0 +701 0 0 0 +711 0 0 0 +761 0 0 0 +763 0 0 0 +764 0 0 0 +765 0 0 0 +768 0 0 0 +769 0 0 0 +770 0 0 0 +771 0 0 0 +776 0 0 0 +777 0 0 0 +780 0 0 0 +781 0 0 0 +1122 0 0 0 +1242 0 0 0 +104 0 0 0 +144 0 0 0 +226 0 0 0 +227 0 0 0 +232 0 0 0 +233 0 0 0 +234 0 0 0 +235 0 0 0 +238 0 0 0 +239 0 0 0 +262 0 0 0 +263 0 0 0 +265 0 0 0 +266 0 0 0 +267 0 0 0 +268 0 0 0 +269 0 0 0 +270 0 0 0 +272 0 0 0 +273 0 0 0 +274 0 0 0 +275 0 0 0 +276 0 0 0 +277 0 0 0 +278 0 0 0 +279 0 0 0 +280 0 0 0 +302 0 0 0 +303 0 0 0 +305 0 0 0 +308 0 0 0 +309 0 0 0 +310 0 0 0 +316 0 0 0 +317 0 0 0 +320 0 0 0 +682 0 0 0 +722 0 0 0 +843 0 0 0 +845 0 0 0 +848 0 0 0 +851 0 0 0 +856 0 0 0 +860 0 0 0 +881 0 0 0 +883 0 0 0 +884 0 0 0 +885 0 0 0 +886 0 0 0 +887 0 0 0 +888 0 0 0 +889 0 0 0 +890 0 0 0 +891 0 0 0 +892 0 0 0 +893 0 0 0 +894 0 0 0 +895 0 0 0 +896 0 0 0 +897 0 0 0 +898 0 0 0 +899 0 0 0 +900 0 0 0 +901 0 0 0 +911 0 0 0 +926 0 0 0 +927 0 0 0 +932 0 0 0 +933 0 0 0 +934 0 0 0 +935 0 0 0 +938 0 0 0 +939 0 0 0 +951 0 0 0 +24 0 0 0 +64 0 0 0 +182 0 0 0 +183 0 0 0 +185 0 0 0 +186 0 0 0 +187 0 0 0 +188 0 0 0 +189 0 0 0 +190 0 0 0 +192 0 0 0 +193 0 0 0 +194 0 0 0 +195 0 0 0 +196 0 0 0 +197 0 0 0 +198 0 0 0 +199 0 0 0 +200 0 0 0 +222 0 0 0 +223 0 0 0 +225 0 0 0 +228 0 0 0 +229 0 0 0 +230 0 0 0 +236 0 0 0 +237 0 0 0 +240 0 0 0 +306 0 0 0 +307 0 0 0 +312 0 0 0 +313 0 0 0 +314 0 0 0 +315 0 0 0 +318 0 0 0 +319 0 0 0 +642 0 0 0 +762 0 0 0 +801 0 0 0 +803 0 0 0 +804 0 0 0 +805 0 0 0 +806 0 0 0 +807 0 0 0 +808 0 0 0 +809 0 0 0 +810 0 0 0 +811 0 0 0 +812 0 0 0 +813 0 0 0 +814 0 0 0 +815 0 0 0 +816 0 0 0 +817 0 0 0 +818 0 0 0 +819 0 0 0 +820 0 0 0 +821 0 0 0 +831 0 0 0 +841 0 0 0 +844 0 0 0 +846 0 0 0 +847 0 0 0 +849 0 0 0 +850 0 0 0 +852 0 0 0 +853 0 0 0 +854 0 0 0 +855 0 0 0 +857 0 0 0 +858 0 0 0 +859 0 0 0 +861 0 0 0 +871 0 0 0 +921 0 0 0 +923 0 0 0 +924 0 0 0 +925 0 0 0 +928 0 0 0 +929 0 0 0 +930 0 0 0 +931 0 0 0 +936 0 0 0 +937 0 0 0 +940 0 0 0 +941 0 0 0 +202 0 0 0 +242 0 0 0 +282 0 0 0 +363 0 0 0 +365 0 0 0 +368 0 0 0 +371 0 0 0 +376 0 0 0 +380 0 0 0 +401 0 0 0 +403 0 0 0 +404 0 0 0 +405 0 0 0 +406 0 0 0 +407 0 0 0 +408 0 0 0 +409 0 0 0 +410 0 0 0 +411 0 0 0 +412 0 0 0 +413 0 0 0 +414 0 0 0 +415 0 0 0 +416 0 0 0 +417 0 0 0 +418 0 0 0 +419 0 0 0 +420 0 0 0 +421 0 0 0 +431 0 0 0 +441 0 0 0 +443 0 0 0 +444 0 0 0 +445 0 0 0 +446 0 0 0 +447 0 0 0 +448 0 0 0 +449 0 0 0 +450 0 0 0 +452 0 0 0 +453 0 0 0 +454 0 0 0 +455 0 0 0 +456 0 0 0 +457 0 0 0 +458 0 0 0 +459 0 0 0 +461 0 0 0 +471 0 0 0 +904 0 0 0 +944 0 0 0 +1026 0 0 0 +1027 0 0 0 +1032 0 0 0 +1033 0 0 0 +1034 0 0 0 +1035 0 0 0 +1038 0 0 0 +1039 0 0 0 +1062 0 0 0 +1063 0 0 0 +1065 0 0 0 +1066 0 0 0 +1067 0 0 0 +1068 0 0 0 +1069 0 0 0 +1070 0 0 0 +1072 0 0 0 +1073 0 0 0 +1074 0 0 0 +1075 0 0 0 +1076 0 0 0 +1077 0 0 0 +1078 0 0 0 +1079 0 0 0 +1080 0 0 0 +1102 0 0 0 +1103 0 0 0 +1105 0 0 0 +1106 0 0 0 +1108 0 0 0 +1109 0 0 0 +1110 0 0 0 +1112 0 0 0 +1113 0 0 0 +1114 0 0 0 +1115 0 0 0 +1116 0 0 0 +1117 0 0 0 +1118 0 0 0 +1120 0 0 0 +162 0 0 0 +321 0 0 0 +323 0 0 0 +324 0 0 0 +325 0 0 0 +326 0 0 0 +327 0 0 0 +328 0 0 0 +329 0 0 0 +330 0 0 0 +331 0 0 0 +332 0 0 0 +333 0 0 0 +334 0 0 0 +335 0 0 0 +336 0 0 0 +337 0 0 0 +338 0 0 0 +339 0 0 0 +340 0 0 0 +341 0 0 0 +351 0 0 0 +361 0 0 0 +364 0 0 0 +366 0 0 0 +367 0 0 0 +369 0 0 0 +370 0 0 0 +372 0 0 0 +373 0 0 0 +374 0 0 0 +375 0 0 0 +377 0 0 0 +378 0 0 0 +379 0 0 0 +381 0 0 0 +391 0 0 0 +451 0 0 0 +460 0 0 0 +824 0 0 0 +864 0 0 0 +982 0 0 0 +983 0 0 0 +985 0 0 0 +986 0 0 0 +987 0 0 0 +988 0 0 0 +989 0 0 0 +990 0 0 0 +992 0 0 0 +993 0 0 0 +994 0 0 0 +995 0 0 0 +996 0 0 0 +997 0 0 0 +998 0 0 0 +999 0 0 0 +1000 0 0 0 +1022 0 0 0 +1023 0 0 0 +1025 0 0 0 +1028 0 0 0 +1029 0 0 0 +1030 0 0 0 +1036 0 0 0 +1037 0 0 0 +1040 0 0 0 +1107 0 0 0 +1119 0 0 0 +362 0 0 0 +402 0 0 0 +442 0 0 0 +523 0 0 0 +525 0 0 0 +528 0 0 0 +531 0 0 0 +536 0 0 0 +540 0 0 0 +561 0 0 0 +563 0 0 0 +564 0 0 0 +565 0 0 0 +566 0 0 0 +567 0 0 0 +568 0 0 0 +569 0 0 0 +570 0 0 0 +571 0 0 0 +572 0 0 0 +573 0 0 0 +574 0 0 0 +575 0 0 0 +576 0 0 0 +577 0 0 0 +578 0 0 0 +579 0 0 0 +580 0 0 0 +581 0 0 0 +591 0 0 0 +601 0 0 0 +603 0 0 0 +604 0 0 0 +605 0 0 0 +606 0 0 0 +607 0 0 0 +608 0 0 0 +609 0 0 0 +610 0 0 0 +612 0 0 0 +613 0 0 0 +614 0 0 0 +615 0 0 0 +616 0 0 0 +617 0 0 0 +618 0 0 0 +619 0 0 0 +621 0 0 0 +631 0 0 0 +1064 0 0 0 +1104 0 0 0 +1186 0 0 0 +1187 0 0 0 +1192 0 0 0 +1193 0 0 0 +1194 0 0 0 +1195 0 0 0 +1198 0 0 0 +1199 0 0 0 +1222 0 0 0 +1223 0 0 0 +1225 0 0 0 +1226 0 0 0 +1227 0 0 0 +1228 0 0 0 +1229 0 0 0 +1230 0 0 0 +1232 0 0 0 +1233 0 0 0 +1234 0 0 0 +1235 0 0 0 +1236 0 0 0 +1237 0 0 0 +1238 0 0 0 +1239 0 0 0 +1240 0 0 0 +1262 0 0 0 +1263 0 0 0 +1265 0 0 0 +1266 0 0 0 +1268 0 0 0 +1269 0 0 0 +1270 0 0 0 +1272 0 0 0 +1273 0 0 0 +1274 0 0 0 +1275 0 0 0 +1276 0 0 0 +1277 0 0 0 +1278 0 0 0 +1280 0 0 0 +322 0 0 0 +481 0 0 0 +483 0 0 0 +484 0 0 0 +485 0 0 0 +486 0 0 0 +487 0 0 0 +488 0 0 0 +489 0 0 0 +490 0 0 0 +491 0 0 0 +492 0 0 0 +493 0 0 0 +494 0 0 0 +495 0 0 0 +496 0 0 0 +497 0 0 0 +498 0 0 0 +499 0 0 0 +500 0 0 0 +501 0 0 0 +511 0 0 0 +521 0 0 0 +524 0 0 0 +526 0 0 0 +527 0 0 0 +529 0 0 0 +530 0 0 0 +532 0 0 0 +533 0 0 0 +534 0 0 0 +535 0 0 0 +537 0 0 0 +538 0 0 0 +539 0 0 0 +541 0 0 0 +551 0 0 0 +611 0 0 0 +620 0 0 0 +984 0 0 0 +1024 0 0 0 +1142 0 0 0 +1143 0 0 0 +1145 0 0 0 +1146 0 0 0 +1147 0 0 0 +1148 0 0 0 +1149 0 0 0 +1150 0 0 0 +1152 0 0 0 +1153 0 0 0 +1154 0 0 0 +1155 0 0 0 +1156 0 0 0 +1157 0 0 0 +1158 0 0 0 +1159 0 0 0 +1160 0 0 0 +1182 0 0 0 +1183 0 0 0 +1185 0 0 0 +1188 0 0 0 +1189 0 0 0 +1190 0 0 0 +1196 0 0 0 +1197 0 0 0 +1200 0 0 0 +1267 0 0 0 +1279 0 0 0 +43 0 0 0 +45 0 0 0 +48 0 0 0 +51 0 0 0 +56 0 0 0 +60 0 0 0 +81 0 0 0 +83 0 0 0 +84 0 0 0 +85 0 0 0 +86 0 0 0 +87 0 0 0 +88 0 0 0 +89 0 0 0 +90 0 0 0 +91 0 0 0 +92 0 0 0 +93 0 0 0 +94 0 0 0 +95 0 0 0 +96 0 0 0 +97 0 0 0 +98 0 0 0 +99 0 0 0 +100 0 0 0 +101 0 0 0 +111 0 0 0 +121 0 0 0 +123 0 0 0 +124 0 0 0 +126 0 0 0 +127 0 0 0 +128 0 0 0 +129 0 0 0 +130 0 0 0 +132 0 0 0 +133 0 0 0 +134 0 0 0 +135 0 0 0 +137 0 0 0 +138 0 0 0 +139 0 0 0 +141 0 0 0 +151 0 0 0 +522 0 0 0 +562 0 0 0 +602 0 0 0 +706 0 0 0 +707 0 0 0 +712 0 0 0 +713 0 0 0 +714 0 0 0 +715 0 0 0 +718 0 0 0 +719 0 0 0 +742 0 0 0 +743 0 0 0 +744 0 0 0 +745 0 0 0 +746 0 0 0 +747 0 0 0 +748 0 0 0 +749 0 0 0 +750 0 0 0 +752 0 0 0 +753 0 0 0 +754 0 0 0 +755 0 0 0 +756 0 0 0 +757 0 0 0 +758 0 0 0 +759 0 0 0 +760 0 0 0 +782 0 0 0 +783 0 0 0 +784 0 0 0 +785 0 0 0 +786 0 0 0 +788 0 0 0 +789 0 0 0 +790 0 0 0 +792 0 0 0 +793 0 0 0 +794 0 0 0 +795 0 0 0 +796 0 0 0 +797 0 0 0 +798 0 0 0 +800 0 0 0 +902 0 0 0 +942 0 0 0 +1224 0 0 0 +1264 0 0 0 +1 0 0 0 +3 0 0 0 +4 0 0 0 +5 0 0 0 +6 0 0 0 +7 0 0 0 +8 0 0 0 +9 0 0 0 +10 0 0 0 +11 0 0 0 +12 0 0 0 +13 0 0 0 +14 0 0 0 +15 0 0 0 +16 0 0 0 +17 0 0 0 +18 0 0 0 +19 0 0 0 +20 0 0 0 +21 0 0 0 +31 0 0 0 +41 0 0 0 +44 0 0 0 +46 0 0 0 +47 0 0 0 +49 0 0 0 +50 0 0 0 +52 0 0 0 +53 0 0 0 +54 0 0 0 +55 0 0 0 +57 0 0 0 +58 0 0 0 +59 0 0 0 +61 0 0 0 +71 0 0 0 +125 0 0 0 +131 0 0 0 +136 0 0 0 +140 0 0 0 +482 0 0 0 +662 0 0 0 +663 0 0 0 +664 0 0 0 +665 0 0 0 +666 0 0 0 +667 0 0 0 +668 0 0 0 +669 0 0 0 +670 0 0 0 +672 0 0 0 +673 0 0 0 +674 0 0 0 +675 0 0 0 +676 0 0 0 +677 0 0 0 +678 0 0 0 +679 0 0 0 +680 0 0 0 +702 0 0 0 +703 0 0 0 +704 0 0 0 +705 0 0 0 +708 0 0 0 +709 0 0 0 +710 0 0 0 +716 0 0 0 +717 0 0 0 +720 0 0 0 +787 0 0 0 +799 0 0 0 +822 0 0 0 +862 0 0 0 +1144 0 0 0 +1184 0 0 0 +42 0 0 0 +82 0 0 0 +122 0 0 0 +203 0 0 0 +205 0 0 0 +208 0 0 0 +211 0 0 0 +216 0 0 0 +220 0 0 0 +241 0 0 0 +243 0 0 0 +244 0 0 0 +245 0 0 0 +246 0 0 0 +247 0 0 0 +248 0 0 0 +249 0 0 0 +250 0 0 0 +251 0 0 0 +252 0 0 0 +253 0 0 0 +254 0 0 0 +255 0 0 0 +256 0 0 0 +257 0 0 0 +258 0 0 0 +259 0 0 0 +260 0 0 0 +261 0 0 0 +271 0 0 0 +281 0 0 0 +283 0 0 0 +284 0 0 0 +286 0 0 0 +287 0 0 0 +288 0 0 0 +289 0 0 0 +290 0 0 0 +292 0 0 0 +293 0 0 0 +294 0 0 0 +295 0 0 0 +297 0 0 0 +298 0 0 0 +299 0 0 0 +301 0 0 0 +311 0 0 0 +866 0 0 0 +867 0 0 0 +872 0 0 0 +873 0 0 0 +874 0 0 0 +875 0 0 0 +878 0 0 0 +879 0 0 0 +903 0 0 0 +905 0 0 0 +906 0 0 0 +907 0 0 0 +908 0 0 0 +909 0 0 0 +910 0 0 0 +912 0 0 0 +913 0 0 0 +914 0 0 0 +915 0 0 0 +916 0 0 0 +917 0 0 0 +918 0 0 0 +919 0 0 0 +920 0 0 0 +943 0 0 0 +945 0 0 0 +946 0 0 0 +948 0 0 0 +949 0 0 0 +950 0 0 0 +952 0 0 0 +953 0 0 0 +954 0 0 0 +955 0 0 0 +956 0 0 0 +957 0 0 0 +958 0 0 0 +960 0 0 0 +2 0 0 0 +161 0 0 0 +163 0 0 0 +164 0 0 0 +165 0 0 0 +166 0 0 0 +167 0 0 0 +168 0 0 0 +169 0 0 0 +170 0 0 0 +171 0 0 0 +172 0 0 0 +173 0 0 0 +174 0 0 0 +175 0 0 0 +176 0 0 0 +177 0 0 0 +178 0 0 0 +179 0 0 0 +180 0 0 0 +181 0 0 0 +191 0 0 0 +201 0 0 0 +204 0 0 0 +206 0 0 0 +207 0 0 0 +209 0 0 0 +210 0 0 0 +212 0 0 0 +213 0 0 0 +214 0 0 0 +215 0 0 0 +217 0 0 0 +218 0 0 0 +219 0 0 0 +221 0 0 0 +231 0 0 0 +285 0 0 0 +291 0 0 0 +296 0 0 0 +300 0 0 0 +823 0 0 0 +825 0 0 0 +826 0 0 0 +827 0 0 0 +828 0 0 0 +829 0 0 0 +830 0 0 0 +832 0 0 0 +833 0 0 0 +834 0 0 0 +835 0 0 0 +836 0 0 0 +837 0 0 0 +838 0 0 0 +839 0 0 0 +840 0 0 0 +863 0 0 0 +865 0 0 0 +868 0 0 0 +869 0 0 0 +870 0 0 0 +876 0 0 0 +877 0 0 0 +880 0 0 0 +947 0 0 0 +959 0 0 0 Bonds -1 1 6 10 -2 1 16 20 -3 1 26 30 -4 1 36 40 -5 1 46 50 -6 1 56 60 -7 1 66 70 -8 1 76 80 -9 1 86 90 -10 1 96 100 -11 1 106 110 -12 1 116 120 -13 1 126 130 -14 1 136 140 -15 1 146 150 -16 1 156 160 -17 1 166 170 -18 1 176 180 -19 1 186 190 -20 1 196 200 -21 1 206 210 -22 1 216 220 -23 1 226 230 -24 1 236 240 -25 1 246 250 -26 1 256 260 -27 1 266 270 -28 1 276 280 -29 1 286 290 -30 1 296 300 -31 1 306 310 -32 1 316 320 -33 1 326 330 -34 1 336 340 -35 1 346 350 -36 1 356 360 -37 1 366 370 -38 1 376 380 -39 1 386 390 -40 1 396 400 -41 1 406 410 -42 1 416 420 -43 1 426 430 -44 1 436 440 -45 1 446 450 -46 1 456 460 -47 1 466 470 -48 1 476 480 -49 1 486 490 -50 1 496 500 -51 1 506 510 -52 1 516 520 -53 1 526 530 -54 1 536 540 -55 1 546 550 -56 1 556 560 -57 1 566 570 -58 1 576 580 -59 1 586 590 -60 1 596 600 -61 1 606 610 -62 1 616 620 -63 1 626 630 -64 1 636 640 -65 1 646 650 -66 1 656 660 -67 1 666 670 -68 1 676 680 -69 1 686 690 -70 1 696 700 -71 1 706 710 -72 1 716 720 -73 1 726 730 -74 1 736 740 -75 1 746 750 -76 1 756 760 -77 1 766 770 -78 1 776 780 -79 1 786 790 -80 1 796 800 -81 1 806 810 -82 1 816 820 -83 1 826 830 -84 1 836 840 -85 1 846 850 -86 1 856 860 -87 1 866 870 -88 1 876 880 -89 1 886 890 -90 1 896 900 -91 1 906 910 -92 1 916 920 -93 1 926 930 -94 1 936 940 -95 1 946 950 -96 1 956 960 -97 1 966 970 -98 1 976 980 -99 1 986 990 -100 1 996 1000 -101 1 1006 1010 -102 1 1016 1020 -103 1 1026 1030 -104 1 1036 1040 -105 1 1046 1050 -106 1 1056 1060 -107 1 1066 1070 -108 1 1076 1080 -109 1 1086 1090 -110 1 1096 1100 -111 1 1106 1110 -112 1 1116 1120 -113 1 1126 1130 -114 1 1136 1140 -115 1 1146 1150 -116 1 1156 1160 -117 1 1166 1170 -118 1 1176 1180 -119 1 1186 1190 -120 1 1196 1200 -121 1 1206 1210 -122 1 1216 1220 -123 1 1226 1230 -124 1 1236 1240 -125 1 1246 1250 -126 1 1256 1260 -127 1 1266 1270 -128 1 1276 1280 +1 1 386 390 +2 1 426 430 +3 1 436 440 +4 1 476 480 +5 1 1016 1020 +6 1 1046 1050 +7 1 1056 1060 +8 1 1086 1090 +9 1 346 350 +10 1 356 360 +11 1 396 400 +12 1 466 470 +13 1 966 970 +14 1 976 980 +15 1 1006 1010 +16 1 1096 1100 +17 1 546 550 +18 1 586 590 +19 1 596 600 +20 1 636 640 +21 1 1176 1180 +22 1 1206 1210 +23 1 1216 1220 +24 1 1246 1250 +25 1 506 510 +26 1 516 520 +27 1 556 560 +28 1 626 630 +29 1 1126 1130 +30 1 1136 1140 +31 1 1166 1170 +32 1 1256 1260 +33 1 66 70 +34 1 106 110 +35 1 116 120 +36 1 156 160 +37 1 696 700 +38 1 726 730 +39 1 736 740 +40 1 766 770 +41 1 26 30 +42 1 36 40 +43 1 76 80 +44 1 146 150 +45 1 646 650 +46 1 656 660 +47 1 686 690 +48 1 776 780 +49 1 226 230 +50 1 266 270 +51 1 276 280 +52 1 316 320 +53 1 856 860 +54 1 886 890 +55 1 896 900 +56 1 926 930 +57 1 186 190 +58 1 196 200 +59 1 236 240 +60 1 306 310 +61 1 806 810 +62 1 816 820 +63 1 846 850 +64 1 936 940 +65 1 376 380 +66 1 406 410 +67 1 416 420 +68 1 446 450 +69 1 456 460 +70 1 1026 1030 +71 1 1066 1070 +72 1 1076 1080 +73 1 1106 1110 +74 1 1116 1120 +75 1 326 330 +76 1 336 340 +77 1 366 370 +78 1 986 990 +79 1 996 1000 +80 1 1036 1040 +81 1 536 540 +82 1 566 570 +83 1 576 580 +84 1 606 610 +85 1 616 620 +86 1 1186 1190 +87 1 1226 1230 +88 1 1236 1240 +89 1 1266 1270 +90 1 1276 1280 +91 1 486 490 +92 1 496 500 +93 1 526 530 +94 1 1146 1150 +95 1 1156 1160 +96 1 1196 1200 +97 1 56 60 +98 1 86 90 +99 1 96 100 +100 1 126 130 +101 1 706 710 +102 1 746 750 +103 1 756 760 +104 1 786 790 +105 1 796 800 +106 1 6 10 +107 1 16 20 +108 1 46 50 +109 1 136 140 +110 1 666 670 +111 1 676 680 +112 1 716 720 +113 1 216 220 +114 1 246 250 +115 1 256 260 +116 1 286 290 +117 1 866 870 +118 1 906 910 +119 1 916 920 +120 1 946 950 +121 1 956 960 +122 1 166 170 +123 1 176 180 +124 1 206 210 +125 1 296 300 +126 1 826 830 +127 1 836 840 +128 1 876 880 diff --git a/tools/msi2lmp/test/reference/ethane-oplsaa.data2 b/tools/msi2lmp/test/reference/ethane-oplsaa.data2 index 7932115e6e..cf058a4ca9 100644 --- a/tools/msi2lmp/test/reference/ethane-oplsaa.data2 +++ b/tools/msi2lmp/test/reference/ethane-oplsaa.data2 @@ -1,4 +1,4 @@ -LAMMPS data file via write_data, version 24 Oct 2015-ICMS, timestep = 60 +LAMMPS data file via write_data, version 29 Aug 2024, timestep = 64, units = real 8 atoms 2 atom types @@ -9,13 +9,13 @@ LAMMPS data file via write_data, version 24 Oct 2015-ICMS, timestep = 60 9 dihedrals 1 dihedral types --5.0000000000000000e+00 5.0000000000000000e+00 xlo xhi --5.0000000000000000e+00 5.0000000000000000e+00 ylo yhi --5.0000000000000000e+00 5.0000000000000000e+00 zlo zhi +-5 5 xlo xhi +-5 5 ylo yhi +-5 5 zlo zhi Masses -1 12.0112 +1 12.01115 2 1.00797 Pair Coeffs # lj/cut/coul/cut @@ -39,25 +39,25 @@ Dihedral Coeffs # opls Atoms # full -1 1 1 -1.7999999999999999e-01 4.4520961794662339e+00 -4.8331316055118139e+00 4.9921953697666774e+00 0 1 -1 -2 1 1 -1.7999999999999999e-01 -4.0208267456132498e+00 -4.9408970766661060e+00 -4.9962668603193716e+00 1 1 0 -3 1 2 5.9999999999999998e-02 4.1241637410618237e+00 -3.9187715229527775e+00 4.4953501727331462e+00 0 1 -1 -4 1 2 5.9999999999999998e-02 3.9927847754165149e+00 4.3246628372301563e+00 4.4708516600772406e+00 0 0 -1 -5 1 2 5.9999999999999998e-02 4.0591846610420355e+00 -4.8176278098672096e+00 -3.9904372631272924e+00 0 1 0 -6 1 2 5.9999999999999998e-02 -3.5762405194770461e+00 -4.0716394256255244e+00 -4.5137080084717223e+00 1 1 0 -7 1 2 5.9999999999999998e-02 -3.6936651570105905e+00 4.1740778258698201e+00 -4.4511582014826949e+00 1 0 0 -8 1 2 5.9999999999999998e-02 -3.6211369348857190e+00 4.9967667775234554e+00 3.9920131308240276e+00 1 0 -1 +1 1 1 -0.18 4.450690671089314 -4.83133647736812 4.992428212375868 0 1 -1 +2 1 1 -0.18 -4.022291647324266 -4.942324611094984 -4.995836359730008 1 1 0 +3 1 2 0.06 4.1294147504666165 -3.9160894986014068 4.495489435092607 0 1 -1 +4 1 2 0.06 3.9961668185396193 4.3269540139496785 4.470098784261843 0 0 -1 +5 1 2 0.06 4.059021520856406 -4.816007407764785 -3.990885907539094 0 1 0 +6 1 2 0.06 -3.5752328984263166 -4.071671221696795 -4.5159098704661425 1 1 0 +7 1 2 0.06 -3.6980390300174055 4.172581688097945 -4.448408184535642 1 0 0 +8 1 2 0.06 -3.6233701851839633 4.991333514478468 3.9918638905405723 1 0 -1 Velocities -1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 -8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1 0 0 0 +2 0 0 0 +3 0 0 0 +4 0 0 0 +5 0 0 0 +6 0 0 0 +7 0 0 0 +8 0 0 0 Bonds diff --git a/tools/msi2lmp/test/runtests.sh b/tools/msi2lmp/test/runtests.sh index b81c8637cd..2cfbcb9f72 100755 --- a/tools/msi2lmp/test/runtests.sh +++ b/tools/msi2lmp/test/runtests.sh @@ -2,8 +2,8 @@ MSI2LMP_LIBRARY=../frc_files VALGRIND='valgrind -v --track-origins=yes --show-reachable=yes --leak-check=full' -MSI2LMP=../src/msi2lmp.exe -LAMMPS=../../../src/lmp_serial +MSI2LMP=../../../build-test/msi2lmp +LAMMPS=../../../build-test/lmp CHECKDATA=./data-compare.pl if [ ! -x $MSI2LMP ] diff --git a/tools/regression-tests/README b/tools/regression-tests/README index 810b96e87c..1342e50310 100644 --- a/tools/regression-tests/README +++ b/tools/regression-tests/README @@ -1,5 +1,5 @@ The script `run_tests.py` in this folder is used to perform regression tests -using in-place example scripts. +using in-place example scripts and provided log files as reference. What this single script does is to launch the selected LAMMPS binary using a testing configuration defined in a `.yaml` file (e.g., `config.yaml`) @@ -19,60 +19,88 @@ within the specified tolerances in the test configuration `config.yaml` file. With the current features, users can: + specify which LAMMPS binary version to test (e.g., the version from a commit, or those from `lammps-testing`) - + specify the examples subfolders (thus the reference log files) seperately (e.g. from other LAMMPS versions or commits) - + specify tolerances for individual quantities for any input script to override the global values - + launch tests with `mpirun` with all supported command line features (multiple procs, multiple paritions, and suffices) - + skip certain input files if not interested, or no reference log file exists - + simplify the main LAMMPS builds, as long as a LAMMPS binary is available + + specify the examples subfolders (thus the reference log files) seperately (e.g. from other LAMMPS versions or commits), or + + specify a file that lists of the examples input scripts to test + + specify tolerances for individual quantities for any input script to override the global values in the config file + + launch tests with `mpirun` with all supported command line features (multiple procs, multiple paritions, and suffixes) + + skip certain input files (whose names match specified patterns) if not interested, or packaged not installed, or no reference log file exists + + set a timeout for every input script run if they may take too long + + skip numerical checks if the goal is just to check if the runs do not fail + +Some benefits include: + + + separating regression testing from building LAMMPS + + performing quick and full regression tests + + keeping track of the testing progress to resume the testing from the last checkpoint (skipping completed runs) + + distributing the input list across multiple processes by + splitting the list of input scripts into separate runs (there are ~800 input scripts under the top-level examples) + +Input arguments: + + + the path to a LAMMPS binary (can be relative to the working directory) + + a test configuration file (see tools/regression-tests/config.yaml for an example) + + a text file that lists of folders where the input scripts reside and how many of them line by line, or + a text file that list of input scripts, or + the path to the top-level examples + +Output: + + + failure.yaml : a dictionary of the failed runs and reasons + + progress.yaml: full testing results of the tested input scripts with the status (completed, failed or skipped) + with error messages (for failed runs), and walltime (in seconds) + + output.xml : testing results in the JUnit XML format + + run.log : screen output and error of individual runs Limitations: - - input scripts use thermo style multi (e.g., examples/peptide) do not work with the expected thermo output format - - input scripts that require partition runs (e.g. examples/neb) need a separate config file, e.g. "args: --partition 2x1" - - testing accelerator packages (GPU, INTEL, KOKKOS, OPENMP) need separate config files, "args: -sf omp -pk omp 4" - -TODO: - - + keep track of the testing progress to resume the testing from the last checkpoint - + distribute the input list across multiple processes via multiprocessing, or - split the list of input scripts into separate runs (there are 800+ input script under the top-level examples) - + be able to be invoked from run_tests in the lammps-testing infrastruture - + + input scripts use thermo style multi (e.g., examples/peptide) do not work with the expected thermo output format + + input scripts that require partition runs (e.g. examples/neb) need a separate config file, e.g., args: "--partition 3x1" + + testing with accelerator packages (GPU, INTEL, KOKKOS, OPENMP) need separate config files, e.g., args: "-sf omp -pk omp 4" The following Python packages need to be installed into an activated environment: - + python3 -m venv testing-env source testing-env/bin/activate pip install numpy pyyaml junit_xml +For all the supported arguments, run: -Example uses: + python3 tools/regression-tests/run_tests.py -h + +Example uses (aka, tests for this script): 1) Simple use (using the provided tools/regression-tests/config.yaml and the examples/ folder at the top level) - python3 run_tests.py --lmp-bin=/path/to/lmp_binary + python3 run_tests.py --lmp-bin=build/lmp --config-file=tools/regression-tests/config.yaml 2) Use a custom testing configuration python3 run_tests.py --lmp-bin=/path/to/lmp_binary --config-file=/path/to/config/file/config.yaml 3) Specify a list of example folders python3 run_tests.py --lmp-bin=/path/to/lmp_binary --config-file=/path/to/config/file/config.yaml \ - --example-folders="/path/to/examples/folder1;/path/to/examples/folder2" + --example-folders="/path/to/examples/melt;/path/to/examples/rigid" - The example folders can also be loaded from a text file list_subfolders1.txt: + The example subfolders can also be loaded from a text file list_subfolders1.txt: python3 run_tests.py --lmp-bin=/path/to/lmp_binary --config-file=/path/to/config/file/config.yaml \ - --list-input=list_subfolders1.txt --output-file=output1.txt --progress-file=progress1.yaml \ + --list-subfolders=list_subfolders1.txt --output-file=output1.txt --progress-file=progress1.yaml \ --log-file=run1.log - - 4) Test a LAMMPS binary with the whole top-level /examples folder in a LAMMPS source tree - python3 run_tests.py --lmp-bin=/path/to/lmp_binary --examples-top-level=/path/to/lammps/examples - 5) Analyze (dry run) the LAMMPS binary annd whole top-level /examples folder in a LAMMPS source tree + 4) Specify a list of example input scripts (e.g. obtained from running tools/regression-tests/get-quick-list.py) + python3 run_tests.py --lmp-bin=/path/to/lmp_binary --config-file=/path/to/config/file/config.yaml \ + --list-input=input_list.txt + + 5) Test a LAMMPS binary with the whole top-level /examples folder in a LAMMPS source tree + python3 run_tests.py --lmp-bin=/path/to/lmp_binary --examples-top-level=/path/to/lammps/examples + --config-file=tools/regression-tests/config.yaml + + 6) Analyze the LAMMPS binary and whole top-level /examples folder in a LAMMPS source tree and generate separate input lists for 8 workers: python3 run_tests.py --lmp-bin=/path/to/lmp_binary --examples-top-level=/path/to/lammps/examples \ - --dry-run --num-workers=8 + --analyze --num-workers=8 - This is used for splitting the subfolders into separate input lists and launching different instances - of run_tests.py simultaneously. + The output of this run is 8 files folder-list-[0-7].txt that lists the subfolders + and 8 files input-list-[0-7].txt that lists the input scripts under the top-level example folders. + With these lists, one can launch multiple instances of run_tests.py simultaneously + each with a list of example subfolders (Case 3), or with a list of input scripts (Case 4). An example of the test configuration `config.yaml` is given as below. @@ -107,17 +135,31 @@ An example of the test configuration `config.yaml` is given as below. abs: 1e-2 rel: 1e-4 skip: - [ in.rigid.poems3, - in.rigid.poems4, - in.rigid.poems5, + [ in.displ, + in.displ2, + in.*_imd*, ] nugget: 1.0 epsilon: 1e-16 + timeout: 180 -An example of the list of input scripts in a text file `list_subfolders1.txt` +An example of the list of example subfolders in a text file `list_subfolders1.txt` + + /home/codes/lammps/examples/melt 1 + /home/codes/lammps/examples/body 5 + /home/codes/lammps/examples/PACKAGES/dielectric 2 + /home/codes/lammps/examples/PACKAGES/tally 3 + +where the numbers are the number of input scripts (in.*) in the folders. + + +An example of the list of input scripts in a text file `input_list.txt` + + /home/codes/lammps/examples/melt/in.melt + /home/codes/lammps/examples/body/in.body + /home/codes/lammps/examples/body/in.cubes + /home/codes/lammps/examples/PACKAGES/dielectric/in.confined + /home/codes/lammps/examples/PACKAGES/tally/in.pe + /home/codes/lammps/examples/PACKAGES/tally/in.force -/home/codes/lammps/examples/melt -/home/codes/lammps/examples/body -/home/codes/lammps/examples/PACKAGES/dielectric -/home/codes/lammps/examples/PACKAGES/tally diff --git a/tools/regression-tests/config.yaml b/tools/regression-tests/config.yaml index 24f1ab0d67..dd7ffe0b03 100644 --- a/tools/regression-tests/config.yaml +++ b/tools/regression-tests/config.yaml @@ -3,7 +3,7 @@ nprocs: "4" args: "-cite none" mpiexec: "mpirun" - mpiexec_numproc_flag: "-np" + mpiexec_numproc_flag: "--host localhost:4 -np" tolerance: PotEng: abs: 1e-4 @@ -29,13 +29,10 @@ abs: 1e-2 rel: 1e-4 skip: - [ in.rigid.poems3, - in.rigid.poems4, - in.rigid.poems5, - in.peptide, - in.voronoi, - in.voronoi.2d, - in.voronoi.data, + [ + in.disp, + in.disp2, + in.dos, in.*_imd*, in.bucky-plus-cnt*, ] diff --git a/tools/regression-tests/config_quick.yaml b/tools/regression-tests/config_quick.yaml new file mode 100644 index 0000000000..bc6e19b730 --- /dev/null +++ b/tools/regression-tests/config_quick.yaml @@ -0,0 +1,44 @@ +--- + lmp_binary: "" + nprocs: "1" + args: "-cite none" + mpiexec: "" + mpiexec_numproc_flag: "" + tolerance: + PotEng: + abs: 1e-4 + rel: 1e-7 + TotEng: + abs: 1e-4 + rel: 1e-7 + Press: + abs: 1e-4 + rel: 1e-7 + Temp: + abs: 1e-4 + rel: 1e-7 + E_vdwl: + abs: 1e-3 + rel: 1e-7 + overrides: + in.rigid.tnr: + Temp: + abs: 1e-3 + rel: 1e-5 + Press: + abs: 1e-2 + rel: 1e-4 + skip: + [ + in.disp, + in.disp2, + in.dos, + in.*_imd*, + in.bucky-plus-cnt*, + ] + + timeout: 30 + nugget: 1.0 + epsilon: 1e-16 + + diff --git a/tools/regression-tests/config_serial.yaml b/tools/regression-tests/config_serial.yaml new file mode 100644 index 0000000000..c685815ff0 --- /dev/null +++ b/tools/regression-tests/config_serial.yaml @@ -0,0 +1,44 @@ +--- + lmp_binary: "" + nprocs: "1" + args: "-cite none" + mpiexec: "" + mpiexec_numproc_flag: "" + tolerance: + PotEng: + abs: 1e-4 + rel: 1e-7 + TotEng: + abs: 1e-4 + rel: 1e-7 + Press: + abs: 1e-4 + rel: 1e-7 + Temp: + abs: 1e-4 + rel: 1e-7 + E_vdwl: + abs: 1e-3 + rel: 1e-7 + overrides: + in.rigid.tnr: + Temp: + abs: 1e-3 + rel: 1e-5 + Press: + abs: 1e-2 + rel: 1e-4 + skip: + [ + in.disp, + in.disp2, + in.dos, + in.*_imd*, + in.bucky-plus-cnt*, + ] + + timeout: 180 + nugget: 1.0 + epsilon: 1e-16 + + diff --git a/tools/regression-tests/get_quick_list.py b/tools/regression-tests/get_quick_list.py new file mode 100644 index 0000000000..9ebcce0aa2 --- /dev/null +++ b/tools/regression-tests/get_quick_list.py @@ -0,0 +1,281 @@ +#!/usr/bin/env python3 +""" +Find all example input files containing commands changed in this branch versus develop. +Companion script to run_tests.py regression tester. +""" + +import os, re, sys, subprocess +from pathlib import Path + +if sys.version_info < (3,5): + raise BaseException("Must use at least Python 3.5") + +# infer top level LAMMPS dir from filename +LAMMPS_DIR = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', '..')) + +# ---------------------------------------------------------------------- + +def changed_files_from_git(branch='develop'): + """ + Return list of changed file from git. + + This function queries git to return the list of changed files on + the current branch relative to a given branch (default is 'develop'). + + param branch: branch to compare with + type branch: string + return: path names of files with changes relative to the repository root + rtype: list of strings + """ + + # get list of changed files relative to the develop branch from git + output = None + try: + output = subprocess.run('git diff --diff-filter=MA --name-status ' + branch, + shell=True, capture_output=True) + except: + pass + + # collect header files to check for styles + # - skip files that don't end in '.h' or '.cpp' + # - skip paths that don't start with 'src/' + # - replace '.cpp' with '.h' w/o checking it exists + headers = [] + # output will have a letter 'A' or 'M' for added or modified files followed by pathname + # append iterms to list and return it + if output: + for changed in output.stdout.decode().split(): + if (changed == 'A') or (changed == 'M'): continue + if not changed.startswith('src/'): continue + if changed.endswith('.h'): headers.append(changed) + if changed.endswith('.cpp'): headers.append(changed.replace('.cpp','.h')) + return headers + +# ---------------------------------------------------------------------- + +def get_command_from_header(headers, topdir="."): + """ + Loop over list of header files and extract style names, if present. + + LAMMPS commands have macros XxxxStyle() that connects a string with a class. + We search the header files for those macros, extract the string and append + it to a list in a dictionary of different types of styles. We skip over known + suffixes and deprecated commands. + + param headers: header files to check for commands + type headers: + return: dictionary with lists of style names + rtype: dict + """ + + styles = {} + styles['command'] = [] + styles['atom'] = [] + styles['compute'] = [] + styles['fix'] = [] + styles['pair'] = [] + styles['body'] = [] + styles['bond'] = [] + styles['angle'] = [] + styles['dihedral'] = [] + styles['improper'] = [] + styles['kspace'] = [] + styles['dump'] = [] + styles['region'] = [] + styles['integrate'] = [] + styles['minimize'] = [] + + # some regex + style_pattern = re.compile(r"(.+)Style\((.+),(.+)\)") + upper = re.compile("[A-Z]+") + gpu = re.compile("(.+)/gpu$") + intel = re.compile("(.+)/intel$") + kokkos = re.compile("(.+)/kk$") + kokkos_skip = re.compile("(.+)/kk/(host|device)$") + omp = re.compile("(.+)/omp$") + opt = re.compile("(.+)/opt$") + removed = re.compile("(.*)Deprecated$") + + for file in headers: + # don't fail if file is not present + try: + with open(os.path.join(topdir,file)) as f: + for line in f: + matches = style_pattern.findall(line) + for m in matches: + # skip over internal styles w/o explicit documentation + style = m[1] + if upper.match(style): + continue + + # skip over suffix styles: + suffix = kokkos_skip.match(style) + if suffix: + continue + suffix = gpu.match(style) + if suffix: + continue + suffix = intel.match(style) + if suffix: + continue + suffix = kokkos.match(style) + if suffix: + continue + suffix = omp.match(style) + if suffix: + continue + suffix = opt.match(style) + if suffix: + continue + deprecated = removed.match(m[2]) + if deprecated: + continue + + # register style and suffix flags + if m[0] == 'Angle': + styles['angle'].append(style) + elif m[0] == 'Atom': + styles['atom'].append(style) + elif m[0] == 'Body': + styles['body'].append(style) + elif m[0] == 'Bond': + styles['bond'].applend(style) + elif m[0] == 'Command': + styles['command'].append(style) + elif m[0] == 'Compute': + styles['compute'].append(style) + elif m[0] == 'Dihedral': + styles['dihedral'].append(style) + elif m[0] == 'Dump': + styles['dump'].append(style) + elif m[0] == 'Fix': + styles['fix'].append(style) + elif m[0] == 'Improper': + styles['improper'].append(style) + elif m[0] == 'Integrate': + styles['integrate'].append(style) + elif m[0] == 'KSpace': + styles['kspace'].append(style) + elif m[0] == 'Minimize': + styles['minimize'].append(style) + elif m[0] == 'Pair': + styles['pair'].append(style) + elif m[0] == 'Region': + styles['region'].append(style) + else: + pass + # header file not found or not readable + except: + pass + return styles + +# ---------------------------------------------------------------------- + +def make_regex(styles): + """Convert dictionary with styles into a regular expression to scan input files with + + This will construct a regular expression matching LAMMPS commands. Ignores continuation + + param styles: dictionary with style names + type styles: dict + return: combined regular expression string + rtype: string + """ + + restring = "^\\s*(" + if len(styles['command']): + restring += '(' + '|'.join(styles['command']) + ')|' + if len(styles['atom']): + restring += '(atom_style\\s+(' + '|'.join(styles['atom']) + '))|' + if len(styles['compute']): + restring += '(compute\\s+\\S+\\s+\\S+\\s+(' + '|'.join(styles['compute']) + '))|' + if len(styles['fix']): + restring += '(fix\\s+\\S+\\s+\\S+\\s+(' + '|'.join(styles['fix']) + '))|' + if len(styles['pair']): + restring += '(pair_style\\s+(' + '|'.join(styles['pair']) + '))|' + if len(styles['body']): + restring += '(atom_style\\s+body\\s+(' + '|'.join(styles['body']) + '))|' + if len(styles['bond']): + restring += '(bond_style\\s+(' + '|'.join(styles['bond']) + '))|' + if len(styles['angle']): + restring += '(angle_style\\s+(' + '|'.join(styles['angle']) + '))|' + if len(styles['dihedral']): + restring += '(dihedral_style\\s+(' + '|'.join(styles['dihedral']) + '))|' + if len(styles['improper']): + restring += '(improper_style\\s+(' + '|'.join(styles['improper']) + '))|' + if len(styles['kspace']): + restring += '(kspace_style\\s+(' + '|'.join(styles['kspace']) + '))|' + if len(styles['dump']): + restring += '(dump\\s+\\S+\\s+\\S+\\s+(' + '|'.join(styles['dump']) + '))|' + if len(styles['region']): + restring += '(region\\s+(' + '|'.join(styles['region']) + '))|' + if len(styles['integrate']): + restring += '(run_style\\s+(' + '|'.join(styles['integrate']) + '))|' + if len(styles['minimize']): + restring += '(min_style\\s+(' + '|'.join(styles['minimize']) + '))|' + + # replace last (pipe) character with closing parenthesis + length = len(restring) + restring = restring[:length-1] + ')' + # return combined regex string + if length > 5: + return restring + else: + return None + +# ---------------------------------------------------------------------- + +def get_examples_using_styles(regex, examples='examples'): + """ + Loop through LAMMPS examples tree and find all files staring with 'in.' + that have at least one line matching the regex. + + param regex: string pattern matching LAMMPS commands + type regex: compiled regex + param example: path where to start looking for examples recursively + type example: string + return: list of matching example inputs + rtype: list of strings + """ + + commands = re.compile(regex) + inputs = [] + for filename in Path(examples).rglob('in.*'): + with open(filename) as f: + for line in f: + if commands.match(line): + inputs.append(str(filename)) + break + return inputs + +# ---------------------------------------------------------------------- +# ---------------------------------------------------------------------- + +if __name__ == "__main__": + + headers = changed_files_from_git('origin/develop') + styles = get_command_from_header(headers, LAMMPS_DIR) + regex = make_regex(styles) + if regex: + inputs = get_examples_using_styles(regex, os.path.join(LAMMPS_DIR,'examples')) + else: + inputs = [] + print("Found changes to the following styles:") + print("Commands: ", styles['command']) + print("Atom styles: ", styles['atom']) + print("Compute styles: ", styles['compute']) + print("Fix styles: ", styles['fix']) + print("Pair styles: ", styles['pair']) + print("Body styles: ", styles['body']) + print("Bond styles: ", styles['bond']) + print("Angle styles: ", styles['angle']) + print("Dihedral styles: ", styles['dihedral']) + print("Improper styles: ", styles['improper']) + print("Kspace styles: ", styles['kspace']) + print("Dump styles: ", styles['dump']) + print("Region styles: ", styles['region']) + print("Integrate styles: ", styles['integrate']) + print("Minimize styles: ", styles['minimize']) + + print("Example input files affected: ", len(inputs)) + print("inputs: ", inputs.sort()) diff --git a/tools/regression-tests/reference.yaml b/tools/regression-tests/reference.yaml new file mode 100644 index 0000000000..c18883f375 --- /dev/null +++ b/tools/regression-tests/reference.yaml @@ -0,0 +1,932 @@ +in.granregion.box: { folder: examples/granregion, status: "completed", failed_checks: { abs_diff_failed: 5, rel_diff_failed: 8 }, walltime: 0.0, walltime_norm: 0.0 } +in.granregion.funnel: { folder: examples/granregion, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 106.0, walltime_norm: 17.666666666666668 } +in.granregion.mixer: { folder: examples/granregion, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 84.0, walltime_norm: 14.0 } +in.melt: { folder: examples/melt, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.airebo: { folder: examples/airebo, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 60.0, walltime_norm: 10.0 } +in.airebo-0-0: { folder: examples/airebo, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 5.0, walltime_norm: 0.8333333333333334 } +in.airebo-m: { folder: examples/airebo, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 63.0, walltime_norm: 10.5 } +in.rebo2: { folder: examples/airebo, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 5.0, walltime_norm: 0.8333333333333334 } +in.hybrid: { folder: examples/template, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 7.0, walltime_norm: 1.1666666666666667 } +in.mol-data-mix: { folder: examples/template, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 18.0, walltime_norm: 3.0 } +in.mol-restart-mix: { folder: examples/template, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 45.0, walltime_norm: 7.5 } +in.molecular-mix: { folder: examples/template, status: "completed", failed_checks: { abs_diff_failed: 5, rel_diff_failed: 5 }, walltime: 26.0, walltime_norm: 4.333333333333333 } +in.template-mix: { folder: examples/template, status: "completed", failed_checks: { abs_diff_failed: 5, rel_diff_failed: 5 }, walltime: 26.0, walltime_norm: 4.333333333333333 } +in.tmpl-data-mix: { folder: examples/template, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 18.0, walltime_norm: 3.0 } +in.tmpl-restart-mix: { folder: examples/template, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 45.0, walltime_norm: 7.5 } +in.first: { folder: examples/rerun, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 16.0, walltime_norm: 2.6666666666666665 } +in.rdf.first: { folder: examples/rerun, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 16.0, walltime_norm: 2.6666666666666665 } +in.rdf.rerun: { folder: examples/rerun, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 5.0, walltime_norm: 0.8333333333333334 } +in.read_dump: { folder: examples/rerun, status: "failed, no Total wall time in the output, -------------------------------------------------------------------------- +MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD +with errorcode 1. + +NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. +You may or may not see output from other processes, depending on +exactly when Open MPI kills them. +-------------------------------------------------------------------------- +", walltime: -1 } +in.rerun: { folder: examples/rerun, status: "failed, no Total wall time in the output, -------------------------------------------------------------------------- +MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD +with errorcode 1. + +NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. +You may or may not see output from other processes, depending on +exactly when Open MPI kills them. +-------------------------------------------------------------------------- +", walltime: -1 } +in.lj.ehex: { folder: examples/HEAT, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.lj.hex: { folder: examples/HEAT, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.spce.ehex: { folder: examples/HEAT, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.spce.hex: { folder: examples/HEAT, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.vashishta.inp: { folder: examples/vashishta, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.vashishta.sio2: { folder: examples/vashishta, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.vashishta.table.inp: { folder: examples/vashishta, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.vashishta.table.sio2: { folder: examples/vashishta, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.rigid: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.rigid.atomfile: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.rigid.atomvar: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.rigid.early: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.rigid.gravity: { folder: examples/rigid, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.rigid.infile: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.rigid.molecule: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.rigid.nve: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 0.0, walltime_norm: 0.0 } +in.rigid.nve.early: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 0.0, walltime_norm: 0.0 } +in.rigid.poems: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 3.0, walltime_norm: 0.5 } +in.rigid.poems2: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 3.0, walltime_norm: 0.5 } +in.rigid.poems3: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.rigid.poems4: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 3.0, walltime_norm: 0.5 } +in.rigid.poems5: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 3.0, walltime_norm: 0.5 } +in.rigid.property: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.rigid.small: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.rigid.small.infile: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.rigid.tnr: { folder: examples/rigid, status: "completed", failed_checks: { abs_diff_failed: 18, rel_diff_failed: 22 }, walltime: 21.0, walltime_norm: 3.5 } +in.voronoi: { folder: examples/voronoi, status: "completed, but no Step nor Loop in the output.", walltime: 6.0, walltime_norm: 1.0 } +in.voronoi.2d: { folder: examples/voronoi, status: "completed, but no Step nor Loop in the output.", walltime: 0.0, walltime_norm: 0.0 } +in.voronoi.data: { folder: examples/voronoi, status: "completed, but no Step nor Loop in the output.", walltime: 0.0, walltime_norm: 0.0 } +in.ehex: { folder: examples/KAPPA, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.heat: { folder: examples/KAPPA, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.heatflux: { folder: examples/KAPPA, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.langevin: { folder: examples/KAPPA, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.mp: { folder: examples/KAPPA, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.pour: { folder: examples/pour, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 20.0, walltime_norm: 3.3333333333333335 } +in.pour.2d: { folder: examples/pour, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.pour.2d.molecule: { folder: examples/pour, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.deposit.atom: { folder: examples/deposit, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 3.0, walltime_norm: 0.5 } +in.deposit.molecule: { folder: examples/deposit, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.deposit.molecule.rigid-nve-small: { folder: examples/deposit, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.deposit.molecule.rigid-nvt-small: { folder: examples/deposit, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.deposit.molecule.rigid-small: { folder: examples/deposit, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.deposit.molecule.shake: { folder: examples/deposit, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.charmmfsw: { folder: examples/charmmfsw, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 17.0, walltime_norm: 2.8333333333333335 } +in.indent: { folder: examples/indent, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.indent.min: { folder: examples/indent, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.qeq.buck: { folder: examples/qeq, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 21.0, walltime_norm: 3.5 } +in.qeq.reaxff: { folder: examples/qeq, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.dreiding: { folder: examples/dreiding, status: "completed, error parsing log.lammps into YAML", walltime: 0.0, walltime_norm: 0.0 } +in.22DMH.real: { folder: examples/relres, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 57.0, walltime_norm: 9.5 } +in.22DMH.relres: { folder: examples/relres, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 8.0, walltime_norm: 1.3333333333333333 } +in.22DMH.respa: { folder: examples/relres, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 6.0, walltime_norm: 1.0 } +in.track: { folder: examples/tracker, status: "failed, ERROR: Illegal pair_style command (src/MISC/pair_tracker.cpp:221).", walltime: -1 } +in.pour.drum: { folder: examples/granular, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.pour.flatwall: { folder: examples/granular, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.pour.heat: { folder: examples/granular, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 83.0, walltime_norm: 13.833333333333334 } +in.restitution: { folder: examples/granular, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 5.0, walltime_norm: 0.8333333333333334 } +in.micelle: { folder: examples/micelle, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 1 }, walltime: 0.0, walltime_norm: 0.0 } +in.micelle-rigid: { folder: examples/micelle, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.replicate.bond.x: { folder: examples/replicate, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.replicate.bond.x.noloop: { folder: examples/replicate, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.replicate.bond.x.y: { folder: examples/replicate, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.replicate.bond.xy: { folder: examples/replicate, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.replicate.cnt: { folder: examples/replicate, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 8.0, walltime_norm: 1.3333333333333333 } +in.srd.mixture: { folder: examples/srd, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.srd.pure: { folder: examples/srd, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.ttm: { folder: examples/ttm, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.ttm.grid: { folder: examples/ttm, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.ttm.mod: { folder: examples/ttm, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.colloid: { folder: examples/multi, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 0.0, walltime_norm: 0.0 } +in.granular: { folder: examples/multi, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.powerlaw: { folder: examples/multi, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.msst: { folder: examples/msst, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 6.0, walltime_norm: 1.0 } +in.gjf.vfull: { folder: examples/gjf, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.gjf.vhalf: { folder: examples/gjf, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.spin.cobalt_fcc: { folder: examples/SPIN/cobalt_fcc, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.spin.nickel: { folder: examples/SPIN/nickel, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.spin.nickel_cubic: { folder: examples/SPIN/nickel, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.spin.cobalt_hcp: { folder: examples/SPIN/cobalt_hcp, status: "completed", failed_checks: { abs_diff_failed: 4, rel_diff_failed: 4 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.spin.iron: { folder: examples/SPIN/iron, status: "completed", failed_checks: { abs_diff_failed: 4, rel_diff_failed: 4 }, walltime: 0.0, walltime_norm: 0.0 } +in.spin.iron_cubic: { folder: examples/SPIN/iron, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 0.0, walltime_norm: 0.0 } +in.gneb.skyrmion: { folder: examples/SPIN/gneb/skyrmion, status: "failed, ERROR: Did not assign all atoms correctly (src/read_data.cpp:1562).", walltime: -1 } +in.gneb.iron: { folder: examples/SPIN/gneb/iron, status: "failed, ERROR: Cannot use NEBSpin with a single replica (src/SPIN/neb_spin.cpp:133).", walltime: -1 } +in.spin.read_data: { folder: examples/SPIN/read_restart, status: "failed, no Total wall time in the output, -------------------------------------------------------------------------- +MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD +with errorcode 1. + +NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. +You may or may not see output from other processes, depending on +exactly when Open MPI kills them. +-------------------------------------------------------------------------- +", walltime: -1 } +in.spin.restart: { folder: examples/SPIN/read_restart, status: "failed, ERROR: Invalid flag in force field section of restart file (src/read_restart.cpp:948).", walltime: -1 } +in.spin.write_restart: { folder: examples/SPIN/read_restart, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.spin.bfo_min: { folder: examples/SPIN/spinmin, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 6.0, walltime_norm: 1.0 } +in.spin.bfo_min_cg: { folder: examples/SPIN/spinmin, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 7.0, walltime_norm: 1.1666666666666667 } +in.spin.bfo_min_lbfgs: { folder: examples/SPIN/spinmin, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.spin.iron_min: { folder: examples/SPIN/spinmin, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.spin.setforce: { folder: examples/SPIN/setforce_spin, status: "failed, no Total wall time in the output, [fv-az1014-42:16323] *** Process received signal *** +[fv-az1014-42:16323] Signal: Segmentation fault (11) +[fv-az1014-42:16323] Signal code: Address not mapped (1) +[fv-az1014-42:16323] Failing at address: 0x390 +[fv-az1014-42:16323] [ 0] /lib/x86_64-linux-gnu/libc.so.6(+0x42520)[0x7f09e7842520] +[fv-az1014-42:16323] [ 1] /home/runner/work/lammps/lammps/build/lmp(_ZN9LAMMPS_NS11ComputeSpin14compute_vectorEv+0x2d8)[0x5590ad415268] +[fv-az1014-42:16323] [ 2] /home/runner/work/lammps/lammps/build/lmp(_ZN9LAMMPS_NS8Variable8evaluateEPcPPNS0_4TreeEi+0x6e7f)[0x5590ad0078ef] +[fv-az1014-42:16323] [ 3] /home/runner/work/lammps/lammps/build/lmp(_ZN9LAMMPS_NS8Variable13compute_equalEi+0x22b)[0x5590ad00d2ab] +[fv-az1014-42:16323] [ 4] /home/runner/work/lammps/lammps/build/lmp(_ZN9LAMMPS_NS6Thermo16compute_variableEv+0x5b)[0x5590acfbfa6b] +[fv-az1014-42:16323] [ 5] /home/runner/work/lammps/lammps/build/lmp(_ZN9LAMMPS_NS6Thermo7computeEi+0x203)[0x5590acfc9dc3] +[fv-az1014-42:16323] [ 6] /home/runner/work/lammps/lammps/build/lmp(_ZN9LAMMPS_NS6Output5setupEi+0x64)[0x5590acf57f14] +[fv-az1014-42:16323] [ 7] /home/runner/work/lammps/lammps/build/lmp(_ZN9LAMMPS_NS3Min5setupEi+0x57d)[0x5590acee421d] +[fv-az1014-42:16323] [ 8] /home/runner/work/lammps/lammps/build/lmp(_ZN9LAMMPS_NS8Minimize7commandEiPPc+0x1d7)[0x5590acee5a67] +[fv-az1014-42:16323] [ 9] /home/runner/work/lammps/lammps/build/lmp(_ZN9LAMMPS_NS5Input15execute_commandEv+0xb1d)[0x5590ace91b9d] +[fv-az1014-42:16323] [10] /home/runner/work/lammps/lammps/build/lmp(_ZN9LAMMPS_NS5Input4fileEv+0x19e)[0x5590ace91f5e] +[fv-az1014-42:16323] [11] /home/runner/work/lammps/lammps/build/lmp(main+0x51)[0x5590ace7ed41] +[fv-az1014-42:16323] [12] /lib/x86_64-linux-gnu/libc.so.6(+0x29d90)[0x7f09e7829d90] +[fv-az1014-42:16323] [13] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80)[0x7f09e7829e40] +[fv-az1014-42:16323] [14] /home/runner/work/lammps/lammps/build/lmp(_start+0x25)[0x5590ace834e5] +[fv-az1014-42:16323] *** End of error message *** +Segmentation fault (core dumped) +", walltime: -1 } +in.spin.bfo: { folder: examples/SPIN/bfo, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 7.0, walltime_norm: 1.1666666666666667 } +in.spin.iron_dipole_cut: { folder: examples/SPIN/dipole_spin, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 6.0, walltime_norm: 1.0 } +in.spin.iron_dipole_ewald: { folder: examples/SPIN/dipole_spin, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 0 }, walltime: 20.0, walltime_norm: 3.3333333333333335 } +in.spin.iron_dipole_pppm: { folder: examples/SPIN/dipole_spin, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.spin.iron-nve: { folder: examples/SPIN/test_problems/validation_nve, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 19.0, walltime_norm: 3.1666666666666665 } +in.spin.nvt_lattice: { folder: examples/SPIN/test_problems/validation_nvt, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 95.0, walltime_norm: 15.833333333333334 } +in.spin.nvt_spin: { folder: examples/SPIN/test_problems/validation_nvt, status: "failed, ERROR: Fix langevin period must be > 0.0 (src/fix_langevin.cpp:80).", walltime: -1 } +in.mliap.ace.compute: { folder: examples/mliap, status: "completed, but no Step nor Loop in the output.", walltime: 0.0, walltime_norm: 0.0 } +in.mliap.nn.Cu: { folder: examples/mliap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.mliap.nn.Ta06A: { folder: examples/mliap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.mliap.pytorch.Ta06A: { folder: examples/mliap, status: "failed, ERROR: Using pair_style mliap model mliappy requires ML-IAP with python support (src/ML-IAP/pair_mliap.cpp:173).", walltime: -1 } +in.mliap.pytorch.ace: { folder: examples/mliap, status: "failed, ERROR: Using pair_style mliap model mliappy requires ML-IAP with python support (src/ML-IAP/pair_mliap.cpp:173).", walltime: -1 } +in.mliap.pytorch.ace.NN: { folder: examples/mliap, status: "failed, ERROR: Using pair_style mliap model mliappy requires ML-IAP with python support (src/ML-IAP/pair_mliap.cpp:173).", walltime: -1 } +in.mliap.pytorch.relu1hidden: { folder: examples/mliap, status: "failed, ERROR: Using pair_style mliap model mliappy requires ML-IAP with python support (src/ML-IAP/pair_mliap.cpp:173).", walltime: -1 } +in.mliap.quadratic.compute: { folder: examples/mliap, status: "failed, no Total wall time in the output, munmap_chunk(): invalid pointer +[fv-az1014-42:16535] *** Process received signal *** +[fv-az1014-42:16535] Signal: Aborted (6) +[fv-az1014-42:16535] Signal code: (-6) +corrupted double-linked list +Aborted (core dumped) +", walltime: -1 } +in.mliap.snap.Ta06A: { folder: examples/mliap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.mliap.snap.WBe.PRB2019: { folder: examples/mliap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.mliap.snap.chem: { folder: examples/mliap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 15.0, walltime_norm: 2.5 } +in.mliap.snap.compute: { folder: examples/mliap, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.mliap.snap.quadratic: { folder: examples/mliap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.mliap.so3.Ni_Mo: { folder: examples/mliap, status: "completed, but no Step nor Loop in the output.", walltime: 0.0, walltime_norm: 0.0 } +in.mliap.so3.nn.Si: { folder: examples/mliap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 3.0, walltime_norm: 0.5 } +in.mliap.unified.lj.Ar: { folder: examples/mliap, status: "failed, ERROR: Could not process Python string: .", walltime: -1 } +in.run: { folder: examples/mliap/jax, status: "failed, ERROR: Using pair_style mliap unified requires ML-IAP with python support (src/ML-IAP/pair_mliap.cpp:213).", walltime: -1 } +in.eim: { folder: examples/eim, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 3.0, walltime_norm: 0.5 } +in.shear: { folder: examples/shear, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.shear.void: { folder: examples/shear, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 3.0, walltime_norm: 0.5 } +in.aimd.alone: { folder: examples/mdi, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.aimd.driver: { folder: examples/mdi, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.aimd.driver.plugin: { folder: examples/mdi, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.aimd.engine: { folder: examples/mdi, status: "failed, unknown command, package not installed, ERROR: Unknown command: mdi engine (src/input.cpp:314)", walltime: -1 } +in.aimdpy.mm: { folder: examples/mdi, status: "failed, unknown command, package not installed, ERROR: Unknown command: mdi engine (src/input.cpp:314)", walltime: -1 } +in.aimdpy.qm: { folder: examples/mdi, status: "failed, unknown command, package not installed, ERROR: Unknown command: mdi engine (src/input.cpp:314)", walltime: -1 } +in.sequence.python: { folder: examples/mdi, status: "failed, unknown command, package not installed, ERROR: Unknown command: mdi engine (src/input.cpp:314)", walltime: -1 } +in.series.alone: { folder: examples/mdi, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.series.driver: { folder: examples/mdi, status: "failed, unknown command, package not installed, ERROR: Unknown command: mdi connect (src/input.cpp:314)", walltime: -1 } +in.series.driver.plugin: { folder: examples/mdi, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.series.engine: { folder: examples/mdi, status: "failed, unknown command, package not installed, ERROR: Unknown command: mdi engine (src/input.cpp:314)", walltime: -1 } +in.snapshot.alone: { folder: examples/mdi, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.snapshot.driver: { folder: examples/mdi, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.snapshot.driver.plugin: { folder: examples/mdi, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.snapshot.engine: { folder: examples/mdi, status: "failed, unknown command, package not installed, ERROR: Unknown command: mdi engine (src/input.cpp:314)", walltime: -1 } +in.lammps: { folder: examples/PACKAGES/dpd-smooth/2d-diffusion, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 57.0, walltime_norm: 9.5 } +in.lammps: { folder: examples/PACKAGES/dpd-smooth/2d-diffusion-in-shear-flow, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 102.0, walltime_norm: 17.0 } +in.lammps: { folder: examples/PACKAGES/dpd-smooth/equipartition-verification, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 41.0, walltime_norm: 6.833333333333333 } +in.fitpod: { folder: examples/PACKAGES/pod/InP, status: "failed, ERROR: Cannot fit potential without data files. The data paths may not be valid. Please check the data paths in the POD data file. (src/ML-POD/fitpod_command.cpp:718).", walltime: -1 } +in.pod: { folder: examples/PACKAGES/pod/InP, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.fitpod: { folder: examples/PACKAGES/pod/Ta, status: "completed, but no Step nor Loop in the output.", walltime: 0.0, walltime_norm: 0.0 } +in.pod: { folder: examples/PACKAGES/pod/Ta, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.pod.compute: { folder: examples/PACKAGES/pod/Ta, status: "failed, ERROR: Per-atom data too large (src/ML-POD/compute_podd_atom.cpp:62).", walltime: -1 } +in.duplex2: { folder: examples/PACKAGES/cgdna/examples/real_units/oxRNA2/duplex2, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 1 }, walltime: 22.0, walltime_norm: 3.6666666666666665 } +in.duplex2: { folder: examples/PACKAGES/cgdna/examples/real_units/oxRNA2/potential_file, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 1 }, walltime: 19.0, walltime_norm: 3.1666666666666665 } +in.duplex2: { folder: examples/PACKAGES/cgdna/examples/real_units/oxDNA/duplex2, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 21.0, walltime_norm: 3.5 } +in.duplex1: { folder: examples/PACKAGES/cgdna/examples/real_units/oxDNA/duplex1, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.duplex1: { folder: examples/PACKAGES/cgdna/examples/real_units/oxDNA/potential_file, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.duplex2: { folder: examples/PACKAGES/cgdna/examples/real_units/oxDNA2/duplex2, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 24.0, walltime_norm: 4.0 } +in.duplex1: { folder: examples/PACKAGES/cgdna/examples/real_units/oxDNA2/duplex1, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.dsring: { folder: examples/PACKAGES/cgdna/examples/real_units/oxDNA2/dsring, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 46.0, walltime_norm: 7.666666666666667 } +in.duplex1: { folder: examples/PACKAGES/cgdna/examples/real_units/oxDNA2/potential_file, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.duplex4.4type: { folder: examples/PACKAGES/cgdna/examples/real_units/oxDNA2/unique_bp, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 51.0, walltime_norm: 8.5 } +in.duplex4.8type: { folder: examples/PACKAGES/cgdna/examples/real_units/oxDNA2/unique_bp, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 50.0, walltime_norm: 8.333333333333334 } +in.duplex3: { folder: examples/PACKAGES/cgdna/examples/real_units/oxDNA2/duplex3, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.duplex2: { folder: examples/PACKAGES/cgdna/examples/lj_units/oxRNA2/duplex2, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 19.0, walltime_norm: 3.1666666666666665 } +in.duplex2: { folder: examples/PACKAGES/cgdna/examples/lj_units/oxRNA2/potential_file, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 19.0, walltime_norm: 3.1666666666666665 } +in.duplex2: { folder: examples/PACKAGES/cgdna/examples/lj_units/oxDNA/duplex2, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 22.0, walltime_norm: 3.6666666666666665 } +in.duplex1: { folder: examples/PACKAGES/cgdna/examples/lj_units/oxDNA/duplex1, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.duplex1: { folder: examples/PACKAGES/cgdna/examples/lj_units/oxDNA/potential_file, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.duplex2: { folder: examples/PACKAGES/cgdna/examples/lj_units/oxDNA2/duplex2, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 25.0, walltime_norm: 4.166666666666667 } +in.duplex1: { folder: examples/PACKAGES/cgdna/examples/lj_units/oxDNA2/duplex1, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.dsring: { folder: examples/PACKAGES/cgdna/examples/lj_units/oxDNA2/dsring, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 46.0, walltime_norm: 7.666666666666667 } +in.duplex1: { folder: examples/PACKAGES/cgdna/examples/lj_units/oxDNA2/potential_file, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.duplex4.4type: { folder: examples/PACKAGES/cgdna/examples/lj_units/oxDNA2/unique_bp, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 50.0, walltime_norm: 8.333333333333334 } +in.duplex4.8type: { folder: examples/PACKAGES/cgdna/examples/lj_units/oxDNA2/unique_bp, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 50.0, walltime_norm: 8.333333333333334 } +in.duplex3: { folder: examples/PACKAGES/cgdna/examples/lj_units/oxDNA2/duplex3, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.temper_npt: { folder: examples/PACKAGES/temper_npt, status: "failed, ERROR: World variable count doesn't match # of partitions (src/variable.cpp:255).", walltime: -1 } +in.peptide-plumed: { folder: examples/PACKAGES/plumed, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'plumed' is part of the PLUMED package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.methanol: { folder: examples/PACKAGES/bocs, status: "completed", failed_checks: { abs_diff_failed: 4, rel_diff_failed: 4 }, walltime: 23.0, walltime_norm: 3.8333333333333335 } +in.pedone.melt: { folder: examples/PACKAGES/pedone, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 2 }, walltime: 13.0, walltime_norm: 2.1666666666666665 } +in.pedone.relax: { folder: examples/PACKAGES/pedone, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 15.0, walltime_norm: 2.5 } +in.methanol_implicit_water: { folder: examples/PACKAGES/local_density/methanol_implicit_water, status: "completed, but no Step nor Loop in the output.", walltime: 62.0, walltime_norm: 10.333333333333334 } +in.benzene_water: { folder: examples/PACKAGES/local_density/benzene_water, status: "completed, but no Step nor Loop in the output.", walltime: 25.0, walltime_norm: 4.166666666666667 } +in.gauss-diel: { folder: examples/PACKAGES/gauss_diel, status: "completed, error parsing log.lammps into YAML", walltime: 8.0, walltime_norm: 1.3333333333333333 } +in.gauss-diel-cg: { folder: examples/PACKAGES/gauss_diel, status: "completed, error parsing log.lammps into YAML", walltime: 3.0, walltime_norm: 0.5 } +in.gauss-diel-split: { folder: examples/PACKAGES/gauss_diel, status: "completed, error parsing log.lammps into YAML", walltime: 3.0, walltime_norm: 0.5 } +in.alloy: { folder: examples/PACKAGES/alchemy, status: "failed, ERROR: World variable count doesn't match # of partitions (src/variable.cpp:255).", walltime: -1 } +in.twowater: { folder: examples/PACKAGES/alchemy, status: "failed, ERROR: World variable count doesn't match # of partitions (src/variable.cpp:255).", walltime: -1 } +in.sds-hybrid: { folder: examples/PACKAGES/cgspica/sds-monolayer, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 6.0, walltime_norm: 1.0 } +in.sds-regular: { folder: examples/PACKAGES/cgspica/sds-monolayer, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 6.0, walltime_norm: 1.0 } +in.pegc12e8: { folder: examples/PACKAGES/cgspica/peg-verlet, status: "completed, error parsing log.lammps into YAML", walltime: 69.0, walltime_norm: 11.5 } +in.pegc12e8-angle: { folder: examples/PACKAGES/cgspica/peg-verlet, status: "completed, error parsing log.lammps into YAML", walltime: 69.0, walltime_norm: 11.5 } +in.hkust1: { folder: examples/PACKAGES/mofff, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.hkust1_long: { folder: examples/PACKAGES/mofff, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.e3b-tip4p2005: { folder: examples/PACKAGES/e3b, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.uf3.Nb: { folder: examples/PACKAGES/uf3, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.fep01.lmp: { folder: examples/PACKAGES/fep/CC-CO/fep01, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.fep10.lmp: { folder: examples/PACKAGES/fep/CC-CO/fep10, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.insertion: { folder: examples/PACKAGES/fep/C7inEthanol/fep01, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.deletion: { folder: examples/PACKAGES/fep/C7inEthanol/fep10, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.fep01.lmp: { folder: examples/PACKAGES/fep/CH4-CF4/fep01, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.fep10.lmp: { folder: examples/PACKAGES/fep/CH4-CF4/fep10, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.bar10.lmp: { folder: examples/PACKAGES/fep/CH4-CF4/bar10, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.bar01.lmp: { folder: examples/PACKAGES/fep/CH4-CF4/bar01, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.fep01.lmp: { folder: examples/PACKAGES/fep/CH4hyd/fep01, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.fdti01.lmp: { folder: examples/PACKAGES/fep/CH4hyd/fdti01, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.fep10.lmp: { folder: examples/PACKAGES/fep/CH4hyd/fep10, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.fdti10.lmp: { folder: examples/PACKAGES/fep/CH4hyd/fdti10, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.spce.lmp: { folder: examples/PACKAGES/fep/ta, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.gap: { folder: examples/PACKAGES/quip, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized pair style 'quip' is part of the ML-QUIP package which is not enabled in this LAMMPS binary. (src/force.cpp:275)", walltime: -1 } +in.molecular: { folder: examples/PACKAGES/quip, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized pair style 'quip' is part of the ML-QUIP package which is not enabled in this LAMMPS binary. (src/force.cpp:275)", walltime: -1 } +in.sw: { folder: examples/PACKAGES/quip, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized pair style 'quip' is part of the ML-QUIP package which is not enabled in this LAMMPS binary. (src/force.cpp:275)", walltime: -1 } +in.srp_react: { folder: examples/PACKAGES/srp_react, status: "failed, ERROR: Invalid bond type 0 for pair style srp (src/MISC/pair_srp.cpp:403).", walltime: -1 } +in.spce: { folder: examples/PACKAGES/manybody_table, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 5.0, walltime_norm: 0.8333333333333334 } +in.spce2: { folder: examples/PACKAGES/manybody_table, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 6.0, walltime_norm: 1.0 } +in.spce_sw: { folder: examples/PACKAGES/manybody_table, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 1 }, walltime: 5.0, walltime_norm: 0.8333333333333334 } +in.confined: { folder: examples/PACKAGES/dielectric, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.nopbc: { folder: examples/PACKAGES/dielectric, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.methane_qtb: { folder: examples/PACKAGES/qtb/methane_qtb, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 9.0, walltime_norm: 1.5 } +in.alpha_quartz_qtb: { folder: examples/PACKAGES/qtb/alpha_quartz_qtb, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.alpha_quartz_qbmsst: { folder: examples/PACKAGES/qtb/alpha_quartz_qbmsst, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 42.0, walltime_norm: 7.0 } +in.methane_qbmsst: { folder: examples/PACKAGES/qtb/methane_qbmsst, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 97.0, walltime_norm: 16.166666666666668 } +in.tmd: { folder: examples/PACKAGES/tmd, status: "completed, error parsing log.lammps into YAML", walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.meam-spline.Si: { folder: examples/PACKAGES/meam_spline, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.meam-spline.TiO2: { folder: examples/PACKAGES/meam_spline, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 79.0, walltime_norm: 13.166666666666666 } +in.silicon: { folder: examples/PACKAGES/phonon/dynamical_matrix_command/Silicon, status: "completed, but no Step nor Loop in the output.", walltime: 0.0, walltime_norm: 0.0 } +in.EAM3D: { folder: examples/PACKAGES/phonon/3-3D-FCC-Cu-EAM, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.disp: { folder: examples/PACKAGES/phonon/3-3D-FCC-Cu-EAM, status: "skipped", walltime: -2 } +in.disp2: { folder: examples/PACKAGES/phonon/3-3D-FCC-Cu-EAM, status: "skipped", walltime: -2 } +in.dos: { folder: examples/PACKAGES/phonon/3-3D-FCC-Cu-EAM, status: "skipped", walltime: -2 } +in.Ana: { folder: examples/PACKAGES/phonon/1-1D-mono, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 6.0, walltime_norm: 1.0 } +in.disp: { folder: examples/PACKAGES/phonon/1-1D-mono, status: "skipped", walltime: -2 } +in.Ana: { folder: examples/PACKAGES/phonon/2-1D-diatomic, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 17.0, walltime_norm: 2.8333333333333335 } +in.disp: { folder: examples/PACKAGES/phonon/2-1D-diatomic, status: "skipped", walltime: -2 } +in.disp: { folder: examples/PACKAGES/phonon/4-Graphene, status: "skipped", walltime: -2 } +in.graphene: { folder: examples/PACKAGES/phonon/4-Graphene, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.dpde-shardlow: { folder: examples/PACKAGES/dpd-react/dpde-shardlow, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.dpde-vv: { folder: examples/PACKAGES/dpd-react/dpde-vv, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 14.0, walltime_norm: 2.3333333333333335 } +in.dpd-shardlow: { folder: examples/PACKAGES/dpd-react/dpd-shardlow, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.dpd-vv: { folder: examples/PACKAGES/dpd-react/dpd-vv, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.dpdp-shardlow: { folder: examples/PACKAGES/dpd-react/dpdp-shardlow, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.multi-lucy: { folder: examples/PACKAGES/dpd-react/multi-lucy, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.dpdh-shardlow: { folder: examples/PACKAGES/dpd-react/dpdh-shardlow, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 3.0, walltime_norm: 0.5 } +in.dpdrx-shardlow: { folder: examples/PACKAGES/dpd-react/dpdrx-shardlow, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.GD: { folder: examples/PACKAGES/flow_gauss, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.basal: { folder: examples/PACKAGES/basal, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.cascade_AlCu: { folder: examples/PACKAGES/electron_stopping, status: "failed, ERROR: Must set 'extscalar' when setting 'scalar_flag' for fix electron/stopping/fit. Contact the developer. (src/fix.cpp:135).", walltime: -1 } +in.cascade_SiSi: { folder: examples/PACKAGES/electron_stopping, status: "failed, ERROR: Must set 'extscalar' when setting 'scalar_flag' for fix electron/stopping/fit. Contact the developer. (src/fix.cpp:135).", walltime: -1 } +in.elstop: { folder: examples/PACKAGES/electron_stopping, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 26.0, walltime_norm: 4.333333333333333 } +in.elstop.only: { folder: examples/PACKAGES/electron_stopping, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.chreg-acid: { folder: examples/PACKAGES/charge_regulation, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 1 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.chreg-acid-real: { folder: examples/PACKAGES/charge_regulation, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 1 }, walltime: 0.0, walltime_norm: 0.0 } +in.chreg-polymer: { folder: examples/PACKAGES/charge_regulation, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 1 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.adatom: { folder: examples/PACKAGES/agni, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 16.0, walltime_norm: 2.6666666666666665 } +in.vacancy: { folder: examples/PACKAGES/agni, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.bucky-plus-cnt: { folder: examples/PACKAGES/imd, status: "skipped", walltime: -2 } +in.bucky-plus-cnt-gpu: { folder: examples/PACKAGES/imd, status: "skipped", walltime: -2 } +in.deca-ala-solv-filter_imd: { folder: examples/PACKAGES/imd, status: "skipped", walltime: -2 } +in.deca-ala-solv_imd: { folder: examples/PACKAGES/imd, status: "skipped", walltime: -2 } +in.deca-ala_imd: { folder: examples/PACKAGES/imd, status: "skipped", walltime: -2 } +in.deca-ala_imd-gpu: { folder: examples/PACKAGES/imd, status: "skipped", walltime: -2 } +in.melt_imd: { folder: examples/PACKAGES/imd, status: "skipped", walltime: -2 } +in.melt_imd-gpu: { folder: examples/PACKAGES/imd, status: "skipped", walltime: -2 } +in.first: { folder: examples/PACKAGES/adios/rerun, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized dump style 'custom/adios' is part of the ADIOS package which is not enabled in this LAMMPS binary. (src/output.cpp:776)", walltime: -1 } +in.read_dump: { folder: examples/PACKAGES/adios/rerun, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized reader style 'adios' is part of the ADIOS package which is not enabled in this LAMMPS binary. (src/read_dump.cpp:236)", walltime: -1 } +in.rerun: { folder: examples/PACKAGES/adios/rerun, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized reader style 'adios' is part of the ADIOS package which is not enabled in this LAMMPS binary. (src/read_dump.cpp:236)", walltime: -1 } +in.adios_balance: { folder: examples/PACKAGES/adios/balance, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized dump style 'custom/adios' is part of the ADIOS package which is not enabled in this LAMMPS binary. (src/output.cpp:776)", walltime: -1 } +in.adios_balance2: { folder: examples/PACKAGES/adios/balance, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized reader style 'adios' is part of the ADIOS package which is not enabled in this LAMMPS binary. (src/read_dump.cpp:236)", walltime: -1 } +in.bcc0: { folder: examples/PACKAGES/mgpt, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized pair style 'mgpt' is part of the MGPT package which is not enabled in this LAMMPS binary. (src/force.cpp:275)", walltime: -1 } +in.vac0-bcc: { folder: examples/PACKAGES/mgpt, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized pair style 'mgpt' is part of the MGPT package which is not enabled in this LAMMPS binary. (src/force.cpp:275)", walltime: -1 } +in.vacmin-bcc: { folder: examples/PACKAGES/mgpt, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized pair style 'mgpt' is part of the MGPT package which is not enabled in this LAMMPS binary. (src/force.cpp:275)", walltime: -1 } +in.vtk: { folder: examples/PACKAGES/vtk, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized dump style 'vtk' is part of the VTK package which is not enabled in this LAMMPS binary. (src/output.cpp:776)", walltime: -1 } +in.vtp: { folder: examples/PACKAGES/vtk, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized dump style 'vtk' is part of the VTK package which is not enabled in this LAMMPS binary. (src/output.cpp:776)", walltime: -1 } +in.dpdext: { folder: examples/PACKAGES/dpd-basic/dpdext, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.dpd: { folder: examples/PACKAGES/dpd-basic/dpd, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 0.0, walltime_norm: 0.0 } +in.dpdext_tstat: { folder: examples/PACKAGES/dpd-basic/dpdext_tstat, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 30.0, walltime_norm: 5.0 } +in.dpd_tstat: { folder: examples/PACKAGES/dpd-basic/dpd_tstat, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.dpd_coul_slater_long: { folder: examples/PACKAGES/dpd-basic/dpd_coul_slater_long, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.piston: { folder: examples/PACKAGES/electrode/piston, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.cg: { folder: examples/PACKAGES/electrode/madelung, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.eta: { folder: examples/PACKAGES/electrode/madelung, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.eta_cg: { folder: examples/PACKAGES/electrode/madelung, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.eta_mix: { folder: examples/PACKAGES/electrode/madelung, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.ewald-ew2d: { folder: examples/PACKAGES/electrode/madelung, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.ewald-ew3dc: { folder: examples/PACKAGES/electrode/madelung, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.ewald-ffield: { folder: examples/PACKAGES/electrode/madelung, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.pppm-ew3dc: { folder: examples/PACKAGES/electrode/madelung, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.pppm-ffield: { folder: examples/PACKAGES/electrode/madelung, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.ffield: { folder: examples/PACKAGES/electrode/au-aq, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.tf: { folder: examples/PACKAGES/electrode/au-aq, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.conp: { folder: examples/PACKAGES/electrode/graph-il, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 96.0, walltime_norm: 16.0 } +in.conq: { folder: examples/PACKAGES/electrode/graph-il, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 90.0, walltime_norm: 15.0 } +in.conq2: { folder: examples/PACKAGES/electrode/graph-il, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 62.0, walltime_norm: 10.333333333333334 } +in.etypes: { folder: examples/PACKAGES/electrode/graph-il, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 58.0, walltime_norm: 9.666666666666666 } +in.ffield: { folder: examples/PACKAGES/electrode/graph-il, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 41.0, walltime_norm: 6.833333333333333 } +in.ramp: { folder: examples/PACKAGES/electrode/graph-il, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 60.0, walltime_norm: 10.0 } +in.thermo: { folder: examples/PACKAGES/electrode/graph-il, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 57.0, walltime_norm: 9.5 } +in.planar-ewald-ew2d: { folder: examples/PACKAGES/electrode/planar, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.planar-ewald-ew3dc: { folder: examples/PACKAGES/electrode/planar, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.planar-ewald-ffield: { folder: examples/PACKAGES/electrode/planar, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.planar-pppm-ew3dc: { folder: examples/PACKAGES/electrode/planar, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.planar-pppm-ffield: { folder: examples/PACKAGES/electrode/planar, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.convective_pulse: { folder: examples/PACKAGES/atc/drift_diffusion, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.ddm_schrodinger: { folder: examples/PACKAGES/atc/drift_diffusion, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.finite_well: { folder: examples/PACKAGES/atc/drift_diffusion, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.no_atoms_ddm: { folder: examples/PACKAGES/atc/drift_diffusion, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.null_material_ddm: { folder: examples/PACKAGES/atc/drift_diffusion, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.poisson1d_noatoms: { folder: examples/PACKAGES/atc/drift_diffusion, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.poisson2d_noatoms: { folder: examples/PACKAGES/atc/drift_diffusion, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.schrodinger-poisson2d_Jconstraint: { folder: examples/PACKAGES/atc/drift_diffusion, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.schrodinger-poisson2d_convective: { folder: examples/PACKAGES/atc/drift_diffusion, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.schrodinger-poisson2d_noatoms: { folder: examples/PACKAGES/atc/drift_diffusion, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.cb_biaxial: { folder: examples/PACKAGES/atc/cauchy_born, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.cb_shear: { folder: examples/PACKAGES/atc/cauchy_born, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.cb_unistrain: { folder: examples/PACKAGES/atc/cauchy_born, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.cb_unistrain_eam: { folder: examples/PACKAGES/atc/cauchy_born, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.cb_unistrain_eam_linear: { folder: examples/PACKAGES/atc/cauchy_born, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.cb_unistrain_linear: { folder: examples/PACKAGES/atc/cauchy_born, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.cb_volumetric: { folder: examples/PACKAGES/atc/cauchy_born, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.flying_cube: { folder: examples/PACKAGES/atc/cauchy_born, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.ftcb_constV: { folder: examples/PACKAGES/atc/cauchy_born, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.read_xref: { folder: examples/PACKAGES/atc/cauchy_born, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.consistency: { folder: examples/PACKAGES/atc/hardy, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.eam_kernel_convergence: { folder: examples/PACKAGES/atc/hardy, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.eam_unistrain_cell: { folder: examples/PACKAGES/atc/hardy, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.eam_unistrain_mesh: { folder: examples/PACKAGES/atc/hardy, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.eam_unistrain_qcylinder: { folder: examples/PACKAGES/atc/hardy, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.eam_unistrain_qsphere: { folder: examples/PACKAGES/atc/hardy, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.eam_unistrain_step: { folder: examples/PACKAGES/atc/hardy, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.eam_volume_stretch: { folder: examples/PACKAGES/atc/hardy, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.eshelby_static: { folder: examples/PACKAGES/atc/hardy, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.nvt: { folder: examples/PACKAGES/atc/hardy, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_fluids: { folder: examples/PACKAGES/atc/fluids, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.concentration: { folder: examples/PACKAGES/atc/fluids, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.conducting_interface: { folder: examples/PACKAGES/atc/fluids, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.dielectric_interface: { folder: examples/PACKAGES/atc/fluids, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.double_layer: { folder: examples/PACKAGES/atc/fluids, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.liquid_electrostatic: { folder: examples/PACKAGES/atc/fluids, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.opp_force: { folder: examples/PACKAGES/atc/fluids, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.poisson: { folder: examples/PACKAGES/atc/fluids, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.shear_flow: { folder: examples/PACKAGES/atc/fluids, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.shear_no_atoms: { folder: examples/PACKAGES/atc/fluids, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.harmonic_bonds: { folder: examples/PACKAGES/atc/molecule, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.polarize: { folder: examples/PACKAGES/atc/molecule, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.quartic_bonds: { folder: examples/PACKAGES/atc/molecule, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.water: { folder: examples/PACKAGES/atc/molecule, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d: { folder: examples/PACKAGES/atc/thermal, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_all_atoms: { folder: examples/PACKAGES/atc/thermal, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_combined: { folder: examples/PACKAGES/atc/thermal, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_flux: { folder: examples/PACKAGES/atc/thermal, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_frac_step: { folder: examples/PACKAGES/atc/thermal, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_hoover: { folder: examples/PACKAGES/atc/thermal, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_interpolate: { folder: examples/PACKAGES/atc/thermal, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_lumped: { folder: examples/PACKAGES/atc/thermal, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.no_atoms: { folder: examples/PACKAGES/atc/thermal, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.gaussianIC1d_hex: { folder: examples/PACKAGES/atc/mesh, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.gaussianIC2d_hex: { folder: examples/PACKAGES/atc/mesh, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.gaussianIC2d_hex20_uniform: { folder: examples/PACKAGES/atc/mesh, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.gaussianIC2d_hex27_uniform: { folder: examples/PACKAGES/atc/mesh, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.gaussianIC2d_tet: { folder: examples/PACKAGES/atc/mesh, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.kernel2d_hex: { folder: examples/PACKAGES/atc/mesh, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.kernel2d_tet: { folder: examples/PACKAGES/atc/mesh, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.mesh2d_tet: { folder: examples/PACKAGES/atc/mesh, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.semicircle: { folder: examples/PACKAGES/atc/mesh, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d: { folder: examples/PACKAGES/atc/elastic, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_damped: { folder: examples/PACKAGES/atc/elastic, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_flux: { folder: examples/PACKAGES/atc/elastic, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_frac_step: { folder: examples/PACKAGES/atc/elastic, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_ghost_flux: { folder: examples/PACKAGES/atc/elastic, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_thermo_elastic: { folder: examples/PACKAGES/atc/elastic, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.eam_energy: { folder: examples/PACKAGES/atc/elastic, status: "failed, no Total wall time in the output, -------------------------------------------------------------------------- +MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD +with errorcode 1. + +NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. +You may or may not see output from other processes, depending on +exactly when Open MPI kills them. +-------------------------------------------------------------------------- +", walltime: -1 } +in.electron_density: { folder: examples/PACKAGES/atc/elastic, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.no_atoms: { folder: examples/PACKAGES/atc/elastic, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.no_atoms_cb: { folder: examples/PACKAGES/atc/elastic, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.no_atoms_cb_linear: { folder: examples/PACKAGES/atc/elastic, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.bar1d_ttm: { folder: examples/PACKAGES/atc/two_temperature, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.cutout: { folder: examples/PACKAGES/atc/two_temperature, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.gaussianIC_ttm: { folder: examples/PACKAGES/atc/two_temperature, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.no_atoms: { folder: examples/PACKAGES/atc/two_temperature, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.restart: { folder: examples/PACKAGES/atc/two_temperature, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.uniform_exchange: { folder: examples/PACKAGES/atc/two_temperature, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.uniform_heating: { folder: examples/PACKAGES/atc/two_temperature, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'atc' is part of the ATC package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.pits: { folder: examples/PACKAGES/latboltz/pit_geometry, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'lb/fluid' is part of the LATBOLTZ package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.polymer: { folder: examples/PACKAGES/latboltz/polymer, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'lb/fluid' is part of the LATBOLTZ package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.confined_colloids: { folder: examples/PACKAGES/latboltz/confined_colloid, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'lb/fluid' is part of the LATBOLTZ package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.trapnewsphere: { folder: examples/PACKAGES/latboltz/diffusingsphere, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'lb/fluid' is part of the LATBOLTZ package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.translocation: { folder: examples/PACKAGES/latboltz/translocation, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'lb/fluid' is part of the LATBOLTZ package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.toycar: { folder: examples/PACKAGES/latboltz/toycar, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.microrheology: { folder: examples/PACKAGES/latboltz/microrheology, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'lb/fluid' is part of the LATBOLTZ package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.dragtest: { folder: examples/PACKAGES/latboltz/dragforce, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'lb/fluid' is part of the LATBOLTZ package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.planewall: { folder: examples/PACKAGES/latboltz/planewall, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'lb/fluid' is part of the LATBOLTZ package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.compute: { folder: examples/PACKAGES/pace/compute, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.pace.product: { folder: examples/PACKAGES/pace, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 9.0, walltime_norm: 1.5 } +in.pace.recursive: { folder: examples/PACKAGES/pace, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 7.0, walltime_norm: 1.1666666666666667 } +in.addtorque: { folder: examples/PACKAGES/addtorque, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 3 }, walltime: 51.0, walltime_norm: 8.5 } +in.cnp: { folder: examples/PACKAGES/cnp, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 18.0, walltime_norm: 3.0 } +in.CH4fc.ang: { folder: examples/PACKAGES/eff/fixed-core/CH4, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 3.0, walltime_norm: 0.5 } +in.CH4fc.bohr: { folder: examples/PACKAGES/eff/fixed-core/CH4, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.CH4fc.spe.ang: { folder: examples/PACKAGES/eff/fixed-core/CH4, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.CH4fc.spe.bohr: { folder: examples/PACKAGES/eff/fixed-core/CH4, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.C2H6fc.ang: { folder: examples/PACKAGES/eff/fixed-core/C2H6, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.C2H6fc.bohr: { folder: examples/PACKAGES/eff/fixed-core/C2H6, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.ch4.dynamics: { folder: examples/PACKAGES/eff/CH4, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.ch4.min: { folder: examples/PACKAGES/eff/CH4, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.ch4_ionized.dynamics: { folder: examples/PACKAGES/eff/CH4, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 16.0, walltime_norm: 2.6666666666666665 } +in.Be-solid.spe: { folder: examples/PACKAGES/eff/Be-solid, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 14.0, walltime_norm: 2.3333333333333335 } +in.adamantane_ionized.nve: { folder: examples/PACKAGES/eff/Auger-Adamantane, status: "failed, ERROR: Lost atoms: original 101 current 100 (src/thermo.cpp:494).", walltime: -1 } +in.SiH4: { folder: examples/PACKAGES/eff/ECP/SiH4, status: "completed, error parsing log.lammps into YAML", walltime: 0.0, walltime_norm: 0.0 } +in.SiH4.ang: { folder: examples/PACKAGES/eff/ECP/SiH4, status: "completed, error parsing log.lammps into YAML", walltime: 0.0, walltime_norm: 0.0 } +in.Si2H6: { folder: examples/PACKAGES/eff/ECP/Si2H6, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.Si2H6.ang: { folder: examples/PACKAGES/eff/ECP/Si2H6, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.SiC: { folder: examples/PACKAGES/eff/ECP/SiC/bulk, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 31.0, walltime_norm: 5.166666666666667 } +in.h2bulk.npt: { folder: examples/PACKAGES/eff/H_plasma, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 46.0, walltime_norm: 7.666666666666667 } +in.h2bulk.nve: { folder: examples/PACKAGES/eff/H_plasma, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 78.0, walltime_norm: 13.0 } +in.h2bulk.nve.ang: { folder: examples/PACKAGES/eff/H_plasma, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 87.0, walltime_norm: 14.5 } +in.Li-dendritic.min: { folder: examples/PACKAGES/eff/Li-dendritic, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 35.0, walltime_norm: 5.833333333333333 } +in.Li-dendritic.nvt: { folder: examples/PACKAGES/eff/Li-dendritic, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 69.0, walltime_norm: 11.5 } +in.Li.ang: { folder: examples/PACKAGES/eff/Li-solid, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 74.0, walltime_norm: 12.333333333333334 } +in.Li.bohr: { folder: examples/PACKAGES/eff/Li-solid, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 53.0, walltime_norm: 8.833333333333334 } +in.h2: { folder: examples/PACKAGES/eff/H2, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.h_atom.spe.ang: { folder: examples/PACKAGES/eff/H, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.h_atom.spe.bohr: { folder: examples/PACKAGES/eff/H, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.npt_biaxial: { folder: examples/PACKAGES/uef/npt_biaxial, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 3.0, walltime_norm: 0.5 } +in.nvt_uniaxial: { folder: examples/PACKAGES/uef/nvt_uniaxial, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 3.0, walltime_norm: 0.5 } +in.crystal: { folder: examples/PACKAGES/rhok, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 23.0, walltime_norm: 3.8333333333333335 } +in.pinning: { folder: examples/PACKAGES/rhok, status: "failed, ERROR: Cannot open file data.halfhalf: No such file or directory (src/read_data.cpp:367).", walltime: -1 } +in.setup: { folder: examples/PACKAGES/rhok, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 17.0, walltime_norm: 2.8333333333333335 } +in.peptide-colvars: { folder: examples/PACKAGES/colvars, status: "completed, error parsing log.lammps into YAML", walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.peptide-colvars2: { folder: examples/PACKAGES/colvars, status: "completed, error parsing log.lammps into YAML", walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.peptide-spring: { folder: examples/PACKAGES/colvars, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.peptide-spring2: { folder: examples/PACKAGES/colvars, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.hdnnp: { folder: examples/PACKAGES/hdnnp, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized pair style 'hdnnp' is part of the ML-HDNNP package which is not enabled in this LAMMPS binary. (src/force.cpp:275)", walltime: -1 } +in.hybrid: { folder: examples/PACKAGES/hdnnp, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized pair style 'hdnnp' is part of the ML-HDNNP package which is not enabled in this LAMMPS binary. (src/force.cpp:275)", walltime: -1 } +in.edip-Si: { folder: examples/PACKAGES/edip, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.edip-Si-multi: { folder: examples/PACKAGES/edip, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.edip-SiC: { folder: examples/PACKAGES/edip, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.large_nylon_melt: { folder: examples/PACKAGES/reaction/nylon,6-6_melt, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 60.0, walltime_norm: 10.0 } +in.tiny_polystyrene.stabilized: { folder: examples/PACKAGES/reaction/tiny_polystyrene, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 18.0, walltime_norm: 3.0 } +in.tiny_epoxy.stabilized: { folder: examples/PACKAGES/reaction/tiny_epoxy, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 1 }, walltime: 0.0, walltime_norm: 0.0 } +in.grow_styrene: { folder: examples/PACKAGES/reaction/create_atoms_polystyrene, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 6.0, walltime_norm: 1.0 } +in.tiny_nylon.stabilized: { folder: examples/PACKAGES/reaction/tiny_nylon, status: "failed, unknown command, package not installed, ERROR: Unknown command: react rxn2 all 1 0.0 5.0 mol3 mol4 rxn1_stp2_map rescale_charges yes (src/input.cpp:314)", walltime: -1 } +in.tiny_nylon.stabilized_variable_probability: { folder: examples/PACKAGES/reaction/tiny_nylon, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 0.0, walltime_norm: 0.0 } +in.tiny_nylon.unstabilized: { folder: examples/PACKAGES/reaction/tiny_nylon, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 0.0, walltime_norm: 0.0 } +in.BulkNi: { folder: examples/PACKAGES/diffraction, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 158.0, walltime_norm: 26.333333333333332 } +in.tdpd: { folder: examples/PACKAGES/dpd-meso/tdpd, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 64.0, walltime_norm: 10.666666666666666 } +in.tdpd-region: { folder: examples/PACKAGES/dpd-meso/tdpd, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 63.0, walltime_norm: 10.5 } +in.mdpd: { folder: examples/PACKAGES/dpd-meso/mdpd, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 100.0, walltime_norm: 16.666666666666668 } +in.edpd: { folder: examples/PACKAGES/dpd-meso/edpd, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 87.0, walltime_norm: 14.5 } +in.edpd-region: { folder: examples/PACKAGES/dpd-meso/edpd, status: "completed", failed_checks: { abs_diff_failed: 6, rel_diff_failed: 6 }, walltime: 87.0, walltime_norm: 14.5 } +in.cylinder: { folder: examples/PACKAGES/stressprofile, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.flat: { folder: examples/PACKAGES/stressprofile, status: "failed, ERROR: Illegal compute stress/cartesian command: missing argument(s) (src/EXTRA-COMPUTE/compute_stress_cartesian.cpp:65).", walltime: -1 } +in.sphere: { folder: examples/PACKAGES/stressprofile, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.srp: { folder: examples/PACKAGES/srp, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 6.0, walltime_norm: 1.0 } +in.scafacos: { folder: examples/PACKAGES/scafacos, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized kspace style 'scafacos' is part of the SCAFACOS package which is not enabled in this LAMMPS binary. (src/force.cpp:660)", walltime: -1 } +in.scafacos.cw.ewald: { folder: examples/PACKAGES/scafacos, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized kspace style 'scafacos' is part of the SCAFACOS package which is not enabled in this LAMMPS binary. (src/force.cpp:660)", walltime: -1 } +in.scafacos.cw.fmm: { folder: examples/PACKAGES/scafacos, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized kspace style 'scafacos' is part of the SCAFACOS package which is not enabled in this LAMMPS binary. (src/force.cpp:660)", walltime: -1 } +in.scafacos.cw.p2nfft: { folder: examples/PACKAGES/scafacos, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized kspace style 'scafacos' is part of the SCAFACOS package which is not enabled in this LAMMPS binary. (src/force.cpp:660)", walltime: -1 } +in.scafacos.cw.p3m: { folder: examples/PACKAGES/scafacos, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized kspace style 'scafacos' is part of the SCAFACOS package which is not enabled in this LAMMPS binary. (src/force.cpp:660)", walltime: -1 } +in.scafacos.ewald: { folder: examples/PACKAGES/scafacos, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized kspace style 'scafacos' is part of the SCAFACOS package which is not enabled in this LAMMPS binary. (src/force.cpp:660)", walltime: -1 } +in.scafacos.fmm: { folder: examples/PACKAGES/scafacos, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized kspace style 'scafacos' is part of the SCAFACOS package which is not enabled in this LAMMPS binary. (src/force.cpp:660)", walltime: -1 } +in.scafacos.hsph.direct: { folder: examples/PACKAGES/scafacos, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized kspace style 'scafacos' is part of the SCAFACOS package which is not enabled in this LAMMPS binary. (src/force.cpp:660)", walltime: -1 } +in.scafacos.hsph.fmm: { folder: examples/PACKAGES/scafacos, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized kspace style 'scafacos' is part of the SCAFACOS package which is not enabled in this LAMMPS binary. (src/force.cpp:660)", walltime: -1 } +in.scafacos.hsph.p2nfft: { folder: examples/PACKAGES/scafacos, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized kspace style 'scafacos' is part of the SCAFACOS package which is not enabled in this LAMMPS binary. (src/force.cpp:660)", walltime: -1 } +in.scafacos.p2nfft: { folder: examples/PACKAGES/scafacos, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized kspace style 'scafacos' is part of the SCAFACOS package which is not enabled in this LAMMPS binary. (src/force.cpp:660)", walltime: -1 } +in.scafacos.p3m: { folder: examples/PACKAGES/scafacos, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized kspace style 'scafacos' is part of the SCAFACOS package which is not enabled in this LAMMPS binary. (src/force.cpp:660)", walltime: -1 } +in.h_atom: { folder: examples/PACKAGES/awpmd, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized atom style 'wavepacket' is part of the AWPMD package which is not enabled in this LAMMPS binary. (src/atom.cpp:745)", walltime: -1 } +in.h_molecule: { folder: examples/PACKAGES/awpmd, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized atom style 'wavepacket' is part of the AWPMD package which is not enabled in this LAMMPS binary. (src/atom.cpp:745)", walltime: -1 } +in.gold_gr: { folder: examples/PACKAGES/interlayer/saip_metal, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.atom-diffusion: { folder: examples/PACKAGES/interlayer/kolmogorov_crespi_z, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.bilayer-graphene: { folder: examples/PACKAGES/interlayer/kolmogorov_crespi_z, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.gr_water: { folder: examples/PACKAGES/interlayer/aip_water_2dm, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 19.0, walltime_norm: 3.1666666666666665 } +in.gr_water.opt: { folder: examples/PACKAGES/interlayer/aip_water_2dm, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.bilayer-graphene: { folder: examples/PACKAGES/interlayer/kolmogorov_crespi_full, status: "failed, mismatched columns in the log files", walltime: 121.0, walltime_norm: 20.166666666666668 } +in.CH_drip: { folder: examples/PACKAGES/interlayer/drip, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 1 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.C_drip: { folder: examples/PACKAGES/interlayer/drip, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.mos2: { folder: examples/PACKAGES/interlayer/ilp_tmds, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 1 }, walltime: 57.0, walltime_norm: 9.5 } +in.bilayer-graphene: { folder: examples/PACKAGES/interlayer/ilp_graphene_hbn, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 70.0, walltime_norm: 11.666666666666666 } +in.bilayer-hBN: { folder: examples/PACKAGES/interlayer/ilp_graphene_hbn, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 134.0, walltime_norm: 22.333333333333332 } +in.grhBN: { folder: examples/PACKAGES/interlayer/ilp_graphene_hbn, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 123.0, walltime_norm: 20.5 } +in.ilp_graphene_hbn: { folder: examples/PACKAGES/interlayer/ilp_graphene_hbn, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 129.0, walltime_norm: 21.5 } +in.smatbAgCuPancake: { folder: examples/PACKAGES/smtbq, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.smatbBulkFCC: { folder: examples/PACKAGES/smtbq, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.smtbq.Al: { folder: examples/PACKAGES/smtbq, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 3.0, walltime_norm: 0.5 } +in.smtbq.Al2O3: { folder: examples/PACKAGES/smtbq, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.smtbq.TiO2: { folder: examples/PACKAGES/smtbq, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.slater: { folder: examples/PACKAGES/slater, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.slcsa: { folder: examples/PACKAGES/sna_nnn_slcsa, status: "completed, error parsing log.lammps into YAML", walltime: 42.0, walltime_norm: 7.0 } +in.orient_eco: { folder: examples/PACKAGES/orient_eco, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 128.0, walltime_norm: 21.333333333333332 } +in.entropy: { folder: examples/PACKAGES/entropy, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 13.0, walltime_norm: 2.1666666666666665 } +in.bpti: { folder: examples/PACKAGES/filter_corotate, status: "completed, error parsing log.lammps into YAML", walltime: 24.0, walltime_norm: 4.0 } +in.peptide: { folder: examples/PACKAGES/filter_corotate, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 98.0, walltime_norm: 16.333333333333332 } +in.graphene: { folder: examples/PACKAGES/ipi, status: "failed, no Total wall time in the output, -------------------------------------------------------------------------- +MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD +with errorcode 1. + +NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. +You may or may not see output from other processes, depending on +exactly when Open MPI kills them. +-------------------------------------------------------------------------- +", walltime: -1 } +in.gREM-npt: { folder: examples/PACKAGES/grem/lj-single, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.gREM-nvt: { folder: examples/PACKAGES/grem/lj-single, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.gREM: { folder: examples/PACKAGES/grem/lj-6rep, status: "failed, ERROR: Cannot open file restart_file: No such file or directory (src/read_data.cpp:367).", walltime: -1 } +in.gREM-temper: { folder: examples/PACKAGES/grem/lj-temper, status: "failed, ERROR: World variable count doesn't match # of partitions (src/variable.cpp:255).", walltime: -1 } +in.compute_stress_mop: { folder: examples/PACKAGES/mop, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.fix_wall: { folder: examples/PACKAGES/ees, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.fix_wall_region: { folder: examples/PACKAGES/ees, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.ti_spring: { folder: examples/PACKAGES/ti, status: "failed, no Total wall time in the output, -------------------------------------------------------------------------- +MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD +with errorcode 1. + +NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. +You may or may not see output from other processes, depending on +exactly when Open MPI kills them. +-------------------------------------------------------------------------- +", walltime: -1 } +in.extep-bn: { folder: examples/PACKAGES/extep, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 0.0, walltime_norm: 0.0 } +in.toluene.lang: { folder: examples/PACKAGES/drude/toluene, status: "completed", failed_checks: { abs_diff_failed: 4, rel_diff_failed: 5 }, walltime: 68.0, walltime_norm: 11.333333333333334 } +in.toluene.nh: { folder: examples/PACKAGES/drude/toluene, status: "completed", failed_checks: { abs_diff_failed: 5, rel_diff_failed: 5 }, walltime: 68.0, walltime_norm: 11.333333333333334 } +in.butane.lang: { folder: examples/PACKAGES/drude/butane, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 50.0, walltime_norm: 8.333333333333334 } +in.butane.nh: { folder: examples/PACKAGES/drude/butane, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 5 }, walltime: 49.0, walltime_norm: 8.166666666666666 } +in.butane.tgnh: { folder: examples/PACKAGES/drude/butane, status: "completed", failed_checks: { abs_diff_failed: 4, rel_diff_failed: 4 }, walltime: 49.0, walltime_norm: 8.166666666666666 } +in.swm4-ndp.lang: { folder: examples/PACKAGES/drude/swm4-ndp, status: "completed", failed_checks: { abs_diff_failed: 5, rel_diff_failed: 5 }, walltime: 65.0, walltime_norm: 10.833333333333334 } +in.swm4-ndp.nh: { folder: examples/PACKAGES/drude/swm4-ndp, status: "completed", failed_checks: { abs_diff_failed: 5, rel_diff_failed: 5 }, walltime: 54.0, walltime_norm: 9.0 } +in.ethylene_glycol: { folder: examples/PACKAGES/drude/ethylene_glycol, status: "completed", failed_checks: { abs_diff_failed: 4, rel_diff_failed: 4 }, walltime: 25.0, walltime_norm: 4.166666666666667 } +in.ethanol.lang: { folder: examples/PACKAGES/drude/ethanol, status: "completed", failed_checks: { abs_diff_failed: 5, rel_diff_failed: 5 }, walltime: 43.0, walltime_norm: 7.166666666666667 } +in.ethanol.nh: { folder: examples/PACKAGES/drude/ethanol, status: "completed", failed_checks: { abs_diff_failed: 5, rel_diff_failed: 5 }, walltime: 42.0, walltime_norm: 7.0 } +in.ethanol.tgnh: { folder: examples/PACKAGES/drude/ethanol, status: "completed", failed_checks: { abs_diff_failed: 5, rel_diff_failed: 5 }, walltime: 44.0, walltime_norm: 7.333333333333333 } +in.force: { folder: examples/PACKAGES/tally, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.pe: { folder: examples/PACKAGES/tally, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.stress: { folder: examples/PACKAGES/tally, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.system: { folder: examples/PACKAGES/momb, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 13.0, walltime_norm: 2.1666666666666665 } +in.momentum: { folder: examples/PACKAGES/momentum, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 41.0, walltime_norm: 6.833333333333333 } +in.alpha: { folder: examples/PACKAGES/meam_sw_spline/Ti, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.alpha_relaxation: { folder: examples/PACKAGES/meam_sw_spline/Ti, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.beta: { folder: examples/PACKAGES/meam_sw_spline/Ti, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.energy_conservation.meam.sw: { folder: examples/PACKAGES/meam_sw_spline/Ti, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 74.0, walltime_norm: 12.333333333333334 } +in.fcc: { folder: examples/PACKAGES/meam_sw_spline/Ti, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.hexagonal: { folder: examples/PACKAGES/meam_sw_spline/Ti, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.omega: { folder: examples/PACKAGES/meam_sw_spline/Ti, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.single_atom: { folder: examples/PACKAGES/meam_sw_spline/Ti, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.bcc: { folder: examples/PACKAGES/meam_sw_spline/Si, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.bcc_relax: { folder: examples/PACKAGES/meam_sw_spline/Si, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.dc: { folder: examples/PACKAGES/meam_sw_spline/Si, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.dc_relax: { folder: examples/PACKAGES/meam_sw_spline/Si, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.energy_conservation.meam.sw: { folder: examples/PACKAGES/meam_sw_spline/Si, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.fcc: { folder: examples/PACKAGES/meam_sw_spline/Si, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.fcc_relax: { folder: examples/PACKAGES/meam_sw_spline/Si, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.hcp_relax: { folder: examples/PACKAGES/meam_sw_spline/Si, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.sc: { folder: examples/PACKAGES/meam_sw_spline/Si, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.sc_relax: { folder: examples/PACKAGES/meam_sw_spline/Si, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.single_atom: { folder: examples/PACKAGES/meam_sw_spline/Si, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.film_mesocnt: { folder: examples/PACKAGES/mesont, status: "failed, no Total wall time in the output, -------------------------------------------------------------------------- +MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD +with errorcode 1. + +NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. +You may or may not see output from other processes, depending on +exactly when Open MPI kills them. +-------------------------------------------------------------------------- +", walltime: -1 } +in.cauchystat: { folder: examples/PACKAGES/cauchy, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 1 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.rubber_strip_pull: { folder: examples/PACKAGES/machdyn/rubber_strip_pull, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.aluminum_strip_pull: { folder: examples/PACKAGES/machdyn/aluminum_strip_pull, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.funnel_flow: { folder: examples/PACKAGES/machdyn/funnel_flow, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 29.0, walltime_norm: 4.833333333333333 } +in.fluid_structure_interaction: { folder: examples/PACKAGES/machdyn/fluid_structure_interaction, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 32.0, walltime_norm: 5.333333333333333 } +in.rubber_rings_3d: { folder: examples/PACKAGES/machdyn/rubber_rings_3d, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 21.0, walltime_norm: 3.5 } +in.h2o-quantum: { folder: examples/PACKAGES/gle, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 13.0, walltime_norm: 2.1666666666666665 } +in.h2o-smart: { folder: examples/PACKAGES/gle, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 13.0, walltime_norm: 2.1666666666666665 } +in.pafi: { folder: examples/PACKAGES/pafi, status: "failed, no Total wall time in the output, -------------------------------------------------------------------------- +MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD +with errorcode 1. + +NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. +You may or may not see output from other processes, depending on +exactly when Open MPI kills them. +-------------------------------------------------------------------------- +", walltime: -1 } +in.scp: { folder: examples/PACKAGES/pimd/prot-hairpin, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 15.0, walltime_norm: 2.5 } +in.scp: { folder: examples/PACKAGES/pimd/para-h2, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 6.0, walltime_norm: 1.0 } +in.lmp: { folder: examples/PACKAGES/pimd/langevin_reduced_units, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.langevin.metal: { folder: examples/PACKAGES/pimd/langevin_metal_units, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 0.0, walltime_norm: 0.0 } +in.pimd-langevin.metal: { folder: examples/PACKAGES/pimd/langevin_metal_units, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 0.0, walltime_norm: 0.0 } +in.rann: { folder: examples/PACKAGES/rann, status: "failed, no Total wall time in the output, -------------------------------------------------------------------------- +MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD +with errorcode 1. + +NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. +You may or may not see output from other processes, depending on +exactly when Open MPI kills them. +-------------------------------------------------------------------------- +", walltime: -1 } +in.msd.2d: { folder: examples/DIFFUSE, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 36.0, walltime_norm: 6.0 } +in.vacf.2d: { folder: examples/DIFFUSE, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 39.0, walltime_norm: 6.5 } +in.numdiff: { folder: examples/numdiff, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.bpm.pour: { folder: examples/bpm/pour, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.bpm.impact.rotational: { folder: examples/bpm/impact, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 102.0, walltime_norm: 17.0 } +in.bpm.impact.spring: { folder: examples/bpm/impact, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 12.0, walltime_norm: 2.0 } +in.rheo.balloon: { folder: examples/rheo/balloon, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.rheo.oxidation: { folder: examples/rheo/oxidation, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.rheo.taylor.green: { folder: examples/rheo/taylor-green, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 113.0, walltime_norm: 18.833333333333332 } +in.rheo.ice.cubes: { folder: examples/rheo/ice-cubes, status: "failed, no Total wall time in the output, -------------------------------------------------------------------------- +MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD +with errorcode 1. + +NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. +You may or may not see output from other processes, depending on +exactly when Open MPI kills them. +-------------------------------------------------------------------------- +", walltime: -1 } +in.rheo.poiseuille: { folder: examples/rheo/poiseuille, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 29.0, walltime_norm: 4.833333333333333 } +in.rheo.dam.break: { folder: examples/rheo/dam-break, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 159.0, walltime_norm: 26.5 } +in.peptide: { folder: examples/peptide, status: "completed, error parsing log.lammps into YAML", walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.coreshell: { folder: examples/coreshell, status: "completed", failed_checks: { abs_diff_failed: 7, rel_diff_failed: 9 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.coreshell.dsf: { folder: examples/coreshell, status: "completed", failed_checks: { abs_diff_failed: 7, rel_diff_failed: 8 }, walltime: 20.0, walltime_norm: 3.3333333333333335 } +in.coreshell.thermostats: { folder: examples/coreshell, status: "completed", failed_checks: { abs_diff_failed: 12, rel_diff_failed: 14 }, walltime: 14.0, walltime_norm: 2.3333333333333335 } +in.coreshell.wolf: { folder: examples/coreshell, status: "completed", failed_checks: { abs_diff_failed: 5, rel_diff_failed: 5 }, walltime: 22.0, walltime_norm: 3.6666666666666665 } +in.marble_race: { folder: examples/mesh, status: "completed", failed_checks: { abs_diff_failed: 5, rel_diff_failed: 5 }, walltime: 131.0, walltime_norm: 21.833333333333332 } +in.mesh_box: { folder: examples/mesh, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.abcfire: { folder: examples/fire, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.abcfire_mod: { folder: examples/fire, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.cg: { folder: examples/fire, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.fire: { folder: examples/fire, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.fire_mod: { folder: examples/fire, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.meam.abcfire: { folder: examples/fire, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 43.0, walltime_norm: 7.166666666666667 } +in.meam.fire: { folder: examples/fire, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 62.0, walltime_norm: 10.333333333333334 } +in.neb.sivac.abcfire: { folder: examples/fire, status: "failed, ERROR: Cannot use NEB with a single replica (src/REPLICA/neb.cpp:141).", walltime: -1 } +in.neb.sivac.abcfire_mod: { folder: examples/fire, status: "failed, ERROR: Cannot use NEB with a single replica (src/REPLICA/neb.cpp:141).", walltime: -1 } +in.neb.sivac.fire: { folder: examples/fire, status: "failed, ERROR: Cannot use NEB with a single replica (src/REPLICA/neb.cpp:141).", walltime: -1 } +in.neb.sivac.fire_mod: { folder: examples/fire, status: "failed, ERROR: Cannot use NEB with a single replica (src/REPLICA/neb.cpp:141).", walltime: -1 } +in.neb.sivac.qm: { folder: examples/fire, status: "failed, ERROR: Cannot use NEB with a single replica (src/REPLICA/neb.cpp:141).", walltime: -1 } +in.bcc.orthog: { folder: examples/triclinic, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.bcc.primitive: { folder: examples/triclinic, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.data.general: { folder: examples/triclinic, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.fcc.orthog: { folder: examples/triclinic, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.fcc.primitive: { folder: examples/triclinic, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.hex.orthog: { folder: examples/triclinic, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.hex.primitive: { folder: examples/triclinic, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.sq2.orthog: { folder: examples/triclinic, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.sq2.primitive: { folder: examples/triclinic, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.tri.srd: { folder: examples/ASPHERE/tri, status: "completed", failed_checks: { abs_diff_failed: 4, rel_diff_failed: 4 }, walltime: 143.0, walltime_norm: 23.833333333333332 } +in.star: { folder: examples/ASPHERE/star, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 12.0, walltime_norm: 2.0 } +in.star.mp: { folder: examples/ASPHERE/star, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 12.0, walltime_norm: 2.0 } +in.box: { folder: examples/ASPHERE/box, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 3 }, walltime: 18.0, walltime_norm: 3.0 } +in.box.mp: { folder: examples/ASPHERE/box, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 19.0, walltime_norm: 3.1666666666666665 } +in.dimer: { folder: examples/ASPHERE/dimer, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 6.0, walltime_norm: 1.0 } +in.dimer.mp: { folder: examples/ASPHERE/dimer, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 16.0, walltime_norm: 2.6666666666666665 } +in.vesicle: { folder: examples/ASPHERE/vesicle, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 9.0, walltime_norm: 1.5 } +in.line: { folder: examples/ASPHERE/line, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.line.srd: { folder: examples/ASPHERE/line, status: "failed, no Total wall time in the output, -------------------------------------------------------------------------- +MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD +with errorcode 1. + +NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. +You may or may not see output from other processes, depending on +exactly when Open MPI kills them. +-------------------------------------------------------------------------- +", walltime: -1 } +in.poly: { folder: examples/ASPHERE/poly, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 8.0, walltime_norm: 1.3333333333333333 } +in.poly.mp: { folder: examples/ASPHERE/poly, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 8.0, walltime_norm: 1.3333333333333333 } +in.flat_membrane: { folder: examples/ASPHERE/flat_membrane, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 7.0, walltime_norm: 1.1666666666666667 } +in.ellipsoid: { folder: examples/ASPHERE/ellipsoid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 9.0, walltime_norm: 1.5 } +in.ellipsoid.mp: { folder: examples/ASPHERE/ellipsoid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 9.0, walltime_norm: 1.5 } +in.ubiquitin: { folder: examples/amoeba, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 12.0, walltime_norm: 2.0 } +in.water_box.amoeba: { folder: examples/amoeba, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 8.0, walltime_norm: 1.3333333333333333 } +in.water_box.hippo: { folder: examples/amoeba, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 6.0, walltime_norm: 1.0 } +in.water_dimer.amoeba: { folder: examples/amoeba, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.water_dimer.hippo: { folder: examples/amoeba, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 1 }, walltime: 0.0, walltime_norm: 0.0 } +in.water_hexamer.amoeba: { folder: examples/amoeba, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 1 }, walltime: 0.0, walltime_norm: 0.0 } +in.water_hexamer.hippo: { folder: examples/amoeba, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 1 }, walltime: 0.0, walltime_norm: 0.0 } +in.nb3b: { folder: examples/nb3b, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 5.0, walltime_norm: 0.8333333333333334 } +in.nb3b.screened: { folder: examples/nb3b, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 29.0, walltime_norm: 4.833333333333333 } +in.min: { folder: examples/min, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.min.box: { folder: examples/min, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.balance: { folder: examples/balance, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.balance.bond.fast: { folder: examples/balance, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.balance.bond.slow: { folder: examples/balance, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.balance.clock.dynamic: { folder: examples/balance, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 16.0, walltime_norm: 2.6666666666666665 } +in.balance.clock.static: { folder: examples/balance, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 6.0, walltime_norm: 1.0 } +in.balance.group.dynamic: { folder: examples/balance, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.balance.group.static: { folder: examples/balance, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.balance.kspace: { folder: examples/balance, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 6.0, walltime_norm: 1.0 } +in.balance.neigh.dynamic: { folder: examples/balance, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 16.0, walltime_norm: 2.6666666666666665 } +in.balance.neigh.rcb: { folder: examples/balance, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.balance.neigh.static: { folder: examples/balance, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.balance.var.dynamic: { folder: examples/balance, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 16.0, walltime_norm: 2.6666666666666665 } +in.ch4: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.ch4.plugin: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.graphene: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.graphene.plugin: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.series: { folder: examples/QUANTUM/LATTE, status: "failed, unknown command, package not installed, ERROR: Unknown command: mdi connect (src/input.cpp:314)", walltime: -1 } +in.series.plugin: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.sucrose: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.sucrose.plugin: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.uo2: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.uo2.plugin: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.water: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.water.min: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.water.min.plugin: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.water.plugin: { folder: examples/QUANTUM/LATTE, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.mixture.mm: { folder: examples/QUANTUM/PySCF, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.mixture.qmmm: { folder: examples/QUANTUM/PySCF, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qmmm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.mixture.qmmm.plugin: { folder: examples/QUANTUM/PySCF, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qmmm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.water.qmmm: { folder: examples/QUANTUM/PySCF, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qmmm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.water.qmmm.plugin: { folder: examples/QUANTUM/PySCF, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qmmm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.series: { folder: examples/QUANTUM/NWChem, status: "failed, unknown command, package not installed, ERROR: Unknown command: mdi connect (src/input.cpp:314)", walltime: -1 } +in.series.plugin: { folder: examples/QUANTUM/NWChem, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.water.mm: { folder: examples/QUANTUM/NWChem, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.water.qmmm: { folder: examples/QUANTUM/NWChem, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qmmm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.water.qmmm.plugin: { folder: examples/QUANTUM/NWChem, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qmmm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.zeolite.mm: { folder: examples/QUANTUM/NWChem, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.zeolite.qmmm: { folder: examples/QUANTUM/NWChem, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qmmm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.zeolite.qmmm.plugin: { folder: examples/QUANTUM/NWChem, status: "failed, unrecognized command, package not installed, ERROR: Unrecognized fix style 'mdi/qmmm' is part of the MDI package which is not enabled in this LAMMPS binary. (src/modify.cpp:924)", walltime: -1 } +in.wall.ccl: { folder: examples/wall, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.wall.diffusive: { folder: examples/wall, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.wall.flow: { folder: examples/wall, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 5.0, walltime_norm: 0.8333333333333334 } +in.wall.lepton: { folder: examples/wall, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.wall.maxwell: { folder: examples/wall, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.wall.specular: { folder: examples/wall, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.wall.table: { folder: examples/wall, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.meam: { folder: examples/meam, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.meam.shear: { folder: examples/meam, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 31.0, walltime_norm: 5.166666666666667 } +in.msmeam: { folder: examples/meam/msmeam, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.hugoniostat: { folder: examples/hugoniostat, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.comb.Cu: { folder: examples/comb, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.comb.Cu2O.elastic: { folder: examples/comb, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 21.0, walltime_norm: 3.5 } +in.comb.HfO2: { folder: examples/comb, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.comb.Si: { folder: examples/comb, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.comb.Si.elastic: { folder: examples/comb, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.comb3: { folder: examples/comb, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.tad: { folder: examples/tad, status: "failed, ERROR: Cannot use TAD with a single replica for NEB (src/REPLICA/tad.cpp:79).", walltime: -1 } +in.controller.temp: { folder: examples/controller, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 6.0, walltime_norm: 1.0 } +in.controller.wall: { folder: examples/controller, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 19.0, walltime_norm: 3.1666666666666665 } +in.reaxff.rdx: { folder: examples/reaxff, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 0.0, walltime_norm: 0.0 } +in.reaxff.rdx-shielded: { folder: examples/reaxff, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.reaxff.tatb: { folder: examples/reaxff, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 2 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.reaxff.tatb-shielded: { folder: examples/reaxff, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 2 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.ci-reax.CH: { folder: examples/reaxff/ci-reaxFF, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 12.0, walltime_norm: 2.0 } +in.reaxff.hns: { folder: examples/reaxff/HNS, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 20.0, walltime_norm: 3.3333333333333335 } +in.VOH: { folder: examples/reaxff/VOH, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 2 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.water.acks2: { folder: examples/reaxff/water, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 13.0, walltime_norm: 2.1666666666666665 } +in.water.acks2.field: { folder: examples/reaxff/water, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 17.0, walltime_norm: 2.8333333333333335 } +in.water.qeq: { folder: examples/reaxff/water, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 6.0, walltime_norm: 1.0 } +in.water.qeq.field: { folder: examples/reaxff/water, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 5.0, walltime_norm: 0.8333333333333334 } +in.ZnOH2: { folder: examples/reaxff/ZnOH2, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.FC: { folder: examples/reaxff/FC, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 15.0, walltime_norm: 2.5 } +in.RDX: { folder: examples/reaxff/RDX, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 6.0, walltime_norm: 1.0 } +in.AuO: { folder: examples/reaxff/AuO, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 6.0, walltime_norm: 1.0 } +in.CHO: { folder: examples/reaxff/CHO, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 2 }, walltime: 3.0, walltime_norm: 0.5 } +in.FeOH3: { folder: examples/reaxff/FeOH3, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.AB: { folder: examples/reaxff/AB, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.grid.2d: { folder: examples/grid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.grid.3d: { folder: examples/grid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.sph: { folder: examples/grid, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 36.0, walltime_norm: 6.0 } +in.yaml: { folder: examples/yaml, status: "completed, error parsing log.lammps into YAML", walltime: 3.0, walltime_norm: 0.5 } +in.hBN_shift: { folder: examples/tersoff, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.tersoff: { folder: examples/tersoff, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.friction: { folder: examples/friction, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.cmap: { folder: examples/cmap, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 1 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.dipole: { folder: examples/dipole, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.colloid: { folder: examples/colloid, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.streitz.ewald: { folder: examples/streitz, status: "completed", failed_checks: { abs_diff_failed: 1, rel_diff_failed: 2 }, walltime: 53.0, walltime_norm: 8.833333333333334 } +in.streitz.wolf: { folder: examples/streitz, status: "failed, mismatched columns in the log files", walltime: 57.0, walltime_norm: 9.5 } +in.neb.hop1: { folder: examples/neb, status: "failed, ERROR: Cannot use NEB with a single replica (src/REPLICA/neb.cpp:141).", walltime: -1 } +in.neb.hop1.end: { folder: examples/neb, status: "failed, ERROR: Cannot use NEB with a single replica (src/REPLICA/neb.cpp:141).", walltime: -1 } +in.neb.hop2: { folder: examples/neb, status: "failed, ERROR: Cannot use NEB with a single replica (src/REPLICA/neb.cpp:141).", walltime: -1 } +in.neb.sivac: { folder: examples/neb, status: "failed, ERROR: Cannot use NEB with a single replica (src/REPLICA/neb.cpp:141).", walltime: -1 } +in.fix_python_invoke: { folder: examples/python, status: "failed, ERROR: Could not process Python string: .", walltime: -1 } +in.fix_python_invoke_neighlist: { folder: examples/python, status: "failed, ERROR: Could not process Python string: .", walltime: -1 } +in.fix_python_move_nve_melt: { folder: examples/python, status: "failed, ERROR: Loading python integrator module failure (src/PYTHON/fix_python_move.cpp:64).", walltime: -1 } +in.fix_python_move_nve_melt_opt: { folder: examples/python, status: "failed, ERROR: Loading python integrator module failure (src/PYTHON/fix_python_move.cpp:64).", walltime: -1 } +in.pair_python_coulomb: { folder: examples/python, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 3.0, walltime_norm: 0.5 } +in.pair_python_harmonic: { folder: examples/python, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 45.0, walltime_norm: 7.5 } +in.pair_python_hybrid: { folder: examples/python, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 3 }, walltime: 13.0, walltime_norm: 2.1666666666666665 } +in.pair_python_long: { folder: examples/python, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 4.0, walltime_norm: 0.6666666666666666 } +in.pair_python_melt: { folder: examples/python, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 3 }, walltime: 28.0, walltime_norm: 4.666666666666667 } +in.pair_python_spce: { folder: examples/python, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.pair_python_table: { folder: examples/python, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.python: { folder: examples/python, status: "failed, ERROR on proc 0: Python evaluation of function loop failed (src/PYTHON/python_impl.cpp:384).", walltime: -1 } +in.bcc: { folder: examples/steinhardt, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.fcc: { folder: examples/steinhardt, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.icos: { folder: examples/steinhardt, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.kim-ex.melt: { folder: examples/kim, status: "failed, unknown command, package not installed, ERROR: Unknown command: kim init LennardJones_Ar real (src/input.cpp:314)", walltime: -1 } +in.kim-pm-property: { folder: examples/kim, status: "failed, unknown command, package not installed, ERROR: Unknown command: kim init LJ_Shifted_Bernardes_1958MedCutoff_Ar__MO_126566794224_004 metal (src/input.cpp:314)", walltime: -1 } +in.kim-pm-query.melt: { folder: examples/kim, status: "failed, unknown command, package not installed, ERROR: Unknown command: kim init SW_StillingerWeber_1985_Si__MO_405512056662_005 real (src/input.cpp:314)", walltime: -1 } +in.kim-pm.melt: { folder: examples/kim, status: "failed, unknown command, package not installed, ERROR: Unknown command: kim init SW_StillingerWeber_1985_Si__MO_405512056662_005 real (src/input.cpp:314)", walltime: -1 } +in.kim-query: { folder: examples/kim, status: "failed, unknown command, package not installed, ERROR: Unknown command: kim init EAM_Dynamo_ErcolessiAdams_1994_Al__MO_123629422045_005 metal (src/input.cpp:314)", walltime: -1 } +in.kim-sm.melt: { folder: examples/kim, status: "failed, unknown command, package not installed, ERROR: Unknown command: kim init Sim_LAMMPS_ReaxFF_StrachanVanDuinChakraborty_2003_CHNO__SM_107643900657_000 real (src/input.cpp:314)", walltime: -1 } +in.lammps.melt: { folder: examples/kim, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.ellipse.gayberne: { folder: examples/ellipse, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.ellipse.resquared: { folder: examples/ellipse, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 2 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.cos.1000SPCE: { folder: examples/VISCOSITY, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 36.0, walltime_norm: 6.0 } +in.einstein.2d: { folder: examples/VISCOSITY, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 39.0, walltime_norm: 6.5 } +in.gk.2d: { folder: examples/VISCOSITY, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 39.0, walltime_norm: 6.5 } +in.mp.2d: { folder: examples/VISCOSITY, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 5.0, walltime_norm: 0.8333333333333334 } +in.nemd.2d: { folder: examples/VISCOSITY, status: "completed", failed_checks: { abs_diff_failed: 8, rel_diff_failed: 8 }, walltime: 17.0, walltime_norm: 2.8333333333333335 } +in.wall.2d: { folder: examples/VISCOSITY, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 10.0, walltime_norm: 1.6666666666666667 } +in.gcmc.co2: { folder: examples/mc, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.gcmc.h2o: { folder: examples/mc, status: "completed", failed_checks: { abs_diff_failed: 8, rel_diff_failed: 8 }, walltime: 138.0, walltime_norm: 23.0 } +in.gcmc.lj: { folder: examples/mc, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 11.0, walltime_norm: 1.8333333333333333 } +in.mixed: { folder: examples/mc, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 57.0, walltime_norm: 9.5 } +in.pure: { folder: examples/mc, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 57.0, walltime_norm: 9.5 } +in.sgcmc.eam: { folder: examples/mc, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 43.0, walltime_norm: 7.166666666666667 } +in.widom.lj: { folder: examples/mc, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 8.0, walltime_norm: 1.3333333333333333 } +in.widom.spce: { folder: examples/mc, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 44.0, walltime_norm: 7.333333333333333 } +in.mc: { folder: examples/MC-LOOP, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.flow.couette: { folder: examples/flow, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.flow.pois: { folder: examples/flow, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.prd: { folder: examples/prd, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 3.0, walltime_norm: 0.5 } +in.C_SNAP: { folder: examples/snap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 34.0, walltime_norm: 5.666666666666667 } +in.grid.snap: { folder: examples/snap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.grid.tri: { folder: examples/snap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.snap.InP.JCPA2020: { folder: examples/snap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 15.0, walltime_norm: 2.5 } +in.snap.Mo_Chen: { folder: examples/snap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.snap.Ta06A: { folder: examples/snap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.snap.W.2940: { folder: examples/snap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.snap.WBe.PRB2019: { folder: examples/snap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.snap.compute: { folder: examples/snap, status: "completed, but no Step nor Loop in the output.", walltime: 0.0, walltime_norm: 0.0 } +in.snap.compute.quadratic: { folder: examples/snap, status: "completed, but no Step nor Loop in the output.", walltime: 0.0, walltime_norm: 0.0 } +in.snap.hybrid.WSNAP.HePair: { folder: examples/snap, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.snap.scale.Ni_Zuo_JCPA2020: { folder: examples/snap, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 3.0, walltime_norm: 0.5 } +in.lammps: { folder: examples/COUPLE/lammps_spparks, status: "failed, ERROR: Cannot open file data.lammps: No such file or directory (src/read_data.cpp:367).", walltime: -1 } +in.spparks: { folder: examples/COUPLE/lammps_spparks, status: "failed, unknown command, package not installed, ERROR: Unknown command: seed 56789 (src/input.cpp:314)", walltime: -1 } +in.lj: { folder: examples/COUPLE/plugin, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.fix_external: { folder: examples/COUPLE/python, status: "completed, but no Step nor Loop in the output.", walltime: 0.0, walltime_norm: 0.0 } +in.chain: { folder: examples/COUPLE/multiple, status: "failed, no Total wall time in the output, -------------------------------------------------------------------------- +MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD +with errorcode 1. + +NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. +You may or may not see output from other processes, depending on +exactly when Open MPI kills them. +-------------------------------------------------------------------------- +", walltime: -1 } +in.lj: { folder: examples/COUPLE/simple, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.body: { folder: examples/body, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.cubes: { folder: examples/body, status: "completed", failed_checks: { abs_diff_failed: 2, rel_diff_failed: 2 }, walltime: 36.0, walltime_norm: 6.0 } +in.pour3d: { folder: examples/body, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.squares: { folder: examples/body, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 3.0, walltime_norm: 0.5 } +in.wall2d: { folder: examples/body, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 2.0, walltime_norm: 0.3333333333333333 } +in.atm: { folder: examples/atm, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 13.0, walltime_norm: 2.1666666666666665 } +in.ar.lj: { folder: examples/UNITS, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.ar.metal: { folder: examples/UNITS, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.ar.real: { folder: examples/UNITS, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.mos2-bulk: { folder: examples/threebody, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.mos2.rebomos: { folder: examples/threebody, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 21.0, walltime_norm: 3.5 } +in.mos2.sw.mod: { folder: examples/threebody, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.threebody: { folder: examples/threebody, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 1.0, walltime_norm: 0.16666666666666666 } +in.nemd: { folder: examples/nemd, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 0.0, walltime_norm: 0.0 } +in.obstacle: { folder: examples/obstacle, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 0.0, walltime_norm: 0.0 } +in.crack: { folder: examples/crack, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 3.0, walltime_norm: 0.5 } +in.elastic: { folder: examples/ELASTIC, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 0.0, walltime_norm: 0.0 } +in.peri-pmb: { folder: examples/peri, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 9.0, walltime_norm: 1.5 } +in.peri.eps: { folder: examples/peri, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 21.0, walltime_norm: 3.5 } +in.peri.lps: { folder: examples/peri, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 17.0, walltime_norm: 2.8333333333333335 } +in.peri.pmb: { folder: examples/peri, status: "completed", failed_checks: { abs_diff_failed: 0, rel_diff_failed: 0 }, walltime: 9.0, walltime_norm: 1.5 } +in.peri.ves: { folder: examples/peri, status: "completed", failed_checks: { abs_diff_failed: 3, rel_diff_failed: 3 }, walltime: 21.0, walltime_norm: 3.5 } +in.hyper.global: { folder: examples/hyper, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 53.0, walltime_norm: 8.833333333333334 } +in.hyper.local: { folder: examples/hyper, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 13.0, walltime_norm: 2.1666666666666665 } +in.spce: { folder: examples/rdf-adf, status: "completed", failed_checks: { abs_diff_failed: 6, rel_diff_failed: 6 }, walltime: 88.0, walltime_norm: 14.666666666666666 } +in.elastic: { folder: examples/ELASTIC_T/BORN_MATRIX/Silicon, status: "completed, error parsing log.lammps into YAML", walltime: 62.0, walltime_norm: 10.333333333333334 } +in.ljcov: { folder: examples/ELASTIC_T/BORN_MATRIX/Argon/Analytical, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.ljcov: { folder: examples/ELASTIC_T/BORN_MATRIX/Argon/Numdiff, status: "failed, no Total wall time in the output, timeout (180s expired)", walltime: -1 } +in.elastic: { folder: examples/ELASTIC_T/DEFORMATION/Silicon, status: "completed, numerical checks skipped due to missing the reference log file", walltime: 6.0, walltime_norm: 1.0 } diff --git a/tools/regression-tests/run_tests.py b/tools/regression-tests/run_tests.py old mode 100644 new mode 100755 index b2144478ec..63fa8c59c1 --- a/tools/regression-tests/run_tests.py +++ b/tools/regression-tests/run_tests.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 ''' -UPDATE: August 13, 2024: +UPDATE: September 4, 2024: Launching the LAMMPS binary under testing using a configuration defined in a yaml file (e.g. config.yaml). Comparing the output thermo with that in the existing log file (with the same nprocs) + data in the log files are extracted and converted into yaml data structure @@ -9,55 +9,81 @@ UPDATE: August 13, 2024: With the current features, users can: + specify which LAMMPS binary version to test (e.g., the version from a commit, or those from `lammps-testing`) + specify the examples subfolders (thus the reference log files) seperately (e.g. from other LAMMPS versions or commits) + + specify the list of examples input scripts to test + specify tolerances for individual quantities for any input script to override the global values - + launch tests with `mpirun` with all supported command line features (multiple procs, multiple paritions, and suffices) + + launch tests with `mpirun` with all supported command line features (multiple procs, multiple paritions, and suffixes) + skip certain input files (whose names match specified patterns) if not interested, or packaged not installed, or no reference log file exists - + simplify the main LAMMPS builds, as long as a LAMMPS binary is available - + keep track of the testing progress to resume the testing from the last checkpoint (skipping completed runs) - + distribute the input list across multiple processes via multiprocessing, or - split the list of input scripts into separate runs (there are 800+ input script under the top-level examples) + + set a timeout for every input script run if they may take too long + + skip numerical checks if the goal is just to check if the runs do not fail + +Some benefits include: + + + separating regression testing from building LAMMPS + + performing quick and full regression tests + + keeping track of the testing progress to resume the testing from the last checkpoint (skipping completed runs) + + distributing the input list across multiple processes by + splitting the list of input scripts into separate runs (there are ~800 input scripts under the top-level examples) + + generating new reference log files if desirable + +Input arguments: + + the path to a LAMMPS binary (can be relative to the working directory) + + a test configuration file (see tools/regression-tests/config.yaml for an example) + + a text file that lists of folders where the input scripts reside and how many of them line by line, or + a text file that list of input scripts, or + the path to the top-level examples + +Output: + + failure.yaml : list of the failed runs and reasons + + progress.yaml: full testing results of the tested input scripts with the status (completed, failed or skipped) + with error messages (for failed runs), and walltime (in seconds) + + output.xml : testing results in the JUnit XML format + + run.log : screen output and error of individual runs Limitations: - input scripts use thermo style multi (e.g., examples/peptide) do not work with the expected thermo output format - input scripts that require partition runs (e.g. examples/neb) need a separate config file, e.g. args: "--partition 3x1" - testing accelerator packages (GPU, INTEL, KOKKOS, OPENMP) need separate config files, "args: -sf omp -pk omp 4" -TODO: - + be able to be invoked from run_tests in the lammps-testing infrastruture - The following Python packages need to be installed into an activated environment: - + python3 -m venv testing-env source testing-env/bin/activate pip install numpy pyyaml junit_xml -Example usage: +Example usage (aka, tests for this script): 1) Simple use (using the provided tools/regression-tests/config.yaml and the examples/ folder at the top level) - python3 run_tests.py --lmp-bin=/path/to/lmp_binary + python3 run_tests.py --lmp-bin=build/lmp --config-file=tools/regression-tests/config.yaml 2) Use a custom testing configuration python3 run_tests.py --lmp-bin=/path/to/lmp_binary --config-file=/path/to/config/file/config.yaml 3) Specify a list of example folders python3 run_tests.py --lmp-bin=/path/to/lmp_binary --config-file=/path/to/config/file/config.yaml \ - --example-folders="/path/to/examples/folder1;/path/to/examples/folder2" + --example-folders="/path/to/examples/melt;/path/to/examples/rigid" - The example folders can also be loaded from a text file list_subfolders1.txt: + The example subfolders can also be loaded from a text file list_subfolders1.txt: python3 run_tests.py --lmp-bin=/path/to/lmp_binary --config-file=/path/to/config/file/config.yaml \ - --list-input=list_subfolders1.txt --output-file=output1.txt --progress-file=progress1.yaml \ + --list-subfolders=list_subfolders1.txt --output-file=output1.txt --progress-file=progress1.yaml \ --log-file=run1.log - - 4) Test a LAMMPS binary with the whole top-level /examples folder in a LAMMPS source tree - python3 run_tests.py --lmp-bin=/path/to/lmp_binary --examples-top-level=/path/to/lammps/examples - 5) Analyze the LAMMPS binary annd whole top-level /examples folder in a LAMMPS source tree + 4) Specify a list of example input scripts (e.g. obtained from running tools/regression-tests/get-quick-list.py) + python3 run_tests.py --lmp-bin=/path/to/lmp_binary --config-file=/path/to/config/file/config.yaml \ + --list-input=input_list.txt + + 5) Test a LAMMPS binary with the whole top-level /examples folder in a LAMMPS source tree + python3 run_tests.py --lmp-bin=/path/to/lmp_binary --examples-top-level=/path/to/lammps/examples + --config-file=tools/regression-tests/config_serial.yaml + + 6) Analyze the LAMMPS binary and whole top-level /examples folder in a LAMMPS source tree and generate separate input lists for 8 workers: python3 run_tests.py --lmp-bin=/path/to/lmp_binary --examples-top-level=/path/to/lammps/examples \ --analyze --num-workers=8 - This is used for splitting the subfolders into separate input lists and launching different instances - of run_tests.py simultaneously. + The output of this run is 8 files folder-list-[0-7].txt that lists the subfolders + and 8 files input-list-[0-7].txt that lists the input scripts under the top-level example folders. + With these lists, one can launch multiple instances of run_tests.py simultaneously + each with a list of example subfolders (Case 3), or with a list of input scripts (Case 4). ''' from argparse import ArgumentParser @@ -65,8 +91,10 @@ import datetime import fnmatch import logging import os +import random import re import subprocess +import sys #from multiprocessing import Pool # need "pip install numpy pyyaml" @@ -81,6 +109,13 @@ try: except ImportError: from yaml import SafeLoader as Loader +# infer top level LAMMPS dir from filename +LAMMPS_DIR = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', '..')) + +# import git interface module +sys.path.append(os.path.realpath(os.path.join(LAMMPS_DIR, 'tools', 'regression-tests'))) +import get_quick_list + ''' data structure to store the test result ''' @@ -95,20 +130,21 @@ class TestResult: ''' Iterate over a list of input folders and scripts using the given lmp_binary and the testing configuration - lmp_binary : full path to the LAMMPS binary + lmp_binary : full path to the LAMMPS binary input_folder : the absolute path to the input files input_list : list of the input scripts under the input_folder config : the dict that contains the test configuration - - output_buf: placeholder for storing the output of a given worker + walltime_ref : reference walltime return results : a list of TestResult objects stat : a dictionary that lists the number of passed, skipped, failed tests progress_file: yaml file that stores the tested input script and status + failure_file : file that reports the failed runs (a subset of progress_file) last_progress: the dictionary that shows the status of the last tests + output_buf: placeholder for storing the output of a given worker ''' -def iterate(lmp_binary, input_folder, input_list, config, results, progress_file, last_progress=None, output_buf=None): +def iterate(lmp_binary, input_folder, input_list, config, results, progress_file, failure_file, walltime_ref=1, verbose=False, last_progress=None, output_buf=None): num_tests = len(input_list) num_completed = 0 @@ -122,10 +158,15 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file using_markers = False EPSILON = np.float64(config['epsilon']) nugget = float(config['nugget']) + genref = config['genref'] + compiler = config['compiler'] use_valgrind = False if 'valgrind' in config['mpiexec']: use_valgrind = True + # record all the failed runs + failure = open(failure_file, "a") + # iterate over the input scripts for input in input_list: @@ -135,13 +176,18 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file else: progress = open(progress_file, "w") + # walltime = -2: skipped tests + # -1: failed tests + # >= 0: walltime in seconds (e.g. in.melt walltime = 0.2 seconds) + walltime = -2 + # skip the input file if listed in the config file or matched with a pattern if 'skip' in config: if input in config['skip']: msg = " + " + input + f" ({test_id+1}/{num_tests}): skipped as specified in {configFileName}" print(msg) logger.info(msg) - progress.write(f"{input}: {{ folder: {input_folder}, status: \"skipped\" }}\n") + progress.write(f"{input}: {{ folder: {input_folder}, status: \"skipped\", walltime: {walltime} }}\n") progress.close() num_skipped = num_skipped + 1 test_id = test_id + 1 @@ -150,6 +196,7 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file matched_pattern = False for skipped_files in config['skip']: if '*' in skipped_files: + # check input script name e.g. in.*_imd* if fnmatch.fnmatch(input, skipped_files): matched_pattern = True break @@ -158,7 +205,7 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file msg = " + " + input + f" ({test_id+1}/{num_tests}): skipped as specified in {configFileName}" print(msg) logger.info(msg) - progress.write(f"{input}: {{ folder: {input_folder}, status: \"skipped\" }}\n") + progress.write(f"{input}: {{ folder: {input_folder}, status: \"skipped\", walltime: {walltime} }}\n") progress.close() num_skipped = num_skipped + 1 test_id = test_id + 1 @@ -176,7 +223,7 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file num_skipped = num_skipped + 1 test_id = test_id + 1 continue - + if 'packaged not installed' in status: msg = " + " + input + f" ({test_id+1}/{num_tests}): due to package not installed (see {progress_file})" logger.info(msg) @@ -186,14 +233,14 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file num_skipped = num_skipped + 1 test_id = test_id + 1 continue - + # if annotating input scripts with REG markers is True if using_markers == True: input_test = 'test.' + input if os.path.isfile(input) == True: if has_markers(input): process_markers(input, input_test) - + else: print(f"WARNING: {input} does not have REG markers") input_markers = input + '.markers' @@ -204,7 +251,7 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file os.system(cmd_str) generate_markers(input, input_markers) process_markers(input_markers, input_test) - + else: # else the same file name for testing input_test = input @@ -212,7 +259,7 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file str_t = " + " + input_test + f" ({test_id+1}/{num_tests})" logger.info(str_t) print(str_t) - + # check if a reference log file exists in the current folder: log.DDMMMYY.basename.g++.[nprocs] # assuming that input file names start with "in." (except in.disp, in.disp2 and in.dos in phonon/) basename = input_test[3:] @@ -234,7 +281,8 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file if fnmatch.fnmatch(file, pattern): p = file.rsplit('.', 1) if p[1].isnumeric(): - if use_valgrind == True: + # if using valgrind or running in serial, then use the log file with 1 proc + if use_valgrind == True or config['mpiexec'] == "": if int(p[1]) == 1: max_np = int(p[1]) ref_logfile_exist = True @@ -249,14 +297,15 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file # if there is no ref log file and not running with valgrind if ref_logfile_exist == False and use_valgrind == False: max_np = 4 - - # if the maximum number of procs is different from the value in the configuration file - # then override the setting for this input script + saved_nprocs = config['nprocs'] + + # if the maximum number of procs is different from the value in the configuration file + # then override the setting for this particular input script if max_np != int(config['nprocs']): config['nprocs'] = str(max_np) - # store the value of nprocs + # store the value of nprocs nprocs = int(config['nprocs']) # if valgrind is used for mem check, the run command will be @@ -267,16 +316,19 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file config['mpiexec_numproc_flag'] = "" nprocs = 1 + # default walltime value of failed tests + walltime = -1 + result = TestResult(name=input, output="", time="", status="passed") # run the LAMMPS binary with the input script - cmd_str, output, error, returncode = execute(lmp_binary, config, input_test) + cmd_str, output, error, returncode, logfilename = execute(lmp_binary, config, input_test) # restore the nprocs value in the configuration config['nprocs'] = saved_nprocs # check if the output contains ERROR - # there might not be a log.lammps generated at this point, or only log.lammps contains only the date line + # there might not be a log file generated at this point, or only the log file contains only the date line if "ERROR" in output: error_line = "" for line in output.split('\n'): @@ -284,13 +336,13 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file error_line = line break logger.info(f" The run terminated with {input_test} gives the following output:") - logger.info(f" {error_line}") + logger.info(f" {error_line}") if "Unrecognized" in output: - result.status = f"error, unrecognized command, package not installed, {error_line}" + result.status = f"failed, unrecognized command, package not installed, {error_line}" elif "Unknown" in output: - result.status = f"error, unknown command, package not installed, {error_line}" + result.status = f"failed, unknown command, package not installed, {error_line}" else: - result.status = f"error, {error_line}." + result.status = f"failed, {error_line}." logger.info(f" Output:") logger.info(f" {output}") @@ -298,57 +350,119 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file num_error = num_error + 1 results.append(result) - progress.write(f"{input}: {{ folder: {input_folder}, status: \"{result.status}\" }}\n") - progress.close() + print(f"{result.status}") + msg = f"{input}: {{ folder: {input_folder}, status: \"{result.status}\", walltime: {walltime} }}\n" + progress.write(msg) + progress.close() + failure.write(msg) + + test_id = test_id + 1 + continue + + # check if a log file log.{basename}.{nprocs} exists in the current folder + if os.path.isfile(logfilename) == False: + msg = f" failed, no log.{basename}.{nprocs} generated with {input_test} with return code {returncode}.\n" + print(msg) + logger.info(msg) + logger.info(f" Output:") + logger.info(f" {output}") + logger.info(f" Error:\n{error}") + + msg = f"{input}: {{ folder: {input_folder}, status: \"failed, no log file generated\", walltime: {walltime} }}\n" + progress.write(msg) + progress.close() + failure.write(msg) + + num_error = num_error + 1 + test_id = test_id + 1 + continue + else: + # generate a new log file whose name has the format of log.{date}.{basename}.{compiler}.{nprocs} + if genref == True: + dmy = datetime.datetime.now() + date = dmy.strftime("%d%b%y") + # assume g++ for now, but is be available from running "lmp_binary -h" + compiler = "g++" + cmd_str = f"cp log.{basename}.{nprocs} log.{date}.{basename}.{compiler}.{nprocs}" + p = subprocess.run(cmd_str, shell=True, text=True, capture_output=True) + + # if skip numerical checks, then skip the rest + if skip_numerical_check == True: + msg = "completed, skipping numerical checks" + if use_valgrind == True: + if "All heap blocks were freed" in error: + msg += ", no memory leak" + else: + msg += ", memory leaks detected" + num_memleak = num_memleak + 1 + result.status = msg + results.append(result) + + msg = f"{input}: {{ folder: {input_folder}, status: \"{msg}\", walltime: {walltime} }}\n" + progress.write(msg) + progress.close() + failure.write(msg) + + # count the number of completed runs + num_completed = num_completed + 1 test_id = test_id + 1 continue # if there is no ERROR in the output, but there is no Total wall time printed out if "Total wall time" not in output: - logger.info(f" ERROR: no Total wall time in the output.\n") + msg = f" failed, no Total wall time in the output.\n" + print(msg) + logger.info(msg) logger.info(f"\n{input_test}:") logger.info(f"\n Output:\n{output}") logger.info(f"\n Error:\n{error}") - progress.write(f"{input}: {{ folder: {input_folder}, status: \"error, no Total wall time in the output.\" }}\n") + + msg = f"{input}: {{ folder: {input_folder}, status: \"failed, no Total wall time in the output, {error}\", walltime: {walltime} }}\n" + progress.write(msg) progress.close() + failure.write(msg) + num_error = num_error + 1 test_id = test_id + 1 continue + # NOTE: Total wall time could be 00:00:00 whereas Loop time is non-zero seconds + walltime_norm = 1.0 + for line in output.split('\n'): + if "Total wall time" in line: + walltime_str = line.split('time:')[1] + hms = walltime_str.split(':') + hours = float(hms[0]) + minutes = float(hms[1]) + seconds = float(hms[2]) + walltime = hours * 3600.0 + minutes * 60.0 + seconds + walltime_norm = float(walltime) / float(walltime_ref) + break + # if there is no Step or no Loop printed out if "Step" not in output or "Loop" not in output: - logger.info(f" ERROR: no Step nor Loop in the output.\n") + msg = f" completed, but no Step nor Loop in the output.\n" + print(msg) + logger.info(msg) logger.info(f"\n{input_test}:") logger.info(f"\n Output:\n{output}") logger.info(f"\n Error:\n{error}") - progress.write(f"{input}: {{ folder: {input_folder}, status: \"error, no Step nor Loop in the output.\" }}\n") + + msg = f"{input}: {{ folder: {input_folder}, status: \"completed, but no Step nor Loop in the output.\", walltime: {walltime}, walltime_norm: {walltime_norm} }}\n" + progress.write(msg) progress.close() + failure.write(msg) + num_error = num_error + 1 test_id = test_id + 1 continue - # check if a log.lammps file exists in the current folder - if os.path.isfile("log.lammps") == False: - logger.info(f" ERROR: No log.lammps generated with {input_test} with return code {returncode}.\n") - logger.info(f" Output:") - logger.info(f" {output}") - logger.info(f" Error:\n{error}") - progress.write(f"{input}: {{ folder: {input_folder}, status: \"error, no log.lammps\" }}\n") - progress.close() - num_error = num_error + 1 - test_id = test_id + 1 - continue - else: - # save a copy of the log file for further inspection - cmd_str = f"cp log.lammps log.{basename}.{nprocs}" - p = subprocess.run(cmd_str, shell=True, text=True, capture_output=True) - - # parse thermo output in log.lammps from the run - thermo = extract_data_to_yaml("log.lammps") + # parse thermo output in the log file from the run + thermo = extract_data_to_yaml(logfilename) num_runs = len(thermo) - # the run completed normally but log.lammps may not be friendly for parsing into YAML format + # the run completed normally but the log file may not be friendly for parsing into YAML format if num_runs == 0: logger.info(f" The run terminated with {input_test} gives the following output:") logger.info(f" {output}") @@ -361,16 +475,19 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file msg += ", memory leaks detected" num_memleak = num_memleak + 1 - result.status = msg + ", error parsing log.lammps into YAML" + result.status = msg + f", error parsing {logfilename} into YAML" results.append(result) - progress.write(f"{input}: {{ folder: {input_folder}, status: \"{result.status}\" }}\n") + progress.write(f"{input}: {{ folder: {input_folder}, status: \"{result.status}\", walltime: {walltime}, walltime_norm: {walltime_norm} }}\n") progress.close() + if verbose == True: + print(result.status) + num_completed = num_completed + 1 test_id = test_id + 1 continue - # At this point, the run completed without trivial errors, proceed with numerical checks + # At this point, the run completed without trivial errors, proceed with numerical checks for thermo output # check if there is a reference log file for this input if ref_logfile_exist: # parse the thermo output in reference log file @@ -378,17 +495,18 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file if thermo_ref: num_runs_ref = len(thermo_ref) else: - # dictionary is empty - logger.info(f" ERROR: Error parsing the reference log file {thermo_ref_file}.") + # thhe thermo_ref dictionary is empty + logger.info(f" failed, error parsing the reference log file {thermo_ref_file}.") result.status = "skipped numerical checks due to parsing the reference log file" results.append(result) - progress.write(f"{input}: {{ folder: {input_folder}, status: \"completed, numerical checks skipped, unsupported log file format\" }}\n") + progress.write(f"{input}: {{ folder: {input_folder}, status: \"completed, numerical checks skipped, unsupported log file format\", walltime: {walltime}, walltime_norm: {walltime_norm} }}\n") progress.close() + num_completed = num_completed + 1 num_error = num_error + 1 test_id = test_id + 1 continue else: - msg = f" Cannot find the reference log file for {input_test} with the expected format log.[date].{basename}.*.[nprocs]" + msg = f" failed, cannot find the reference log file for {input_test} with the expected format log.[date].{basename}.*.[nprocs]" logger.info(msg) print(msg) # attempt to read in the thermo yaml output from the working directory (the following section will be deprecated) @@ -398,26 +516,30 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file thermo_ref = extract_thermo(thermo_ref_file) num_runs_ref = len(thermo_ref) else: - # mostly will come to here if the reference log file does not exist + # most likely to reach here if the reference log file does not exist logger.info(f" {thermo_ref_file} also does not exist in the working directory.") result.status = "skipped due to missing the reference log file" results.append(result) - progress.write(f"{input}: {{ folder: {input_folder}, status: \"completed, numerical checks skipped, missing the reference log file\" }}\n") + + msg = f"{input}: {{ folder: {input_folder}, status: \"completed, numerical checks skipped due to missing the reference log file\", walltime: {walltime}, walltime_norm: {walltime_norm} }}\n" + progress.write(msg) progress.close() + failure.write(msg) + num_completed = num_completed + 1 num_error = num_error + 1 test_id = test_id + 1 continue - logger.info(f" Comparing thermo output from log.lammps against the reference log file {thermo_ref_file}") + logger.info(f" Comparing thermo output from {logfilename} against the reference log file {thermo_ref_file}") # check if the number of runs matches with that in the reference log file # maybe due to some changes to the input where the ref log file is not updated yet if num_runs != num_runs_ref: - logger.info(f" ERROR: Number of runs in log.lammps ({num_runs}) is different from that in the reference log ({num_runs_ref})." + logger.info(f" ERROR: Number of runs in {logfilename} ({num_runs}) is different from that in the reference log ({num_runs_ref})." " Check README in the folder, possibly due to using mpirun with partitions or parsing the wrong reference log file.") - result.status = "error, incomplete runs" + result.status = "failed, incomplete runs" results.append(result) - progress.write(f"{input}: {{ folder: {input_folder}, status: \"{result.status}\" }}\n") + progress.write(f"{input}: {{ folder: {input_folder}, status: \"{result.status}\", walltime: {walltime}, walltime_norm: {walltime_norm} }}\n") progress.close() num_error = num_error + 1 test_id = test_id + 1 @@ -429,11 +551,11 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file num_fields = len(thermo[0]['keywords']) num_fields_ref = len(thermo_ref[0]['keywords']) if num_fields != num_fields_ref: - logger.info(f" ERROR: Number of thermo colums in log.lammps ({num_fields}) is different from that in the reference log ({num_fields_ref}) in the first run.") + logger.info(f" failed, number of thermo colums in {logfilename} ({num_fields}) is different from that in the reference log ({num_fields_ref}) in the first run.") logger.info(f" Check both log files for more details.") - result.status = "error, mismatched columns in the log files" + result.status = "failed, mismatched columns in the log files" results.append(result) - progress.write(f"{input}: {{ folder: {input_folder}, status: \"{result.status}\" }}\n") + progress.write(f"{input}: {{ folder: {input_folder}, status: \"{result.status}\", walltime: {walltime}, walltime_norm: {walltime_norm} }}\n") progress.close() num_error = num_error + 1 test_id = test_id + 1 @@ -442,9 +564,9 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file # comparing output vs reference values width = 20 if verbose == True: - print("Quantities".ljust(width) + "Output".center(width) + "Reference".center(width) + + print(" Quantities".ljust(width) + "Output".center(width) + "Reference".center(width) + "Abs Diff Check".center(width) + "Rel Diff Check".center(width)) - + # check if overrides for this input scipt is specified overrides = {} if 'overrides' in config: @@ -464,7 +586,7 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file num_fields = len(thermo[irun]['keywords']) num_fields_ref = len(thermo_ref[irun]['keywords']) if num_fields != num_fields_ref: - logger.info(f" ERROR: Number of thermo columns in log.lammps ({num_fields})") + logger.info(f" failed: Number of thermo columns in {logfilename} ({num_fields})") logger.info(f" is different from that in the reference log ({num_fields_ref}) in run {irun}.") mismatched_columns = True continue @@ -490,7 +612,7 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file abs_diff_check = "PASSED" rel_diff_check = "PASSED" - + if quantity in config['tolerance'] or quantity in overrides: if quantity in config['tolerance']: @@ -516,42 +638,48 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file else: # N/A means that tolerances are not defined in the config file abs_diff_check = "N/A" - rel_diff_check = "N/A" + rel_diff_check = "N/A" if verbose == True and abs_diff_check != "N/A" and rel_diff_check != "N/A": - print(f"{thermo[irun]['keywords'][i].ljust(width)} {str(val).rjust(20)} {str(ref).rjust(20)} " - "{abs_diff_check.rjust(20)} {rel_diff_check.rjust(20)}") + print(f" {thermo[irun]['keywords'][i].ljust(width)} {str(val).rjust(20)} {str(ref).rjust(20)} {abs_diff_check.rjust(20)} {rel_diff_check.rjust(20)}") # after all runs completed, or are interrupted in one of the runs (mismatched_columns = True) + if mismatched_columns == True: - msg = f" mismatched log files after the first run. Check both log files for more details." + msg = f" mismatched log files after the first run. Check both log files for more details." print(msg) logger.info(msg) - result.status = "failed" + result.status = "thermo checks failed due to mismatched log files after the first run" + result.status = "" if num_abs_failed > 0: - msg = f" {num_abs_failed} abs diff thermo checks failed." + msg = f" {num_abs_failed} abs diff checks failed." print(msg) logger.info(msg) - result.status = "failed" + #result.status = f"abs_diff_failed: {num_abs_failed}, " if verbose == True: - for i in failed_abs_output: - print(f"- {i}") - if num_rel_failed > 0: - msg = f" {num_rel_failed} rel diff thermo checks failed." - print(msg) - logger.info(msg) - result.status = "failed" - if verbose == True: - for i in failed_rel_output: - print(f"- {i}") - if num_abs_failed == 0 and num_rel_failed == 0: - msg = f" all {num_checks} thermo checks passed." - print(msg) - logger.info(msg) - result.status = "passed" - num_passed = num_passed + 1 + for out in failed_abs_output: + print(f" - {out}") + if num_rel_failed > 0: + msg = f" {num_rel_failed} rel diff checks failed." + print(msg) + logger.info(msg) + #result.status += f"rel_diff_failed: {num_rel_failed}" + if verbose == True: + for out in failed_rel_output: + print(f" - {out}") + + if num_abs_failed == 0 and num_rel_failed == 0: + msg = f" all {num_checks} checks passed." + print(msg) + logger.info(msg) + #result.status = f"all {num_checks} checks passed." + num_passed = num_passed + 1 + else: + num_error = num_error + 1 + + result.status = f"abs_diff_failed: {num_abs_failed}, rel_diff_failed: {num_rel_failed}" results.append(result) # check if memleak detects from valgrind run (need to replace "mpirun" -> valgrind --leak-check=yes mpirun") @@ -563,13 +691,20 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file msg += ", memory leaks detected" num_memleak = num_memleak + 1 - progress.write(f"{input}: {{ folder: {input_folder}, status: \"{msg}\" }}\n") + progress.write(f"{input}: {{ folder: {input_folder}, status: \"{msg}\", failed_checks: {{ {result.status} }}, walltime: {walltime}, walltime_norm: {walltime_norm} }}\n") progress.close() + # write to failure if there is any numerical failed check + if num_abs_failed > 0 or num_rel_failed > 0: + failure.write(f"{input}: {{ folder: {input_folder}, status: \"{msg}\", failed_checks: {{ {result.status} }}, walltime: {walltime}, walltime_norm: {walltime_norm} }}\n") + # count the number of completed runs num_completed = num_completed + 1 test_id = test_id + 1 + # close the failure file + failure.close() + stat = { 'num_completed': num_completed, 'num_passed': num_passed, 'num_skipped': num_skipped, @@ -590,7 +725,7 @@ def iterate(lmp_binary, input_folder, input_list, config, results, progress_file of output and the inner list the values of the columns matching the header keywords for that step. ''' def extract_thermo(yamlFileName): - docs = "" + docs = "" with open(yamlFileName) as f: for line in f: m = re.search(r"^(keywords:.*$|data:$|---$|\.\.\.$| - \[.*\]$)", line) @@ -627,7 +762,7 @@ def extract_data_to_yaml(inputFileName): if "Loop" in line: reading = False docs += "...\n" - + if reading == True and "Step" not in line: if "WARNING" in line: continue @@ -662,7 +797,7 @@ def extract_data_to_yaml(inputFileName): return thermo ''' - return a tuple of the list of installed packages, OS, GitInfo and compile_flags + return a dictionary of the list of installed packages, OS, GitInfo, compiler and compile_flags ''' def get_lammps_build_configuration(lmp_binary): cmd_str = lmp_binary + " -h" @@ -672,6 +807,8 @@ def get_lammps_build_configuration(lmp_binary): reading = False operating_system = "" GitInfo = "" + compiler = "g++" + compiler_full = "" row = 0 for line in output: if line != "": @@ -687,7 +824,12 @@ def get_lammps_build_configuration(lmp_binary): operating_system = line if "Git info" in line: GitInfo = line - + if "Compiler" in line: + compiler_full = line + if "GNU" in line: + compiler = "g++" + if "Intel" in line: + compiler = "icc" row += 1 packages = packages.strip() @@ -698,24 +840,124 @@ def get_lammps_build_configuration(lmp_binary): if line != "": if "-DLAMMPS" in line: compile_flags += " " + line.strip() - + row += 1 - return packages.split(" "), operating_system, GitInfo, compile_flags + installed_packages = packages.split(" ") + build_config = { + 'installed_packages': installed_packages, + 'operating_system': operating_system, + 'git_info': GitInfo, + 'compiler': compiler, + 'compiler_full': compiler_full, + 'compile_flags': compile_flags, + } + + return build_config ''' launch LAMMPS using the configuration defined in the dictionary config with an input file - TODO: - - generate new reference values if needed - - wrap subprocess with try/catch to handle exceptions + return + - cmd_str: the complete command used to launch LAMMPS with the input + - stdout: stdout of the process + - stderr: stderr of the process + - errorcode: error code returned by the process + - logfilename: the log file name for the given input + to avoid duplicate writes to log.lammps if multiple workers execute in the same folder ''' -def execute(lmp_binary, config, input_file_name, generate_ref_yaml=False): - cmd_str = config['mpiexec'] + " " + config['mpiexec_numproc_flag'] + " " + config['nprocs'] + " " - cmd_str += lmp_binary + " -in " + input_file_name + " " + config['args'] - logger.info(f" Executing: {cmd_str}") - p = subprocess.run(cmd_str, shell=True, text=True, capture_output=True) +def execute(lmp_binary, config, input_file_name, generate_ref=False): + cmd_str = "" + # check if mpiexec/mpirun is used + if config['mpiexec']: + cmd_str += config['mpiexec'] + " " + config['mpiexec_numproc_flag'] + " " + config['nprocs'] + " " - return cmd_str, p.stdout, p.stderr, p.returncode + # write to a log file with format log.{basename}.{nprocs} + basename = input_file_name[3:] + logfilename = f"log.{basename}.{config['nprocs']}" + + cmd_str += lmp_binary + " -in " + input_file_name + " " + config['args'] + " -log " + logfilename + + logger.info(f" Executing: {cmd_str}") + # set a timeout (in seconds) for each run + timeout = 60 + if 'timeout' in config: + if config['timeout'] != "": + timeout = int(config['timeout']) + + try: + p = subprocess.run(cmd_str, shell=True, text=True, capture_output=True, timeout=timeout) + return cmd_str, p.stdout, p.stderr, p.returncode, logfilename + + except subprocess.TimeoutExpired: + msg = f" Timeout for: {cmd_str} ({timeout}s expired)" + logger.info(msg) + print(msg) + + error_str = f"timeout ({timeout}s expired)" + return cmd_str, "", error_str, -1, logfilename + +''' + get the reference walltime by running the lmp_binary with config with an input script in the bench/ folder + in.lj is suitable as it doesn't need any potential file, nor any extra packages +''' +def get_reference_walltime(lmp_binary, config): + cmd_str = "" + # check if mpiexec/mpirun is used + if config['mpiexec']: + cmd_str += config['mpiexec'] + " " + config['mpiexec_numproc_flag'] + " " + config['nprocs'] + " " + + # guess the build folder path + lmp_build_folder = lmp_binary.rsplit('/', 1)[0] + + # guess the bench folder + lmp_bench_folder = lmp_build_folder + "/../bench/" + + # run with replicate for a copple of seconds long run + cmd_str += lmp_binary + " -in " + lmp_bench_folder + "in.lj -v x 2 -v y 2 -v z 1 " + config['args'] + + logger.info(f" Executing for reference walltime: {cmd_str}") + + # walltime = -1 indicates some timeout (issues) + walltime = -1 + + # set a timeout for this reference run + timeout = 60 + output = "" + try: + p = subprocess.run(cmd_str, shell=True, text=True, capture_output=True, timeout=timeout) + output = p.stdout + + except subprocess.TimeoutExpired: + msg = f" Timeout for: {cmd_str} ({timeout}s expired)" + logger.info(msg) + print(msg) + + for line in output.split('\n'): + if "Total wall time" in line: + walltime_str = line.split('time:')[1] + hms = walltime_str.split(':') + hours = float(hms[0]) + minutes = float(hms[1]) + seconds = float(hms[2]) + walltime = hours * 3600.0 + minutes * 60.0 + seconds + + logger.info(f" Reference walltime, sec = {walltime}") + + return walltime + +''' + infer the tools/regression-tests folder from the absolute path to lmp_binary + return the default config file path tools/regression-tests/config.yaml +''' +def get_default_config(lmp_binary): + # guess the build folder path + lmp_build_folder = lmp_binary.rsplit('/', 1)[0] + + # guess the tools/regression-tests folder + regression_tests_folder = lmp_build_folder + "/../tools/regression-tests/" + + defaultConfigFile = regression_tests_folder + "config.yaml" + return defaultConfigFile ''' split a list into a list of N sublists @@ -732,7 +974,7 @@ def execute(lmp_binary, config, input_file_name, generate_ref_yaml=False): for i in range(num_workers): args.append((input1, input2, output_buf)) - with Pool(num_workers) as pool: + with Pool(num_workers) as pool: results = pool.starmap(func, args) ''' def divide_into_N(original_list, N): @@ -759,7 +1001,7 @@ def process_markers(inputFileName, outputFileName): # replace #REG:ADD with empty string (i.e. adding the text at the end of the line) data = data.replace("#REG:ADD", "") - # replace the line contaning #REG:SUB with a line with the text that follows this marker + # replace the line contaning #REG:SUB with a line with the text that follows this marker data = data.splitlines() separator="#REG:SUB" out = [] @@ -823,14 +1065,21 @@ if __name__ == "__main__": lmp_binary = "" configFileName = "config.yaml" example_subfolders = [] + example_inputs = [] example_toplevel = "" genref = False verbose = False output_file = "output.xml" progress_file = "progress.yaml" + failure_file = "failure.yaml" log_file = "run.log" list_input = "" + list_subfolders = "" analyze = False + quick = False + quick_branch = "origin/develop" + quick_max = 50 + quick_reference = os.path.join(LAMMPS_DIR, 'tools', 'regression-tests', 'reference.yaml') # distribute the total number of input scripts over the workers num_workers = 1 @@ -838,93 +1087,178 @@ if __name__ == "__main__": # parse the arguments parser = ArgumentParser() parser.add_argument("--lmp-bin", dest="lmp_binary", default="", help="LAMMPS binary") - parser.add_argument("--config-file", dest="config_file", default=configFileName, - help="Configuration YAML file") + parser.add_argument("--config-file", dest="config_file", default="", help="Configuration YAML file") parser.add_argument("--examples-top-level", dest="example_toplevel", default="", help="Examples top-level") parser.add_argument("--example-folders", dest="example_folders", default="", help="Example subfolders") - parser.add_argument("--list-input", dest="list_input", default="", help="File that lists the subfolders") + parser.add_argument("--list-input", dest="list_input", default="", help="File that lists the input scripts") + parser.add_argument("--list-subfolders", dest="list_subfolders", default="", help="File that lists the subfolders") parser.add_argument("--num-workers", dest="num_workers", default=1, help="Number of workers") - parser.add_argument("--gen-ref",dest="genref", action='store_true', default=False, - help="Generating reference data") - parser.add_argument("--verbose",dest="verbose", action='store_true', default=False, - help="Verbose output") - parser.add_argument("--resume",dest="resume", action='store_true', default=False, - help="Resume the test run") parser.add_argument("--output-file",dest="output", default=output_file, help="Output file") parser.add_argument("--log-file",dest="logfile", default=log_file, help="Log file") parser.add_argument("--progress-file",dest="progress_file", default=progress_file, help="Progress file") - parser.add_argument("--analyze",dest="analyze", action='store_true', default=False, + parser.add_argument("--failure-file",dest="failure_file", default=failure_file, help="Failure file") + analyze = parser.add_mutually_exclusive_group() + analyze.add_argument("--analyze",dest="analyze", action='store_true', default=False, help="Analyze the testing folders and report statistics, not running the tests") + analyze.add_argument("--quick", dest="quick", action='store_true', default=False, + help="Determine which test inputs have commands changed between a branch and the head") + parser.add_argument("--quick-branch", dest="quick_branch", default=quick_branch, + help="Branch to which compare the current head to for changed styles") + parser.add_argument("--quick-max", dest="quick_max", default=50, + help="Maximum number of inputs to randomly select") + parser.add_argument("--quick-reference", dest="quick_reference", default=quick_reference, + help="Reference YAML file with progress data from full regression test run") + parser.add_argument("--skip-numerical-check",dest="skip_numerical_check", action='store_true', default=False, + help="Skip numerical checks") + parser.add_argument("--gen-ref",dest="genref", action='store_true', default=False, + help="Generating reference log files") + parser.add_argument("--verbose",dest="verbose", action='store_true', default=False, + help="Verbose screen output") + parser.add_argument("--resume",dest="resume", action='store_true', default=False, + help="Resume the test run from the list of inputs given the progress in progress.yaml") args = parser.parse_args() lmp_binary = os.path.abspath(args.lmp_binary) - configFileName = args.config_file + if len(args.config_file) > 0: + configFileName = args.config_file + else: + configFileName = get_default_config(lmp_binary) + output_file = args.output if int(args.num_workers) > 0: num_workers = int(args.num_workers) list_input = args.list_input + list_subfolders = args.list_subfolders # example_toplevel is where all the examples subfolders reside if args.example_toplevel != "": example_toplevel = args.example_toplevel if args.example_folders != "": example_subfolders = args.example_folders.split(';') - + genref = args.genref verbose = args.verbose log_file = args.logfile analyze = args.analyze + quick = args.quick + quick_branch = args.quick_branch + quick_max = int(args.quick_max) + quick_reference = args.quick_reference + skip_numerical_check = args.skip_numerical_check resume = args.resume progress_file = args.progress_file + failure_file = args.failure_file # logging logger = logging.getLogger(__name__) logging.basicConfig(filename=log_file, level=logging.INFO, filemode="w") - # read in the configuration of the tests - with open(configFileName, 'r') as f: - config = yaml.load(f, Loader=Loader) - absolute_path = os.path.abspath(configFileName) - print(f"\nRegression tests with the settings defined in the configuration file:\n {absolute_path}") - f.close() - - # check if lmp_binary is specified in the config yaml - if lmp_binary == "": - if config['lmp_binary'] == "": - print("Needs a valid LAMMPS binary") - quit() - else: - lmp_binary = os.path.abspath(config['lmp_binary']) - - # print out the binary info - packages, operating_system, GitInfo, compile_flags = get_lammps_build_configuration(lmp_binary) - print("\nLAMMPS build info:") - print(f" - {operating_system}") - print(f" - {GitInfo}") - print(f" - Active compile flags: {compile_flags}") - print(f" - List of {len(packages)} installed packages:") - all_pkgs = "" - for p in packages: - all_pkgs += p + " " - print(all_pkgs) - if len(example_subfolders) > 0: print("\nExample folders to test:") print(*example_subfolders, sep='\n') if example_toplevel != "": print("\nTop-level example folder:") print(f" {example_toplevel}") + if list_input != "": + print("\nInput scripts to test as listed in the file:") + print(f" {list_input}") # Using in place input scripts inplace_input = True test_cases = [] + # generate list of input scripts with commands that have been changed + if quick: + headers = get_quick_list.changed_files_from_git(quick_branch) + styles = get_quick_list.get_command_from_header(headers, LAMMPS_DIR) + regex = get_quick_list.make_regex(styles) + if regex: + if not example_toplevel: example_toplevel = os.path.join(LAMMPS_DIR, 'examples') + input_list = get_quick_list.get_examples_using_styles(regex, example_toplevel) + msg = f"\nThere are {len(input_list)} input scripts with changed styles relative to branch {quick_branch}." + msg += "\nChanged styles: " + str(styles) + + # read in refrence data from a previous test run + with open(quick_reference, 'r') as f: + reference = yaml.load(f, Loader=Loader) + f.close() + + # trim previously failing run and runs that would take too long + new_list = [] + keys = reference.keys() + msg += "\nTrimming inputs using reference data from " + str(len(keys)) + " previous runs: " + for infile in input_list: + input = os.path.split(infile)[1] + if input in keys: + if (reference[input]['walltime'] < 0.0): + # print("Skipping ", input, " for previous failure") + pass + elif (reference[input]['walltime'] > 29.0): + # print("Skipping ", input, " for wall time limit") + pass + else: + new_list.append(infile) + else: + new_list.append(infile) + input_list = new_list + msg += "trimmed list has " + str(len(input_list)) + " entries" + + if len(input_list) > quick_max: + input_list = random.sample(input_list, quick_max) + msg += "\nTesting " + str(quick_max) + " randomly selected inputs" + + print(msg) + logger.info(msg) + + # divide the list of input scripts into num_workers chunks + sublists = divide_into_N(input_list, num_workers) + + # write each chunk to a file + idx = 0 + for list_input in sublists: + filename = f"input-list-{idx}.txt" + with open(filename, "w") as f: + for inp in list_input: + f.write(inp + '\n') + f.close() + idx = idx + 1 + else: + msg = f"\nThere are no input scripts with changed styles relative to branch {quick_branch}." + print(msg) + logger.info(msg) + for idx in range(0, num_workers): + try: + os.remove(f"folder-list-{idx}.txt") + except: + pass + try: + os.remove(f"input-list-{idx}.txt") + except: + pass + filename = f"run-{idx}.log" + with open(filename, "w") as f: + f.write('\n') + f.close() + filename = f"progress-{idx}.yaml" + with open(filename, "w") as f: + f.write('\n') + f.close() + filename = f"output-{idx}.xml" + with open(filename, "w") as f: + f.write('\n') + f.close() + filename = f"failure-{idx}.yaml" + with open(filename, "w") as f: + f.write('\n') + f.close() + quit() + # if the example folders are not specified from the command-line argument --example-folders # then use the path from --example-top-folder, or from the input-list read from a text file - if len(example_subfolders) == 0: + elif len(example_subfolders) == 0: - # need top level specified + # if the top level is specified if len(example_toplevel) != 0: # getting the list of all the input files because there are subfolders (e.g. PACKAGES) under the top level cmd_str = f"find {example_toplevel} -name \"in.*\" " @@ -951,7 +1285,7 @@ if __name__ == "__main__": # write each chunk to a file idx = 0 for list_input in sublists: - filename = f"input-list-{idx}.txt" + filename = f"folder-list-{idx}.txt" with open(filename, "w") as f: for folder in list_input: # count the number of input scripts in each folder @@ -965,14 +1299,28 @@ if __name__ == "__main__": # working on all the folders for now example_subfolders = folder_list - # if a list of subfolders are provided from a text file (list_input from the command-line argument) - elif len(list_input) != 0: + # divide the list of input scripts into num_workers chunks + sublists = divide_into_N(input_list, num_workers) + + # write each chunk to a file + idx = 0 + for list_input in sublists: + filename = f"input-list-{idx}.txt" + with open(filename, "w") as f: + for inp in list_input: + f.write(inp + '\n') + f.close() + idx = idx + 1 + + # if a list of subfolders is provided from a text file (list_subfolders from the command-line argument) + elif len(list_subfolders) != 0: num_inputscripts = 0 - with open(list_input, "r") as f: + with open(list_subfolders, "r") as f: all_subfolders = f.read().splitlines() f.close() for line in all_subfolders: if len(line) > 0: + # skip subfolders if line[0] == '#': continue folder = line.split()[0] @@ -981,6 +1329,33 @@ if __name__ == "__main__": msg = f"\nThere are {len(example_subfolders)} folders with {num_inputscripts} input scripts in total listed in {list_input}." print(msg) logger.info(msg) + + # if a list of input scripts is provided from a text file (list_input from the command-line argument) + elif len(list_input) != 0: + num_inputscripts = 0 + folder_list = [] + with open(list_input, "r") as f: + all_inputs = f.read().splitlines() + f.close() + + for line in all_inputs: + if len(line) > 0: + # skip input scripts + if line[0] == '#': + continue + input = line.split()[0] + folder = input.rsplit('/', 1)[0] + # unique folders in the list + if folder not in folder_list: + folder_list.append(folder) + example_inputs.append(input) + num_inputscripts += 1 + + example_subfolders = folder_list + msg = f"\nThere are {num_inputscripts} input scripts listed in {list_input}." + print(msg) + logger.info(msg) + else: inplace_input = False @@ -988,6 +1363,45 @@ if __name__ == "__main__": if analyze == True: quit() + # read in the configuration of the tests + with open(configFileName, 'r') as f: + config = yaml.load(f, Loader=Loader) + absolute_path = os.path.abspath(configFileName) + print(f"\nRegression test configuration file:\n {absolute_path}") + f.close() + + # check if lmp_binary is specified in the config yaml + if lmp_binary == "": + if config['lmp_binary'] == "": + print("Needs a valid LAMMPS binary") + quit() + else: + lmp_binary = os.path.abspath(config['lmp_binary']) + + # print out the binary info + build_config = get_lammps_build_configuration(lmp_binary) + packages = build_config['installed_packages'] + operating_system = build_config['operating_system'] + GitInfo = build_config['git_info'] + compiler = build_config['compiler'] + compiler_full = build_config['compiler_full'] + compile_flags = build_config['compile_flags'] + + print("\nLAMMPS build info:") + print(f" - {operating_system}") + print(f" - {GitInfo}") + print(f" - {compiler_full}") + print(f" - Active compile flags: {compile_flags}") + print(f" - List of {len(packages)} installed packages:") + all_pkgs = "" + for p in packages: + all_pkgs += p + " " + print(all_pkgs) + + # augment config with additional keys + config['compiler'] = compiler + config['genref'] = genref + all_results = [] # save current working dir @@ -995,7 +1409,7 @@ if __name__ == "__main__": pwd = p.stdout.split('\n')[0] pwd = os.path.abspath(pwd) print("\nWorking directory: " + pwd) - + progress_file_abs = pwd + "/" + progress_file last_progress = {} if resume == False: @@ -1009,6 +1423,14 @@ if __name__ == "__main__": except Exception: print(f" Cannot open progress file {progress_file_abs} to resume, rerun all the tests") + # get a reference walltime + walltime_ref = get_reference_walltime(lmp_binary, config) + + # record all the failure cases (overwrite if the file exists) + failure_file_abs = pwd + "/" + failure_file + failure = open(failure_file_abs, "w") + failure.close() + # initialize all the counters total_tests = 0 completed_tests = 0 @@ -1028,7 +1450,7 @@ if __name__ == "__main__": for i in range(num_workers): args.append((input1, input2, output)) - with Pool(num_workers) as pool: + with Pool(num_workers) as pool: results = pool.starmap(func, args) ''' @@ -1042,15 +1464,27 @@ if __name__ == "__main__": cmd_str = "ls in.*" p = subprocess.run(cmd_str, shell=True, text=True, capture_output=True) - input_list = p.stdout.split('\n') - input_list.remove('') + all_input_list = p.stdout.split('\n') + all_input_list.remove('') - print(f"{len(input_list)} input script(s): {input_list}") + # if the list of example input scripts is provided + # if an input script is not in the list, then remove it from input_list + input_list = [] + if len(example_inputs) > 0: + for inp in all_input_list: + full_path = directory + "/" + inp + if full_path in example_inputs: + input_list.append(inp) + else: + input_list = all_input_list + + print(f"{len(input_list)} input script(s) to be tested: {input_list}") total_tests += len(input_list) # iterate through the input scripts results = [] - stat = iterate(lmp_binary, directory, input_list, config, results, progress_file_abs, last_progress) + stat = iterate(lmp_binary, directory, input_list, config, + results, progress_file_abs, failure_file_abs, walltime_ref, verbose, last_progress) completed_tests += stat['num_completed'] skipped_tests += stat['num_skipped'] @@ -1090,16 +1524,17 @@ if __name__ == "__main__": if passed_tests <= completed_tests: msg += f" - numerical tests passed: {passed_tests}\n" msg += "\nOutput:\n" + msg += f" - Failed inputs and reasons : {failure_file}\n" + msg += f" - Status of the tested inputs : {progress_file}\n" msg += f" - Running log with screen output: {log_file}\n" - msg += f" - Progress with the input list : {progress_file}\n" - msg += f" - Regression test results : {output_file}\n" + msg += f" - Testing result in JUnit XML : {output_file}\n" print(msg) # optional: need to check if junit_xml packaged is already installed in the env - # generate a JUnit XML file + # generate a JUnit XML file with open(output_file, 'w') as f: - test_cases = [] + test_cases = [] for result in all_results: #print(f"{result.name}: {result.status}") case = TestCase(name=result.name, classname=result.name) diff --git a/tools/swig/lammps.i b/tools/swig/lammps.i index 9bef047da4..11f5a270a1 100644 --- a/tools/swig/lammps.i +++ b/tools/swig/lammps.i @@ -130,6 +130,7 @@ extern void *lammps_extract_pair(void *handle, const char *name); extern int lammps_map_atom(void *handle, const void *id); extern int lammps_extract_atom_datatype(void *handle, const char *name); +extern int lammps_extract_atom_size(void *handle, const char *name, int type); extern void *lammps_extract_atom(void *handle, const char *name); extern void *lammps_extract_compute(void *handle, const char *id, int, int); @@ -319,6 +320,7 @@ extern void *lammps_extract_pair(void *handle, const char *name); extern int lammps_map_atom(void *handle, const void *id); extern int lammps_extract_atom_datatype(void *handle, const char *name); +extern int lammps_extract_atom_size(void *handle, const char *name, int type); extern void *lammps_extract_atom(void *handle, const char *name); extern void *lammps_extract_compute(void *handle, const char *id, int, int); diff --git a/unittest/c-library/test_library_properties.cpp b/unittest/c-library/test_library_properties.cpp index 96d63629df..737015ccdc 100644 --- a/unittest/c-library/test_library_properties.cpp +++ b/unittest/c-library/test_library_properties.cpp @@ -49,6 +49,7 @@ protected: if (verbose) std::cout << output; EXPECT_THAT(output, StartsWith("LAMMPS (")); } + void TearDown() override { ::testing::internal::CaptureStdout(); @@ -466,6 +467,33 @@ TEST_F(LibraryProperties, global) if (!verbose) ::testing::internal::GetCapturedStdout(); map_style = *(int *)lammps_extract_global(lmp, "map_style"); EXPECT_EQ(map_style, Atom::MAP_ARRAY); + + EXPECT_EQ(lammps_extract_global_datatype(lmp, "xlattice"), LAMMPS_DOUBLE); + EXPECT_EQ(lammps_extract_global_datatype(lmp, "ylattice"), LAMMPS_DOUBLE); + EXPECT_EQ(lammps_extract_global_datatype(lmp, "zlattice"), LAMMPS_DOUBLE); + auto *xlattice = (double *)lammps_extract_global(lmp, "xlattice"); + auto *ylattice = (double *)lammps_extract_global(lmp, "ylattice"); + auto *zlattice = (double *)lammps_extract_global(lmp, "zlattice"); + EXPECT_NE(xlattice, nullptr); + EXPECT_NE(ylattice, nullptr); + EXPECT_NE(zlattice, nullptr); + EXPECT_DOUBLE_EQ(*xlattice, 1.0); + EXPECT_DOUBLE_EQ(*ylattice, 1.0); + EXPECT_DOUBLE_EQ(*zlattice, 1.0); + if (!verbose) ::testing::internal::CaptureStdout(); + lammps_command(lmp, "clear"); + lammps_command(lmp, "units real"); + lammps_command(lmp, "lattice fcc 2.0"); + if (!verbose) ::testing::internal::GetCapturedStdout(); + xlattice = (double *)lammps_extract_global(lmp, "xlattice"); + ylattice = (double *)lammps_extract_global(lmp, "ylattice"); + zlattice = (double *)lammps_extract_global(lmp, "zlattice"); + EXPECT_NE(xlattice, nullptr); + EXPECT_NE(ylattice, nullptr); + EXPECT_NE(zlattice, nullptr); + EXPECT_DOUBLE_EQ(*xlattice, 2.0); + EXPECT_DOUBLE_EQ(*ylattice, 2.0); + EXPECT_DOUBLE_EQ(*zlattice, 2.0); }; TEST_F(LibraryProperties, pair1) @@ -667,11 +695,10 @@ TEST_F(LibraryProperties, has_error) class AtomProperties : public ::testing::Test { protected: void *lmp; + int ntypes, nlocal, nall; - AtomProperties() = default; - ; + AtomProperties() = default; ~AtomProperties() override = default; - ; void SetUp() override { @@ -686,11 +713,30 @@ protected: if (verbose) std::cout << output; EXPECT_THAT(output, StartsWith("LAMMPS (")); ::testing::internal::CaptureStdout(); + lammps_command(lmp, "fix props all property/atom i_one i2_two 2 d_three d2_four 2"); + lammps_command(lmp, "fix rmass all property/atom mol q rmass ghost yes"); lammps_command(lmp, "region box block 0 2 0 2 0 2"); lammps_command(lmp, "create_box 1 box"); lammps_command(lmp, "mass 1 3.0"); lammps_command(lmp, "create_atoms 1 single 1.0 1.0 1.5"); lammps_command(lmp, "create_atoms 1 single 0.2 0.1 0.1"); + lammps_command(lmp, "set group all mass 2.0"); + lammps_command(lmp, "set atom 1 charge -1"); + lammps_command(lmp, "set atom 2 charge 1"); + lammps_command(lmp, "set atom 1 mol 2"); + lammps_command(lmp, "set atom 2 mol 1"); + lammps_command(lmp, "set atom 1 i_one -3"); + lammps_command(lmp, "set atom 2 i_one 3"); + lammps_command(lmp, "set atom 1 d_three -1.3"); + lammps_command(lmp, "set atom 2 d_three 3.5"); + lammps_command(lmp, "set atom 1 i_two[1] -3"); + lammps_command(lmp, "set atom 2 i_two[2] 3"); + lammps_command(lmp, "set atom * d_four[1] -1.3"); + lammps_command(lmp, "set atom * d_four[2] 3.5"); + ntypes = lammps_extract_setting(lmp, "ntypes"); + nlocal = lammps_extract_setting(lmp, "nlocal"); + nall = lammps_extract_setting(lmp, "nall"); + output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; } @@ -713,14 +759,42 @@ TEST_F(AtomProperties, invalid) TEST_F(AtomProperties, mass) { EXPECT_EQ(lammps_extract_atom_datatype(lmp, "mass"), LAMMPS_DOUBLE); + EXPECT_EQ(lammps_extract_atom_size(lmp, "mass", 0), ntypes + 1); auto *mass = (double *)lammps_extract_atom(lmp, "mass"); ASSERT_NE(mass, nullptr); ASSERT_DOUBLE_EQ(mass[1], 3.0); + EXPECT_EQ(lammps_extract_atom_datatype(lmp, "rmass"), LAMMPS_DOUBLE); + EXPECT_EQ(lammps_extract_atom_size(lmp, "rmass", 0), nall); + mass = (double *)lammps_extract_atom(lmp, "rmass"); + ASSERT_NE(mass, nullptr); + ASSERT_DOUBLE_EQ(mass[0], 2.0); + ASSERT_DOUBLE_EQ(mass[1], 2.0); +} + +TEST_F(AtomProperties, charge) +{ + EXPECT_EQ(lammps_extract_atom_datatype(lmp, "q"), LAMMPS_DOUBLE); + EXPECT_EQ(lammps_extract_atom_size(lmp, "rmass", 0), nall); + auto *charge = (double *)lammps_extract_atom(lmp, "q"); + ASSERT_NE(charge, nullptr); + ASSERT_DOUBLE_EQ(charge[0], -1.0); + ASSERT_DOUBLE_EQ(charge[1], 1.0); +} + +TEST_F(AtomProperties, molecule) +{ + EXPECT_EQ(lammps_extract_atom_datatype(lmp, "molecule"), LAMMPS_TAGINT); + EXPECT_EQ(lammps_extract_atom_size(lmp, "molecule", 0), nall); + auto *molecule = (tagint *)lammps_extract_atom(lmp, "molecule"); + ASSERT_NE(molecule, nullptr); + ASSERT_EQ(molecule[0], 2); + ASSERT_EQ(molecule[1], 1); } TEST_F(AtomProperties, id) { EXPECT_EQ(lammps_extract_atom_datatype(lmp, "id"), LAMMPS_TAGINT); + EXPECT_EQ(lammps_extract_atom_size(lmp, "id", 0), nall); auto *id = (tagint *)lammps_extract_atom(lmp, "id"); ASSERT_NE(id, nullptr); ASSERT_EQ(id[0], 1); @@ -730,6 +804,7 @@ TEST_F(AtomProperties, id) TEST_F(AtomProperties, type) { EXPECT_EQ(lammps_extract_atom_datatype(lmp, "type"), LAMMPS_INT); + EXPECT_EQ(lammps_extract_atom_size(lmp, "type", 0), nall); int *type = (int *)lammps_extract_atom(lmp, "type"); ASSERT_NE(type, nullptr); ASSERT_EQ(type[0], 1); @@ -739,6 +814,8 @@ TEST_F(AtomProperties, type) TEST_F(AtomProperties, position) { EXPECT_EQ(lammps_extract_atom_datatype(lmp, "x"), LAMMPS_DOUBLE_2D); + EXPECT_EQ(lammps_extract_atom_size(lmp, "x", LMP_SIZE_ROWS), nall); + EXPECT_EQ(lammps_extract_atom_size(lmp, "x", LMP_SIZE_COLS), 3); auto **x = (double **)lammps_extract_atom(lmp, "x"); ASSERT_NE(x, nullptr); EXPECT_DOUBLE_EQ(x[0][0], 1.0); @@ -749,6 +826,41 @@ TEST_F(AtomProperties, position) EXPECT_DOUBLE_EQ(x[1][2], 0.1); } +TEST_F(AtomProperties, custom) +{ + EXPECT_EQ(lammps_extract_atom_datatype(lmp, "i_one"), LAMMPS_INT); + EXPECT_EQ(lammps_extract_atom_size(lmp, "i_one", 0), nlocal); + auto *one = (int *)lammps_extract_atom(lmp, "i_one"); + ASSERT_NE(one, nullptr); + EXPECT_EQ(lammps_extract_atom_datatype(lmp, "i2_two"), LAMMPS_INT_2D); + EXPECT_EQ(lammps_extract_atom_size(lmp, "i2_two", LMP_SIZE_ROWS), nlocal); + EXPECT_EQ(lammps_extract_atom_size(lmp, "i2_two", LMP_SIZE_COLS), 2); + auto **two = (int **)lammps_extract_atom(lmp, "i2_two"); + ASSERT_NE(two, nullptr); + EXPECT_EQ(lammps_extract_atom_datatype(lmp, "d_three"), LAMMPS_DOUBLE); + EXPECT_EQ(lammps_extract_atom_size(lmp, "d_three", 0), nlocal); + auto *three = (double *)lammps_extract_atom(lmp, "d_three"); + ASSERT_NE(three, nullptr); + EXPECT_EQ(lammps_extract_atom_datatype(lmp, "d2_four"), LAMMPS_DOUBLE_2D); + EXPECT_EQ(lammps_extract_atom_size(lmp, "d2_four", LMP_SIZE_ROWS), nlocal); + EXPECT_EQ(lammps_extract_atom_size(lmp, "d2_four", LMP_SIZE_COLS), 2); + auto **four = (double **)lammps_extract_atom(lmp, "d2_four"); + ASSERT_NE(four, nullptr); + + EXPECT_EQ(one[0], -3); + EXPECT_EQ(one[1], 3); + EXPECT_EQ(two[0][0], -3); + EXPECT_EQ(two[0][1], 0); + EXPECT_EQ(two[1][0], 0); + EXPECT_EQ(two[1][1], 3); + EXPECT_DOUBLE_EQ(three[0], -1.3); + EXPECT_DOUBLE_EQ(three[1], 3.5); + EXPECT_DOUBLE_EQ(four[0][0], -1.3); + EXPECT_DOUBLE_EQ(four[0][1], 3.5); + EXPECT_DOUBLE_EQ(four[1][0], -1.3); + EXPECT_DOUBLE_EQ(four[1][1], 3.5); +} + TEST(SystemSettings, kokkos) { if (!lammps_config_has_package("KOKKOS")) GTEST_SKIP(); diff --git a/unittest/commands/test_variables.cpp b/unittest/commands/test_variables.cpp index 2390b1b675..c7686cbf12 100644 --- a/unittest/commands/test_variables.cpp +++ b/unittest/commands/test_variables.cpp @@ -206,7 +206,7 @@ TEST_F(VariableTest, CreateDelete) TEST_FAILURE(".*ERROR: Invalid variable loop argument: -1.*", command("variable dummy loop -1");); TEST_FAILURE(".*ERROR: Illegal variable loop command.*", command("variable dummy loop 10 1");); - TEST_FAILURE(".*ERROR: Unknown variable keyword: xxx.*", command("variable dummy xxxx");); + TEST_FAILURE(".*ERROR: Unknown variable style: xxx.*", command("variable dummy xxxx");); TEST_FAILURE(".*ERROR: Cannot redefine variable as a different style.*", command("variable two string xxx");); TEST_FAILURE(".*ERROR: Cannot redefine variable as a different style.*", diff --git a/unittest/force-styles/check_tests.py b/unittest/force-styles/check_tests.py index 4dba8f9b9e..7305168ecb 100755 --- a/unittest/force-styles/check_tests.py +++ b/unittest/force-styles/check_tests.py @@ -88,10 +88,9 @@ for header in headers: style = m[1] if upper.match(style): continue - if style in ['reax/c', 'reax/c/omp', 'reax/c/kk', - 'reax/c/kk/device', 'reax/c/kk/host', - 'reax/c/species', 'reax/c/bonds', - 'reax/c/species/kk', 'reax/c/bonds/kk', 'meam/c']: + if style in ['lj/sdk', 'lj/sdk/coul/long', 'lj/sdk/coul/msm', 'sdk', 'lj/sdk/gpu', + 'lj/sdk/coul/long/gpu', 'lj/sdk/omp', 'lj/sdk/coul/long/omp', 'sdk/omp', + 'lj/sdk/coul/msm/omp', 'lj/sdk/kk', 'lj/sdk/coul/long/kk', 'sdk/kk']: continue # detect, process, and flag suffix styles: @@ -176,11 +175,12 @@ def check_tests(name,styles,yaml,search,skip=()): counter = 0 counter += check_tests('pair',pair,'*-pair-*.yaml', - '.*pair_style:\\s*((\\S+).*)?',skip=('meam','lj/sf')) + '.*pair_style:\\s*((\\S+).*)?', + skip=('lj/sf','lj/sdk', 'lj/sdk/coul/long', 'lj/sdk/coul/msm')) counter += check_tests('bond',bond,'bond-*.yaml', '.*bond_style:\\s*((\\S+).*)?') counter += check_tests('angle',angle,'angle-*.yaml', - '.*angle_style:\\s*((\\S+).*)?') + '.*angle_style:\\s*((\\S+).*)?', skip=('sdk')) counter += check_tests('dihedral',dihedral,'dihedral-*.yaml', '.*dihedral_style:\\s*((\\S+).*)?') counter += check_tests('improper',improper,'improper-*.yaml', diff --git a/unittest/force-styles/test_angle_style.cpp b/unittest/force-styles/test_angle_style.cpp index e706cc11ac..e07ec3b689 100644 --- a/unittest/force-styles/test_angle_style.cpp +++ b/unittest/force-styles/test_angle_style.cpp @@ -362,8 +362,9 @@ TEST(AngleStyle, plain) EXPECT_STRESS("run_stress (newton on)", angle->virial, test_config.run_stress, epsilon); stats.reset(); - int id = lmp->modify->find_compute("sum"); - double energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + double energy = 0.0; + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.run_energy, epsilon); EXPECT_FP_LE_WITH_EPS(angle->energy, energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton on: " << stats << std::endl; @@ -393,8 +394,8 @@ TEST(AngleStyle, plain) EXPECT_STRESS("run_stress (newton off)", angle->virial, test_config.run_stress, epsilon); stats.reset(); - id = lmp->modify->find_compute("sum"); - energy = lmp->modify->compute[id]->compute_scalar(); + icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.run_energy, epsilon); EXPECT_FP_LE_WITH_EPS(angle->energy, energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton off:" << stats << std::endl; @@ -480,8 +481,9 @@ TEST(AngleStyle, omp) EXPECT_STRESS("run_stress (newton on)", angle->virial, test_config.run_stress, 10 * epsilon); stats.reset(); - int id = lmp->modify->find_compute("sum"); - double energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + double energy = 0.0; + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.run_energy, epsilon); // TODO: this is currently broken for OPENMP with angle style hybrid // needs to be fixed in the main code somewhere. Not sure where, though. @@ -515,8 +517,8 @@ TEST(AngleStyle, omp) 10 * epsilon); stats.reset(); - id = lmp->modify->find_compute("sum"); - energy = lmp->modify->compute[id]->compute_scalar(); + icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.run_energy, epsilon); // TODO: this is currently broken for OPENMP with angle style hybrid // needs to be fixed in the main code somewhere. Not sure where, though. @@ -532,124 +534,124 @@ TEST(AngleStyle, omp) TEST(AngleStyle, kokkos_omp) { - if (!LAMMPS::is_installed_pkg("KOKKOS")) GTEST_SKIP(); - if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - if (!Info::has_accelerator_feature("KOKKOS", "api", "openmp")) GTEST_SKIP(); + if (!LAMMPS::is_installed_pkg("KOKKOS")) GTEST_SKIP(); + if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); + if (!Info::has_accelerator_feature("KOKKOS", "api", "openmp")) GTEST_SKIP(); - LAMMPS::argv args = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite", - "-k", "on", "t", "4", "-sf", "kk"}; + LAMMPS::argv args = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite", + "-k", "on", "t", "4", "-sf", "kk"}; - ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(args, test_config, true); + ::testing::internal::CaptureStdout(); + LAMMPS *lmp = init_lammps(args, test_config, true); - std::string output = ::testing::internal::GetCapturedStdout(); - if (verbose) std::cout << output; + std::string output = ::testing::internal::GetCapturedStdout(); + if (verbose) std::cout << output; - if (!lmp) { - std::cerr << "One or more prerequisite styles with /kk suffix\n" - "are not available in this LAMMPS configuration:\n"; - for (auto &prerequisite : test_config.prerequisites) { - std::cerr << prerequisite.first << "_style " << prerequisite.second << "\n"; + if (!lmp) { + std::cerr << "One or more prerequisite styles with /kk suffix\n" + "are not available in this LAMMPS configuration:\n"; + for (auto &prerequisite : test_config.prerequisites) { + std::cerr << prerequisite.first << "_style " << prerequisite.second << "\n"; + } + GTEST_SKIP(); } - GTEST_SKIP(); - } - EXPECT_THAT(output, StartsWith("LAMMPS (")); - EXPECT_THAT(output, HasSubstr("Loop time")); + EXPECT_THAT(output, StartsWith("LAMMPS (")); + EXPECT_THAT(output, HasSubstr("Loop time")); - // abort if running in parallel and not all atoms are local - const int nlocal = lmp->atom->nlocal; - ASSERT_EQ(lmp->atom->natoms, nlocal); + // abort if running in parallel and not all atoms are local + const int nlocal = lmp->atom->nlocal; + ASSERT_EQ(lmp->atom->natoms, nlocal); - // relax error a bit for KOKKOS package - double epsilon = 5.0 * test_config.epsilon; + // relax error a bit for KOKKOS package + double epsilon = 5.0 * test_config.epsilon; - ErrorStats stats; - auto angle = lmp->force->angle; + ErrorStats stats; + auto angle = lmp->force->angle; - EXPECT_FORCES("init_forces (newton on)", lmp->atom, test_config.init_forces, epsilon); - EXPECT_STRESS("init_stress (newton on)", angle->virial, test_config.init_stress, epsilon); - - stats.reset(); - EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.init_energy, epsilon); - if (print_stats) std::cerr << "init_energy stats, newton on: " << stats << std::endl; - - if (!verbose) ::testing::internal::CaptureStdout(); - run_lammps(lmp); - if (!verbose) ::testing::internal::GetCapturedStdout(); - - EXPECT_FORCES("run_forces (newton on)", lmp->atom, test_config.run_forces, 10 * epsilon); - EXPECT_STRESS("run_stress (newton on)", angle->virial, test_config.run_stress, epsilon); - - stats.reset(); - int id = lmp->modify->find_compute("sum"); - double energy = lmp->modify->compute[id]->compute_scalar(); - EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.run_energy, epsilon); - EXPECT_FP_LE_WITH_EPS(angle->energy, energy, epsilon); - if (print_stats) std::cerr << "run_energy stats, newton on: " << stats << std::endl; - - if (!verbose) ::testing::internal::CaptureStdout(); - cleanup_lammps(lmp, test_config); - lmp = init_lammps(args, test_config, false); - if (!verbose) ::testing::internal::GetCapturedStdout(); - - // skip over these tests if newton bond is forced to be on - if (lmp->force->newton_bond == 0) { - angle = lmp->force->angle; - - EXPECT_FORCES("init_forces (newton off)", lmp->atom, test_config.init_forces, epsilon); - EXPECT_STRESS("init_stress (newton off)", angle->virial, test_config.init_stress, - 2 * epsilon); + EXPECT_FORCES("init_forces (newton on)", lmp->atom, test_config.init_forces, epsilon); + EXPECT_STRESS("init_stress (newton on)", angle->virial, test_config.init_stress, epsilon); stats.reset(); EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.init_energy, epsilon); - if (print_stats) std::cerr << "init_energy stats, newton off:" << stats << std::endl; + if (print_stats) std::cerr << "init_energy stats, newton on: " << stats << std::endl; if (!verbose) ::testing::internal::CaptureStdout(); run_lammps(lmp); if (!verbose) ::testing::internal::GetCapturedStdout(); - EXPECT_FORCES("run_forces (newton off)", lmp->atom, test_config.run_forces, 10 * epsilon); - EXPECT_STRESS("run_stress (newton off)", angle->virial, test_config.run_stress, epsilon); + EXPECT_FORCES("run_forces (newton on)", lmp->atom, test_config.run_forces, 10 * epsilon); + EXPECT_STRESS("run_stress (newton on)", angle->virial, test_config.run_stress, epsilon); stats.reset(); - id = lmp->modify->find_compute("sum"); - energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + double energy = 0.0; + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.run_energy, epsilon); EXPECT_FP_LE_WITH_EPS(angle->energy, energy, epsilon); - if (print_stats) std::cerr << "run_energy stats, newton off:" << stats << std::endl; - } + if (print_stats) std::cerr << "run_energy stats, newton on: " << stats << std::endl; - if (!verbose) ::testing::internal::CaptureStdout(); - restart_lammps(lmp, test_config); - if (!verbose) ::testing::internal::GetCapturedStdout(); + if (!verbose) ::testing::internal::CaptureStdout(); + cleanup_lammps(lmp, test_config); + lmp = init_lammps(args, test_config, false); + if (!verbose) ::testing::internal::GetCapturedStdout(); - angle = lmp->force->angle; - EXPECT_FORCES("restart_forces", lmp->atom, test_config.init_forces, epsilon); - EXPECT_STRESS("restart_stress", angle->virial, test_config.init_stress, epsilon); + // skip over these tests if newton bond is forced to be on + if (lmp->force->newton_bond == 0) { + angle = lmp->force->angle; - stats.reset(); - EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.init_energy, epsilon); - if (print_stats) std::cerr << "restart_energy stats:" << stats << std::endl; + EXPECT_FORCES("init_forces (newton off)", lmp->atom, test_config.init_forces, epsilon); + EXPECT_STRESS("init_stress (newton off)", angle->virial, test_config.init_stress, + 2 * epsilon); - if (!verbose) ::testing::internal::CaptureStdout(); - data_lammps(lmp, test_config); - if (!verbose) ::testing::internal::GetCapturedStdout(); + stats.reset(); + EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.init_energy, epsilon); + if (print_stats) std::cerr << "init_energy stats, newton off:" << stats << std::endl; - angle = lmp->force->angle; - EXPECT_FORCES("data_forces", lmp->atom, test_config.init_forces, epsilon); - EXPECT_STRESS("data_stress", angle->virial, test_config.init_stress, epsilon); + if (!verbose) ::testing::internal::CaptureStdout(); + run_lammps(lmp); + if (!verbose) ::testing::internal::GetCapturedStdout(); - stats.reset(); - EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.init_energy, epsilon); - if (print_stats) std::cerr << "data_energy stats:" << stats << std::endl; + EXPECT_FORCES("run_forces (newton off)", lmp->atom, test_config.run_forces, 10 * epsilon); + EXPECT_STRESS("run_stress (newton off)", angle->virial, test_config.run_stress, epsilon); - if (!verbose) ::testing::internal::CaptureStdout(); - cleanup_lammps(lmp, test_config); - if (!verbose) ::testing::internal::GetCapturedStdout(); + stats.reset(); + icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) energy = icompute->compute_scalar(); + EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.run_energy, epsilon); + EXPECT_FP_LE_WITH_EPS(angle->energy, energy, epsilon); + if (print_stats) std::cerr << "run_energy stats, newton off:" << stats << std::endl; + } + + if (!verbose) ::testing::internal::CaptureStdout(); + restart_lammps(lmp, test_config); + if (!verbose) ::testing::internal::GetCapturedStdout(); + + angle = lmp->force->angle; + EXPECT_FORCES("restart_forces", lmp->atom, test_config.init_forces, epsilon); + EXPECT_STRESS("restart_stress", angle->virial, test_config.init_stress, epsilon); + + stats.reset(); + EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.init_energy, epsilon); + if (print_stats) std::cerr << "restart_energy stats:" << stats << std::endl; + + if (!verbose) ::testing::internal::CaptureStdout(); + data_lammps(lmp, test_config); + if (!verbose) ::testing::internal::GetCapturedStdout(); + + angle = lmp->force->angle; + EXPECT_FORCES("data_forces", lmp->atom, test_config.init_forces, epsilon); + EXPECT_STRESS("data_stress", angle->virial, test_config.init_stress, epsilon); + + stats.reset(); + EXPECT_FP_LE_WITH_EPS(angle->energy, test_config.init_energy, epsilon); + if (print_stats) std::cerr << "data_energy stats:" << stats << std::endl; + + if (!verbose) ::testing::internal::CaptureStdout(); + cleanup_lammps(lmp, test_config); + if (!verbose) ::testing::internal::GetCapturedStdout(); }; - TEST(AngleStyle, numdiff) { if (!LAMMPS::is_installed_pkg("EXTRA-FIX")) GTEST_SKIP(); @@ -766,11 +768,11 @@ TEST(AngleStyle, single) nangletypes)); if (utils::strmatch(test_config.angle_style, "^spica")) { - command("pair_style lj/spica 8.0"); - command("pair_coeff * * lj9_6 0.02 2.5"); + command("pair_style lj/spica 8.0"); + command("pair_coeff * * lj9_6 0.02 2.5"); } else { - command("pair_style zero 8.0"); - command("pair_coeff * *"); + command("pair_style zero 8.0"); + command("pair_coeff * *"); } command("angle_style " + test_config.angle_style); diff --git a/unittest/force-styles/test_bond_style.cpp b/unittest/force-styles/test_bond_style.cpp index 81b105259d..39316ec035 100644 --- a/unittest/force-styles/test_bond_style.cpp +++ b/unittest/force-styles/test_bond_style.cpp @@ -362,8 +362,9 @@ TEST(BondStyle, plain) EXPECT_STRESS("run_stress (newton on)", bond->virial, test_config.run_stress, epsilon); stats.reset(); - int id = lmp->modify->find_compute("sum"); - double energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + double energy = 0.0; + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(bond->energy, test_config.run_energy, epsilon); EXPECT_FP_LE_WITH_EPS(bond->energy, energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton on: " << stats << std::endl; @@ -393,8 +394,8 @@ TEST(BondStyle, plain) EXPECT_STRESS("run_stress (newton off)", bond->virial, test_config.run_stress, epsilon); stats.reset(); - id = lmp->modify->find_compute("sum"); - energy = lmp->modify->compute[id]->compute_scalar(); + icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(bond->energy, test_config.run_energy, epsilon); EXPECT_FP_LE_WITH_EPS(bond->energy, energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton off:" << stats << std::endl; @@ -482,8 +483,9 @@ TEST(BondStyle, omp) EXPECT_STRESS("run_stress (newton on)", bond->virial, test_config.run_stress, 10 * epsilon); stats.reset(); - int id = lmp->modify->find_compute("sum"); - double energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + double energy = 0.0; + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(bond->energy, test_config.run_energy, epsilon); // TODO: this is currently broken for OPENMP with bond style hybrid // needs to be fixed in the main code somewhere. Not sure where, though. @@ -517,8 +519,8 @@ TEST(BondStyle, omp) 10 * epsilon); stats.reset(); - id = lmp->modify->find_compute("sum"); - energy = lmp->modify->compute[id]->compute_scalar(); + icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(bond->energy, test_config.run_energy, epsilon); // TODO: this is currently broken for OPENMP with bond style hybrid // needs to be fixed in the main code somewhere. Not sure where, though. @@ -584,13 +586,13 @@ TEST(BondStyle, kokkos_omp) EXPECT_STRESS("run_stress (newton on)", bond->virial, test_config.run_stress, 10 * epsilon); stats.reset(); - int id = lmp->modify->find_compute("sum"); - double energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(bond->energy, test_config.run_energy, epsilon); // FIXME: this is currently broken ??? for KOKKOS with bond style hybrid // needs to be fixed in the main code somewhere. Not sure where, though. - //if (test_config.bond_style.substr(0, 6) != "hybrid") + // if (test_config.bond_style.substr(0, 6) != "hybrid") // EXPECT_FP_LE_WITH_EPS(bond->energy, energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton on: " << stats << std::endl; @@ -621,13 +623,13 @@ TEST(BondStyle, kokkos_omp) 10 * epsilon); stats.reset(); - id = lmp->modify->find_compute("sum"); - energy = lmp->modify->compute[id]->compute_scalar(); + icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(bond->energy, test_config.run_energy, epsilon); // FIXME: this is currently broken ??? for KOKKOS with bond style hybrid // needs to be fixed in the main code somewhere. Not sure where, though. - //if (test_config.bond_style.substr(0, 6) != "hybrid") + // if (test_config.bond_style.substr(0, 6) != "hybrid") // EXPECT_FP_LE_WITH_EPS(bond->energy, energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton off:" << stats << std::endl; diff --git a/unittest/force-styles/test_dihedral_style.cpp b/unittest/force-styles/test_dihedral_style.cpp index 324745cc41..656a45861e 100644 --- a/unittest/force-styles/test_dihedral_style.cpp +++ b/unittest/force-styles/test_dihedral_style.cpp @@ -363,8 +363,9 @@ TEST(DihedralStyle, plain) EXPECT_STRESS("run_stress (newton on)", dihedral->virial, test_config.run_stress, epsilon); stats.reset(); - int id = lmp->modify->find_compute("sum"); - double energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + double energy = 0.0; + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(dihedral->energy, test_config.run_energy, epsilon); EXPECT_FP_LE_WITH_EPS(dihedral->energy, energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton on: " << stats << std::endl; @@ -394,8 +395,8 @@ TEST(DihedralStyle, plain) EXPECT_STRESS("run_stress (newton off)", dihedral->virial, test_config.run_stress, epsilon); stats.reset(); - id = lmp->modify->find_compute("sum"); - energy = lmp->modify->compute[id]->compute_scalar(); + icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(dihedral->energy, test_config.run_energy, epsilon); EXPECT_FP_LE_WITH_EPS(dihedral->energy, energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton off:" << stats << std::endl; @@ -484,8 +485,9 @@ TEST(DihedralStyle, omp) EXPECT_STRESS("run_stress (newton on)", dihedral->virial, test_config.run_stress, 10 * epsilon); stats.reset(); - int id = lmp->modify->find_compute("sum"); - double energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + double energy = 0.0; + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(dihedral->energy, test_config.run_energy, epsilon); // TODO: this is currently broken for OPENMP with dihedral style hybrid // needs to be fixed in the main code somewhere. Not sure where, though. @@ -519,8 +521,8 @@ TEST(DihedralStyle, omp) 10 * epsilon); stats.reset(); - id = lmp->modify->find_compute("sum"); - energy = lmp->modify->compute[id]->compute_scalar(); + icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(dihedral->energy, test_config.run_energy, epsilon); // TODO: this is currently broken for OPENMP with dihedral style hybrid // needs to be fixed in the main code somewhere. Not sure where, though. @@ -587,8 +589,8 @@ TEST(DihedralStyle, kokkos_omp) EXPECT_STRESS("run_stress (newton on)", dihedral->virial, test_config.run_stress, 10 * epsilon); stats.reset(); - int id = lmp->modify->find_compute("sum"); - double energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(dihedral->energy, test_config.run_energy, epsilon); // FIXME: this is currently broken ??? for KOKKOS with dihedral style hybrid @@ -623,8 +625,8 @@ TEST(DihedralStyle, kokkos_omp) 10 * epsilon); stats.reset(); - id = lmp->modify->find_compute("sum"); - energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(dihedral->energy, test_config.run_energy, epsilon); // FIXME: this is currently broken ??? for KOKKOS with dihedral style hybrid diff --git a/unittest/force-styles/test_improper_style.cpp b/unittest/force-styles/test_improper_style.cpp index a65bf438df..bddb986d9c 100644 --- a/unittest/force-styles/test_improper_style.cpp +++ b/unittest/force-styles/test_improper_style.cpp @@ -356,8 +356,9 @@ TEST(ImproperStyle, plain) EXPECT_STRESS("run_stress (newton on)", improper->virial, test_config.run_stress, epsilon); stats.reset(); - int id = lmp->modify->find_compute("sum"); - double energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + double energy = 0.0; + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(improper->energy, test_config.run_energy, epsilon); EXPECT_FP_LE_WITH_EPS(improper->energy, energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton on: " << stats << std::endl; @@ -387,8 +388,8 @@ TEST(ImproperStyle, plain) EXPECT_STRESS("run_stress (newton off)", improper->virial, test_config.run_stress, epsilon); stats.reset(); - id = lmp->modify->find_compute("sum"); - energy = lmp->modify->compute[id]->compute_scalar(); + icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(improper->energy, test_config.run_energy, epsilon); EXPECT_FP_LE_WITH_EPS(improper->energy, energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton off:" << stats << std::endl; @@ -477,8 +478,9 @@ TEST(ImproperStyle, omp) EXPECT_STRESS("run_stress (newton on)", improper->virial, test_config.run_stress, 10 * epsilon); stats.reset(); - int id = lmp->modify->find_compute("sum"); - double energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + double energy = 0.0; + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(improper->energy, test_config.run_energy, epsilon); // TODO: this is currently broken for OPENMP with improper style hybrid // needs to be fixed in the main code somewhere. Not sure where, though. @@ -512,8 +514,8 @@ TEST(ImproperStyle, omp) 10 * epsilon); stats.reset(); - id = lmp->modify->find_compute("sum"); - energy = lmp->modify->compute[id]->compute_scalar(); + icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) energy = icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(improper->energy, test_config.run_energy, epsilon); // TODO: this is currently broken for OPENMP with improper style hybrid // needs to be fixed in the main code somewhere. Not sure where, though. @@ -532,8 +534,9 @@ TEST(ImproperStyle, kokkos_omp) if (!LAMMPS::is_installed_pkg("KOKKOS")) GTEST_SKIP(); if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - LAMMPS::argv args = {"ImproperStyle", "-log", "none", "-echo", "screen", "-nocite", - "-k", "on", "t", "4", "-sf", "kk"}; + LAMMPS::argv args = {"ImproperStyle", "-log", "none", "-echo", "screen", + "-nocite", "-k", "on", "t", "4", + "-sf", "kk"}; ::testing::internal::CaptureStdout(); LAMMPS *lmp = init_lammps(args, test_config, true); @@ -579,12 +582,12 @@ TEST(ImproperStyle, kokkos_omp) EXPECT_STRESS("run_stress (newton on)", improper->virial, test_config.run_stress, 10 * epsilon); stats.reset(); - int id = lmp->modify->find_compute("sum"); - double energy = lmp->modify->compute[id]->compute_scalar(); + auto *icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(improper->energy, test_config.run_energy, epsilon); // FIXME: this is currently broken ??? for KOKKOS with improper style hybrid // needs to be fixed in the main code somewhere. Not sure where, though. - //if (test_config.improper_style.substr(0, 6) != "hybrid") + // if (test_config.improper_style.substr(0, 6) != "hybrid") // EXPECT_FP_LE_WITH_EPS(improper->energy, energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton on: " << stats << std::endl; @@ -614,12 +617,12 @@ TEST(ImproperStyle, kokkos_omp) 10 * epsilon); stats.reset(); - id = lmp->modify->find_compute("sum"); - energy = lmp->modify->compute[id]->compute_scalar(); + icompute = lmp->modify->get_compute_by_id("sum"); + if (icompute) icompute->compute_scalar(); EXPECT_FP_LE_WITH_EPS(improper->energy, test_config.run_energy, epsilon); // FIXME: this is currently broken ??? for KOKKOS with improper style hybrid // needs to be fixed in the main code somewhere. Not sure where, though. - //if (test_config.improper_style.substr(0, 6) != "hybrid") + // if (test_config.improper_style.substr(0, 6) != "hybrid") // EXPECT_FP_LE_WITH_EPS(improper->energy, energy, epsilon); if (print_stats) std::cerr << "run_energy stats, newton off:" << stats << std::endl; } diff --git a/unittest/force-styles/tests/atomic-pair-meam_ms.yaml b/unittest/force-styles/tests/atomic-pair-meam_ms.yaml index fff938d940..d8dcd7b1eb 100644 --- a/unittest/force-styles/tests/atomic-pair-meam_ms.yaml +++ b/unittest/force-styles/tests/atomic-pair-meam_ms.yaml @@ -2,7 +2,7 @@ lammps_version: 7 Feb 2024 tags: slow date_generated: Wed Feb 28 17:07:42 2024 -epsilon: 2.5e-12 +epsilon: 2.5e-11 skip_tests: prerequisites: ! | pair meam/ms diff --git a/unittest/force-styles/tests/atomic-pair-pedone.yaml b/unittest/force-styles/tests/atomic-pair-pedone.yaml index ea97d9ee8c..82c6405e65 100644 --- a/unittest/force-styles/tests/atomic-pair-pedone.yaml +++ b/unittest/force-styles/tests/atomic-pair-pedone.yaml @@ -1,6 +1,6 @@ --- lammps_version: 7 Feb 2024 -tags: +tags: unstable date_generated: Tue Apr 9 07:44:34 2024 epsilon: 7.5e-13 skip_tests: diff --git a/unittest/force-styles/tests/bond-harmonic_shift.yaml b/unittest/force-styles/tests/bond-harmonic_shift.yaml index 7a41c2c3cd..61212a468b 100644 --- a/unittest/force-styles/tests/bond-harmonic_shift.yaml +++ b/unittest/force-styles/tests/bond-harmonic_shift.yaml @@ -17,7 +17,10 @@ bond_coeff: ! | 4 650.0 1.2 0.2 5 450.0 1.0 0.0 equilibrium: 5 1.5 1.1 1.3 1.2 1 -extract: ! "" +extract: ! | + k 1 + r0 1 + r1 1 natoms: 29 init_energy: -9395.519982389222 init_stress: ! |- diff --git a/unittest/force-styles/tests/dihedral-cosine_squared_restricted.yaml b/unittest/force-styles/tests/dihedral-cosine_squared_restricted.yaml index f67a093017..3f4d217b9a 100644 --- a/unittest/force-styles/tests/dihedral-cosine_squared_restricted.yaml +++ b/unittest/force-styles/tests/dihedral-cosine_squared_restricted.yaml @@ -1,8 +1,8 @@ --- lammps_version: 7 Feb 2024 -tags: +tags: date_generated: Sat Apr 13 11:41:16 2024 -epsilon: 2.5e-13 +epsilon: 1.0e-11 skip_tests: prerequisites: ! | atom full diff --git a/unittest/fortran/keepstuff.f90 b/unittest/fortran/keepstuff.f90 index 63184e1006..c964c8a9c6 100644 --- a/unittest/fortran/keepstuff.f90 +++ b/unittest/fortran/keepstuff.f90 @@ -4,9 +4,9 @@ MODULE keepstuff TYPE(LAMMPS), SAVE :: lmp INTEGER, SAVE :: mycomm CHARACTER(LEN=40), DIMENSION(3), PARAMETER :: demo_input = & - [ CHARACTER(LEN=40) :: & - 'region box block 0 $x 0 2 0 2', & - 'create_box 1 box', & + [ CHARACTER(LEN=40) :: & + 'region box block 0 $x 0 2 0 2', & + 'create_box 1 box', & 'create_atoms 1 single 1.0 1.0 ${zpos}' ] CHARACTER(LEN=40), DIMENSION(3), PARAMETER :: big_input = & [ CHARACTER(LEN=40) :: & @@ -14,15 +14,26 @@ MODULE keepstuff 'create_box 1 box', & 'create_atoms 1 single 1.0 1.0 ${zpos}' ] CHARACTER(LEN=40), DIMENSION(2), PARAMETER :: cont_input = & - [ CHARACTER(LEN=40) :: & - 'create_atoms 1 single &', & + [ CHARACTER(LEN=40) :: & + 'create_atoms 1 single &', & ' 0.2 0.1 0.1' ] + CHARACTER(LEN=60), DIMENSION(18), PARAMETER :: prop_input = & + [ CHARACTER(LEN=60) :: 'fix 1 all nve', 'mass 1 3.0', & + 'fix 2 all property/atom mol q rmass ghost yes', & + 'fix 3 all property/atom i_one i2_two 2 d_three d2_four 2', & + 'set group all mass 2.0', 'set atom 1 charge -1', & + 'set atom 2 charge 1', 'set atom 1 mol 2', 'set atom 2 mol 1', & + 'set atom 1 i_one -3', 'set atom 2 i_one 3', & + 'set atom 1 d_three -1.3', 'set atom 2 d_three 3.5', & + 'set atom 1 i_two[1] -3', 'set atom 2 i_two[2] 3', & + 'set atom * d_four[1] -1.3', 'set atom * d_four[2] 3.5', & + 'run 0 post no' ] CHARACTER(LEN=40), DIMENSION(1), PARAMETER :: more_input = & [ CHARACTER(LEN=40) :: 'create_atoms 1 single 0.5 0.5 0.5' ] CHARACTER(LEN=40), DIMENSION(3), PARAMETER :: pair_input = & - [ CHARACTER(LEN=40) :: & - 'pair_style lj/cut 2.5', & - 'pair_coeff 1 1 1.0 1.0', & + [ CHARACTER(LEN=40) :: & + 'pair_style lj/cut 2.5', & + 'pair_coeff 1 1 1.0 1.0', & 'mass 1 2.0' ] INTERFACE @@ -63,4 +74,3 @@ CONTAINS END FUNCTION f2c_string END MODULE keepstuff - diff --git a/unittest/fortran/test_fortran_extract_atom.f90 b/unittest/fortran/test_fortran_extract_atom.f90 index 262e5de47d..0c5a52ef25 100644 --- a/unittest/fortran/test_fortran_extract_atom.f90 +++ b/unittest/fortran/test_fortran_extract_atom.f90 @@ -24,12 +24,13 @@ END SUBROUTINE f_lammps_close SUBROUTINE f_lammps_setup_extract_atom() BIND(C) USE LIBLAMMPS - USE keepstuff, ONLY : lmp, big_input, cont_input, pair_input + USE keepstuff, ONLY : lmp, big_input, cont_input, pair_input, prop_input IMPLICIT NONE CALL lmp%commands_list(big_input) CALL lmp%commands_list(cont_input) CALL lmp%commands_list(pair_input) + CALL lmp%commands_list(prop_input) END SUBROUTINE f_lammps_setup_extract_atom FUNCTION f_lammps_extract_atom_mass() BIND(C) @@ -44,6 +45,19 @@ FUNCTION f_lammps_extract_atom_mass() BIND(C) f_lammps_extract_atom_mass = mass(1) END FUNCTION f_lammps_extract_atom_mass +FUNCTION f_lammps_extract_atom_mass_size() BIND(C) + USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int + USE LIBLAMMPS + USE keepstuff, ONLY : lmp + IMPLICIT NONE + INTEGER(c_int) :: f_lammps_extract_atom_mass_size, ntypes + REAL(c_double), DIMENSION(:), POINTER :: mass => NULL() + + ntypes = lmp%extract_setting('ntypes') + mass = lmp%extract_atom('mass') + f_lammps_extract_atom_mass_size = SIZE(mass) +END FUNCTION f_lammps_extract_atom_mass_size + FUNCTION f_lammps_extract_atom_tag_int(i) BIND(C) USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int USE LIBLAMMPS @@ -83,6 +97,18 @@ FUNCTION f_lammps_extract_atom_type(i) BIND(C) f_lammps_extract_atom_type = atype(i) END FUNCTION f_lammps_extract_atom_type +FUNCTION f_lammps_extract_atom_type_size() BIND(C) + USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int + USE LIBLAMMPS + USE keepstuff, ONLY : lmp + IMPLICIT NONE + INTEGER(c_int) :: f_lammps_extract_atom_type_size + INTEGER(c_int), DIMENSION(:), POINTER :: atype => NULL() + + atype = lmp%extract_atom('type') + f_lammps_extract_atom_type_size = size(atype) +END FUNCTION f_lammps_extract_atom_type_size + FUNCTION f_lammps_extract_atom_mask(i) BIND(C) USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int USE LIBLAMMPS @@ -109,6 +135,19 @@ SUBROUTINE f_lammps_extract_atom_x(i, x) BIND(C) x = xptr(:,i) END SUBROUTINE f_lammps_extract_atom_x +FUNCTION f_lammps_extract_atom_x_size(i) BIND(C) + USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int + USE LIBLAMMPS + USE keepstuff, ONLY : lmp + IMPLICIT NONE + INTEGER(c_int), INTENT(IN), VALUE :: i + INTEGER(c_int) :: f_lammps_extract_atom_x_size + REAL(c_double), DIMENSION(:,:), POINTER :: xptr => NULL() + + xptr = lmp%extract_atom('x') + f_lammps_extract_atom_x_size = SIZE(xptr, i) +END FUNCTION f_lammps_extract_atom_x_size + SUBROUTINE f_lammps_extract_atom_v(i, v) BIND(C) USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int USE LIBLAMMPS @@ -121,3 +160,16 @@ SUBROUTINE f_lammps_extract_atom_v(i, v) BIND(C) vptr = lmp%extract_atom('v') v = vptr(:,i) END SUBROUTINE f_lammps_extract_atom_v + +FUNCTION f_lammps_extract_atom_v_size(i) BIND(C) + USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int + USE LIBLAMMPS + USE keepstuff, ONLY : lmp + IMPLICIT NONE + INTEGER(c_int), INTENT(IN), VALUE :: i + INTEGER(c_int) :: f_lammps_extract_atom_v_size + REAL(c_double), DIMENSION(:,:), POINTER :: xptr => NULL() + + xptr = lmp%extract_atom('v') + f_lammps_extract_atom_v_size = SIZE(xptr, i) +END FUNCTION f_lammps_extract_atom_v_size diff --git a/unittest/fortran/wrap_extract_atom.cpp b/unittest/fortran/wrap_extract_atom.cpp index 2552d6a10f..9430959b2b 100644 --- a/unittest/fortran/wrap_extract_atom.cpp +++ b/unittest/fortran/wrap_extract_atom.cpp @@ -1,6 +1,7 @@ // unit tests for extracting Atom class data from a LAMMPS instance through the // Fortran wrapper +#include "atom.h" #include "lammps.h" #include "library.h" #include @@ -16,12 +17,16 @@ void *f_lammps_with_args(); void f_lammps_close(); void f_lammps_setup_extract_atom(); double f_lammps_extract_atom_mass(); +int f_lammps_extract_atom_mass_size(); int f_lammps_extract_atom_tag_int(int); int64_t f_lammps_extract_atom_tag_int64(int64_t); int f_lammps_extract_atom_type(int); +int f_lammps_extract_atom_type_size(); int f_lammps_extract_atom_mask(int); void f_lammps_extract_atom_x(int, double *); +int f_lammps_extract_atom_x_size(int); void f_lammps_extract_atom_v(int, double *); +int f_lammps_extract_atom_v_size(int); } class LAMMPS_extract_atom : public ::testing::Test { @@ -50,7 +55,9 @@ protected: TEST_F(LAMMPS_extract_atom, mass) { f_lammps_setup_extract_atom(); - EXPECT_DOUBLE_EQ(f_lammps_extract_atom_mass(), 2.0); + int ntypes = lmp->atom->ntypes; + EXPECT_DOUBLE_EQ(f_lammps_extract_atom_mass(), 3.0); + EXPECT_EQ(f_lammps_extract_atom_mass_size(), ntypes + 1); }; TEST_F(LAMMPS_extract_atom, tag) @@ -68,8 +75,10 @@ TEST_F(LAMMPS_extract_atom, tag) TEST_F(LAMMPS_extract_atom, type) { f_lammps_setup_extract_atom(); + int nall = lmp->atom->nlocal + lmp->atom->nghost; EXPECT_EQ(f_lammps_extract_atom_type(1), 1); EXPECT_EQ(f_lammps_extract_atom_type(2), 1); + EXPECT_EQ(f_lammps_extract_atom_type_size(), nall); }; TEST_F(LAMMPS_extract_atom, mask) @@ -86,6 +95,7 @@ TEST_F(LAMMPS_extract_atom, mask) TEST_F(LAMMPS_extract_atom, x) { f_lammps_setup_extract_atom(); + int nall = lmp->atom->nlocal + lmp->atom->nghost; double x1[3]; double x2[3]; f_lammps_extract_atom_x(1, x1); @@ -96,11 +106,15 @@ TEST_F(LAMMPS_extract_atom, x) EXPECT_DOUBLE_EQ(x2[0], 0.2); EXPECT_DOUBLE_EQ(x2[1], 0.1); EXPECT_DOUBLE_EQ(x2[2], 0.1); + // in Fortran row and column are swapped + EXPECT_EQ(f_lammps_extract_atom_x_size(1), 3); + EXPECT_EQ(f_lammps_extract_atom_x_size(2), nall); } TEST_F(LAMMPS_extract_atom, v) { f_lammps_setup_extract_atom(); + int nall = lmp->atom->nlocal + lmp->atom->nghost; double v1[3]; double v2[3]; f_lammps_extract_atom_v(1, v1); @@ -117,4 +131,13 @@ TEST_F(LAMMPS_extract_atom, v) EXPECT_DOUBLE_EQ(v1[0], 1.0); EXPECT_DOUBLE_EQ(v1[1], 2.0); EXPECT_DOUBLE_EQ(v1[2], 3.0); + // in Fortran row and column are swapped! + EXPECT_EQ(f_lammps_extract_atom_v_size(1), 3); + EXPECT_EQ(f_lammps_extract_atom_v_size(2), lmp->atom->nlocal); + lammps_command(lmp, "comm_modify vel yes"); + lammps_command(lmp, "run 0 post no"); + EXPECT_EQ(f_lammps_extract_atom_v_size(1), 3); + EXPECT_EQ(f_lammps_extract_atom_v_size(2), nall); } + +// TODO: write tests for custom properties diff --git a/unittest/python/python-commands.py b/unittest/python/python-commands.py index fcf731bf3f..b1432e67b9 100644 --- a/unittest/python/python-commands.py +++ b/unittest/python/python-commands.py @@ -656,6 +656,9 @@ create_atoms 1 single & self.assertEqual(self.lmp.extract_global("map_tag_max"), -1) self.assertEqual(self.lmp.extract_global("sortfreq"), 1000) self.assertEqual(self.lmp.extract_global("nextsort"), 0) + self.assertEqual(self.lmp.extract_global("xlattice"), 1.0) + self.assertEqual(self.lmp.extract_global("ylattice"), 1.0) + self.assertEqual(self.lmp.extract_global("zlattice"), 1.0) # set and initialize r-RESPA self.lmp.command("run_style respa 3 5 2 pair 2 kspace 3") diff --git a/unittest/python/python-numpy.py b/unittest/python/python-numpy.py index 839e5d03af..4930527a61 100644 --- a/unittest/python/python-numpy.py +++ b/unittest/python/python-numpy.py @@ -155,67 +155,104 @@ class PythonNumpy(unittest.TestCase): self.assertEqual(values[1,0], 1.5) self.assertEqual(values[1,3], 1.5) - def testExtractAtomDeprecated(self): - self.lmp.command("units lj") - self.lmp.command("atom_style atomic") - self.lmp.command("atom_modify map array") - self.lmp.command("region box block 0 2 0 2 0 2") - self.lmp.command("create_box 1 box") - - x = [ - 1.0, 1.0, 1.0, - 1.0, 1.0, 1.5 - ] - - types = [1, 1] - - self.assertEqual(self.lmp.create_atoms(2, id=None, type=types, x=x), 2) - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) - self.assertEqual(nlocal, 2) - - ident = self.lmp.numpy.extract_atom_iarray("id", nlocal, dim=1) - self.assertEqual(len(ident), 2) - - ntypes = self.lmp.extract_global("ntypes", LAMMPS_INT) - self.assertEqual(ntypes, 1) - - x = self.lmp.numpy.extract_atom_darray("x", nlocal, dim=3) - v = self.lmp.numpy.extract_atom_darray("v", nlocal, dim=3) - self.assertEqual(len(x), 2) - self.assertTrue((x[0] == (1.0, 1.0, 1.0)).all()) - self.assertTrue((x[1] == (1.0, 1.0, 1.5)).all()) - self.assertEqual(len(v), 2) - def testExtractAtom(self): self.lmp.command("units lj") self.lmp.command("atom_style atomic") self.lmp.command("atom_modify map array") self.lmp.command("region box block 0 2 0 2 0 2") - self.lmp.command("create_box 1 box") + self.lmp.command("create_box 2 box") - x = [ - 1.0, 1.0, 1.0, - 1.0, 1.0, 1.5 - ] + x = [ 1.0, 1.0, 1.0, 1.0, 1.0, 1.5, 1.5, 1.0, 1.0 ] + types = [1, 2, 1] + ids = [1, 2, 3] + self.assertEqual(self.lmp.create_atoms(3, id=ids, type=types, x=x), 3) + self.lmp.command("mass * 2.0") + self.lmp.command("pair_style zero 1.1") + self.lmp.command("pair_coeff * *") + self.lmp.command("fix props all property/atom i_one i2_two 2 d_three d2_four 2"); + self.lmp.command("fix rmass all property/atom mol q rmass ghost yes"); + self.lmp.command("fix 1 all nve") + self.lmp.command("run 0 post no") + ntypes = self.lmp.extract_setting("ntypes"); + nlocal = self.lmp.extract_setting("nlocal"); + nall = self.lmp.extract_setting("nall"); + self.assertEqual(nlocal, 3) + self.assertEqual(ntypes, 2) + self.assertEqual(nall, 63) - types = [1, 1] + self.lmp.command("set atom 1 charge -1"); + self.lmp.command("set atom 2 charge 1"); + self.lmp.command("set atom 3 charge 0"); + self.lmp.command("set atom * mol 2"); + self.lmp.command("set atom 2 mol 1"); + self.lmp.command("set atom 1 i_one -3"); + self.lmp.command("set atom 2 i_one 3"); + self.lmp.command("set atom 2 d_three -1.3"); + self.lmp.command("set atom 3 d_three 3.5"); + self.lmp.command("set atom 1 i_two[1] -3"); + self.lmp.command("set atom 2 i_two[2] 3"); + self.lmp.command("set atom * d_four[1] -1.3"); + self.lmp.command("set atom * d_four[2] 3.5"); + self.lmp.command("run 0 post no") - self.assertEqual(self.lmp.create_atoms(2, id=None, type=types, x=x), 2) - nlocal = self.lmp.extract_global("nlocal") - self.assertEqual(nlocal, 2) + mass = self.lmp.numpy.extract_atom("mass") + self.assertEqual(len(mass), ntypes + 1) + self.assertTrue((mass == (0.0, 2.0, 2.0)).all()) + + rmass = self.lmp.numpy.extract_atom("rmass") + self.assertEqual(len(rmass), nall) + self.assertTrue((rmass[0:3] == (0.0, 0.0, 0.0)).all()) + + charge = self.lmp.numpy.extract_atom("q") + self.assertEqual(len(charge), nall) + self.assertTrue((charge[0:3] == (-1.0, 1.0, 0.0)).all()) + + molecule = self.lmp.numpy.extract_atom("molecule") + self.assertEqual(len(molecule), nall) + self.assertTrue((molecule[0:3] == (2, 1, 2)).all()) ident = self.lmp.numpy.extract_atom("id") - self.assertEqual(len(ident), 2) + self.assertEqual(len(ident), nall) + self.assertTrue((ident[0:3] == (1, 2, 3)).all()) - ntypes = self.lmp.extract_global("ntypes") - self.assertEqual(ntypes, 1) + atype = self.lmp.numpy.extract_atom("type") + self.assertEqual(len(atype), nall) + self.assertTrue((atype[0:3] == (1, 2, 1)).all()) x = self.lmp.numpy.extract_atom("x") v = self.lmp.numpy.extract_atom("v") - self.assertEqual(len(x), 2) + self.assertEqual(len(x), nall) + self.assertEqual(len(x[0]), 3) self.assertTrue((x[0] == (1.0, 1.0, 1.0)).all()) self.assertTrue((x[1] == (1.0, 1.0, 1.5)).all()) - self.assertEqual(len(v), 2) + self.assertTrue((x[2] == (1.5, 1.0, 1.0)).all()) + self.assertEqual(len(v), nlocal) + self.assertEqual(len(v[0]), 3) + + self.lmp.command("comm_modify vel yes"); + self.lmp.command("run 0 post no") + + v = self.lmp.numpy.extract_atom("v") + self.assertEqual(len(v), nall) + + one = self.lmp.numpy.extract_atom("i_one") + two = self.lmp.numpy.extract_atom("i2_two") + three = self.lmp.numpy.extract_atom("d_three") + four = self.lmp.numpy.extract_atom("d2_four") + self.assertEqual(len(one), nlocal) + self.assertTrue((one == (-3, 3, 0)).all()) + self.assertEqual(len(two), nlocal) + self.assertEqual(len(two[0]), 2) + self.assertTrue((two[0] == (-3, 0)).all()) + self.assertTrue((two[1] == (0, 3)).all()) + self.assertTrue((two[2] == (0, 0)).all()) + self.assertEqual(len(three), nlocal) + self.assertTrue((three == (0.0, -1.3, 3.5)).all()) + self.assertEqual(len(four), nlocal) + self.assertEqual(len(four[0]), 2) + self.assertTrue((four[0] == (-1.3, 3.5)).all()) + self.assertTrue((four[1] == (-1.3, 3.5)).all()) + self.assertTrue((four[2] == (-1.3, 3.5)).all()) @unittest.skipIf(not has_full,"Gather bonds test") def testGatherBond_newton_on(self):